JavaのSwingを使用して1つのフォームを作成しました。キーを押すたびにフォーカスを設定する必要があるテキストフィールドを1つ使用しました。Javaで特定のコンポーネントにフォーカスを設定する方法=?
Component.requestFocus()
は必要なものを提供しますか?
これはうまくいくでしょう..
SwingUtilities.invokeLater( new Runnable() {
public void run() {
Component.requestFocus();
}
} );
APIを検索したので、APIを読むだけです。
APIドキュメントによると:
「このメソッドのフォーカス動作はプラットフォームに依存しているため、開発者は可能な限りrequestFocusInWindowを使用することを強くお勧めします。」
JOptionPaneでは、何らかの理由で上記のすべてが失敗することに注意してください。多くの試行錯誤の後(とにかく上記の5分以上)、ここで最終的に機能しました:
final JTextField usernameField = new JTextField();
// ...
usernameField.addAncestorListener(new RequestFocusListener());
JOptionPane.showOptionDialog(this, panel, "Credentials", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null);
public class RequestFocusListener implements AncestorListener {
@Override
public void ancestorAdded(final AncestorEvent e) {
final AncestorListener al = this;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JComponent component = e.getComponent();
component.requestFocusInWindow();
component.removeAncestorListener(al);
}
});
}
@Override
public void ancestorMoved(final AncestorEvent e) {
}
@Override
public void ancestorRemoved(final AncestorEvent e) {
}
}
JComponent.grabFocus();
も使用できます。同じです