Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Как обновлять jTextField ?


Автор: ЛунныйОборотень 31.10.2010, 10:59
Здравствуйте!

Есть задача выводить время в текстовое поле и следовательно, встает задача обновления это поля через равные промежутки времени .

Пытался сделать так-
Код

  public static void times() throws InterruptedException {
int k=0;
       while(k>=0)
      {
        Thread.sleep(100);

            DataText.setText("" + Laba6App.time);
       k++; 
       }


    }

И аналогичным способом через цикл.
А метод засунуть в кнопку.

Результат-зависание GUI .

Пришел к выводу,что нужно сделать привязку текстового поля к переменной времени.
Но не знаю как это сделать..

Среда разработки - NetBeans 6.9

Спасибо.



Автор: antslava 31.10.2010, 12:45
Что-то вроде этого ?
Код

import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class ButtonTimer extends JFrame implements Runnable {
    
    private JLabel lblTime = null;
    private JButton btnTime = null;
    
    public static final void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new ButtonTimer();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
    
    public ButtonTimer() {
        setTitle("Time Button");
        setLayout(new FlowLayout());
        lblTime = new JLabel("Time: ");
        btnTime = new JButton(new Date(System.currentTimeMillis()).toString());
        add(lblTime);
        add(btnTime);
        pack();
        Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(this, 1000, 1000, TimeUnit.MILLISECONDS);
        
    }
    
    public void run() {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                btnTime.setText(new Date(System.currentTimeMillis()).toString());
            }
        });
    }
}


Автор: ЛунныйОборотень 31.10.2010, 15:28
Спасибо!
Интересное решение!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)