2012-07-18 12 views
5

JButton ActionListenerに問題があります。 doTheCleaning()メソッドは別のクラスで定義されており、呼び出されるとGUIに一連の変更が加えられます。JButton ActionListener - JButtonをクリックした後にのみGUIを更新します。

public void doTheCleaning(){ 
    //change image icon 
    //had thread.sleep here 
    //insert to text area 
    //had thread.sleep here 
    //etc 
} 

はその後、別のクラスでは、私は私のdoTheCleaning()メソッドを含むクラスをインスタンス化し、私のActionListenerは、このように書かれた私のJButtonのための私のactionPerformed()メソッドで書かれていた:私はどのように知っている

public void actionPerformed(ActionEvent e){ 
    //some code 
    //newClass.doTheCleaning(); 
} 

addActionListener()のような残りのことをするために、そのことについて質問する必要はありません。私の懸念は、doTheCleaning()メソッドが呼び出されたときに実行されるGUIのすべての変更が、ボタンがクリックされた後にのみ適用されることです。これが起こると、私のラベルとテキストエリアで起こった変更の間の継承は表示されませんでした。私のテスタークラスで直接呼び出すと、コードは正常に動作しますが、actionperformedメソッドの中で呼び出すと、私のGUIの最終状態だけが表示されます。どの要素が最初に変更されたのか、次にどの要素が変更されたのかなどを示す必要があります。

これらの変更をJButtonをクリックしたときにのみ行う必要がある場合は、どうすれば実現できますか?

**私はまだJavaでGUIをするのはあまりよくありません。私はあなたが私のコードを与えることなく私のポイントを理解してくれたことを願っています。必要に応じて私はできました。ありがとう。

+0

ラベルやテキストエリアにいくつかの変更があり、ユーザーが各ステップを見ながら1つずつ変更してもらいたいのですか? – darrenp

+0

読みやすくするために、スペルのルールに従ってください(文章の最初の文字は大文字にしてください:-) – kleopatra

+2

GUIコード内の呼び出しのように 'Thread.sleep(...)'を使わないでください。この目的のために[javax.swing.TImer](http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html)を使用してください。EDTのEvent Dispatch Thread –

答えて

12

EDTで集中的な操作を実行しないと、GUIが応答しなくなり、GUIの更新が表示されないことがあります。

詳しくはConcurrency in Swingをご覧ください。

+1

これは良い説明です:-) –

+5

同意、1 +。また、[Concurrency in Swingチュートリアル](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)リンクを追加するように編集しました。 –

+0

@HovercraftFullOfEelsありがとうございます。 –

関連する問題