1

私がやりたいことは、ボタンを押すと JTextField テキストが 3 秒ごとに新しい値に更新され始めることです。Thread sleep メソッドを試してみましたが、プログラム全体がスリープ時間の間フリーズし、終了後にテキストフィールドが最新の入力を取得します。だからここに私がやろうとしていることのより良い説明の例があります。

使用可能な値がある限り、3 秒ごとに JTextFiel に数値を入れる JButton を押します。新しいテキストを追加したくありません。古いものを新しいものに置き換えるだけです。どうすればそれができるか、誰にもアイデアがありますか?前もって感謝します。

4

3 に答える 3

2

を使用する必要がありますjavax.swing.Timer

final Timer updater = new Timer(3000, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // update JTextField
    }
});
JButton button = new JButton("Click me!");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        updater.start();
    }
});

Timer(のように)イベントディスパッチスレッドをブロックしThread.sleepないため、プログラムが応答しなくなることはありません。

于 2012-04-28T21:45:15.813 に答える
1

EDTで眠ることはできません。あなたはswingworker(より良い解決策)を使うか、次のようなことをすることができます:

//sleep in new thread
new Thread (new Runnable() {
    public void run() {
        Thread.sleep(3000);
         //update UI in EDT
         SwingUtilities.invokelater(new Runnable()  {
              public void run() {updateYourTextHere();}
          });
    }
}).start();
于 2012-04-28T21:48:21.657 に答える
0

別のスレッドで「作業」を完了する必要があります。ここでいくつかの回答を参照してください:Java GUIは変更されていません

于 2012-04-28T21:43:56.123 に答える