0

さて、私はちょうど同じような質問をしたことを知っていますが、それを単純化しようとしたので、私は悪い例と思われるものを使用しました。質問。

私はこのような設定をしています:

EDTにメソッドがあります。一連のJTextAreasを循環し、空のJTextAreasを削除します。

それで、キャッチは何ですか?

JTextAreaが削除されるたびに、リスナーがトリガーされ、GUIが視覚的に更新されます(JTextAreaの下にあるすべてのビジュアルオブジェクトが引き上げられます)。

では、どうなりますか?さて、ループが実行されている間、JTextAreasは視覚的に削除されず、EDT queに追加され(推測します)、ループが完了した後にすべて一度に削除されます。次に起こることは、すべてのリスナーが一度に起動し、GUI全体を台無しにすることです。

すべてがEDTで実行されるため、コードは次のように動作することを期待していました。

  • 開始サイクル
  • 空のJTextAreaを見つける
  • 空のJTextAreaを完全に削除->リスナーをトリガーします
    • リスナーでコードを実行する
  • ループを続ける
  • 次の空のJTextAreaを見つけます
  • すすぎ、ループの終わりに達するまで繰り返します

プログラムをこのように動作させるにはどうすればよいですか?

空白のJTextAreasを検索する新しいスレッドを作成し、invokeLater(new Runnable())で削除を実行する必要がありますか?検索を行う実際のコードは実際にはCPUを対象としておらず、JTextAreasのarrayListを通過するだけで、チェックはgetText()。equals( "")であるため、実際には必要ないと思います...

4

1 に答える 1

2

1つのテキスト領域を削除します。SwingUtilities.invokeLater()削除するものがまだあるかどうかを判断します。ある場合は、現在のコードにコールバックするタスクをキューに入れます。すべてのテキスト領域が削除されるまで繰り返します。

于 2013-03-01T02:51:51.913 に答える