ダイアログにボタンがあります。そのダイログで Enter キーを押した後、そのボタンに割り当てられたアクションが 1 つずつ呼び出されます。
public void buttonAction1() { }
....
public void buttonAction2() { }
私のダイアログには、フォーカス喪失イベントがリッスンされるテキスト フィールドも 1 つあります。最初にフォーカスがそのテキストフィールド内にあるときはいつでも、タブをクリックするか、マウスを使用してボタンをクリックすると、フォーカス喪失イベントが呼び出され、ポップアップが開きます。このポップアップは、テキスト フィールド内の値を設定するのに役立ちます。この値は、ボタンを押したときに呼び出されるアクションによって使用されます。
public void focusLostAction() { }
問題は、フォーカスがテキスト フィールド内にあり、Enter キーを押したときに、フォーカス ロスト イベントが呼び出されないことです。そのため、ポップアップが開かれず、そのテキスト フィールド内に適切な値が設定されていません。しかし、キーイベントを入力すると、その特定のボタンのアクションが呼び出され、このアクションはテキストフィールド内で適切な値を見つけることができません.
Enterキーイベントで呼び出されるアクションメソッド内で、次を使用して手動でボタンにフォーカスを設定しようとしました:
public void buttonAction1() {
button.requestFocusInWindow();
}
public void buttonAction2() {
// do the remaining task
}
また、button.requestFocus; を使用してみました。
そのボタンに手動でフォーカスを設定すると、テキストフィールドからルーズフォーカスが呼び出され、フォーカス喪失イベントが呼び出される可能性があると予想していました (これは別のスイングワーカースレッドで実装されているため)。しかし、それは機能していません。以前にこの問題に直面したことがあり、その解決策があれば教えてください。ありがとう。