Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ПАУЗА, задержка 
V
    Опции темы
hagerds
Дата 9.1.2012, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 12.12.2011

Репутация: нет
Всего: нет



пытаюсь заставить JLabel менять своё название каждую секунду
пример:
ggg :3
ggg :2
ggg :1

помогите подправить код.
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class test7 {

    public static void main(String[] args) throws InterruptedException {
        jFrame frame=new jFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
class jFrame extends JFrame
{
    public jFrame() 
    {
        label=new JLabel(str);
        
        JPanel panel=new JPanel();
        panel.setLayout(new GridLayout(2,0));
        
        JButton button=new JButton("start");
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {
                try {
                    for(int i=3;i>0;i--)
                    {
                        System.out.println(str+i);
                        label.setText(str+i);
                        Thread.sleep(1000);
                        }
                    } catch (InterruptedException e) {e.printStackTrace();}
            }});
        
        panel.add(label);
        panel.add(button);
        this.getContentPane().add(panel);
        pack();
    }
    private JLabel label;
    private String str="ggg :";
}

PM MAIL   Вверх
Dummy
Дата 9.1.2012, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 2
Всего: 19



Thread.sleep() в Event Dispatch Thread низя, ибо EDT един для Swing, а значит, мы подвесим UI нашего приложения целиком. Поэтому пользуемся javax.swing.Timer:

Код

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        TimerFrame frame = new TimerFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class TimerFrame extends JFrame implements ActionListener {
    private int numUpdated;
    private JLabel label;
    private Timer  updateTimer;
    
    TimerFrame() {
        label = new JLabel("ggg:");

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(2, 0));

        JButton button = new JButton("start");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                startUpdates();
            }
        });

        panel.add(label);
        panel.add(button);
        this.getContentPane().add(panel);
        pack();
    }
    
    private void startUpdates() {
        updateTimer = new Timer(1000, this);
        updateTimer.start();
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        numUpdated++;

        label.setText("ggg: " + numUpdated);
        
        if (numUpdated == 3) {
            updateTimer.stop();
        }
    }
}

PM MAIL   Вверх
hagerds
Дата 10.1.2012, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 12.12.2011

Репутация: нет
Всего: нет



Спасибо большое за помощь smile  smile  smile 

В коде разобрался, а вот с теорией не очень понял. 
1)Dummy можешь ещё раз по подробнее объяснить почему Thread нельзя  и почему пользуемся Timer? smile 
2)InterruptedException - обязательно нужна и почему?

3)немного поспешил радоваться =). Можно ли заблокировать приложение на 3 секунды,как при Thread.sleep, но при этом JLabel отображал бы изменения.1,2,3 или 3,2,1?

пример: по нажатию на start. JLabel изменяется 1,2,3 и после 3 секунд выводится "привет!!!"

Код

...
button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                startUpdates();
                System.out.println("привет!!!");
            }
        });
...


Это сообщение отредактировал(а) hagerds - 10.1.2012, 01:58
PM MAIL   Вверх
aleksandy
Дата 10.1.2012, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 1
Всего: 5



Цитата(hagerds @  10.1.2012,  00:56 Найти цитируемый пост)
В коде разобрался, а вот с теорией не очень понял. 

Раз и два.
PM   Вверх
Mirkes
Дата 10.1.2012, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 2
Всего: 17



Эта задача разбиралась на форуме неоднократно. Наиболее полное обсуждение следующее


--------------------
Mirkes
PM MAIL   Вверх
hagerds
Дата 20.5.2012, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 12.12.2011

Репутация: нет
Всего: нет



Всем спасибо!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.