JTextField に注目し続ける必要があります。アプリケーションは Swing ライブラリを使用します。フォーカスを他のコンポーネントに変更するユーザーのミスを避けるために、時々そのフィールドにフォーカスを設定する必要があります。SwingWorker を使用する必要があると思います。フォーカスの設定は Swing コンポーネントの操作であるため、EDT で呼び出す必要があります。私の質問は、それを行うために SwingWorker を書く方法ですか? done() メソッドが EDT で呼び出されるタスクを渡すことはわかっていますが、このタスクを 2 秒ごとに呼び出す必要があります。メソッド done() は 1 回呼び出されます。だから多分このようなsthは大丈夫でしょうか?
public class myWorker extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//here set focus on JTextField
return null;
}
});
}}
編集:
EDT で呼び出されるため、SwingWorker の一部であるメソッド process() が適切である可能性があることに気付きました。よくわかりませんが、このメソッドは、publish() メソッドを呼び出すと、おそらく常に呼び出されます。このコードがこのタスクを実行するのに有効かどうか教えていただけますか?
private class KeepFocusWorker extends SwingWorker<Void, Void>
{
@Override
protected Void doInBackground() throws Exception
{
while(true)
{
publish();
}
}
@Override
protected void process(List<Void> chunks)
{
codeBar.requestFocusInWindow();
}
}