Netbeansで開発されたアプリケーションがあり、パネルが表示されたときに特定のjTextField
にフォーカスを設定したい。私は多くの投稿を読み、さまざまな方法を試しましたが、機能していません。主な問題の1つは、必要なコードを配置する場所です。私の場合、this.txtMessage.requestFocusInWindow();
Window Listenerを使用することを示す記事がいくつかありますが、netbeansがGUIを生成しているため、jPANELなどを作成するコードを編集できないため、インターフェイスの実装方法がわかりません。これはそんなに難しいことだと信じています。
テストのように、パネルのボタンにrequestFocusInWindow();
を追加し、目的の入力にフォーカスを設定しました。
パネルが表示されたときに、パネル内のテキストボックスにフォーカスを設定する必要がある同様のシナリオがありました。パネルはアプリケーションの起動時にロードされたため、コンストラクターでフォーカスを設定できませんでした。パネルがロードされていないか、ショーにフォーカスが与えられていないため、これはフォーカス要求を発するイベントがなかったことを意味します。
これを解決するために、テキスト領域でrequestFocusInWindow()
を呼び出したパネルのメソッドを呼び出すグローバルメソッドをメインに追加しました。パネルを表示したボタンにグローバルメソッドの呼び出しを配置しました。after表示する呼び出し。これは、パネルが表示され、パネルを表示した後にテキスト領域がフォーカスを割り当てることを意味していました。それが理にかなって助けてくれることを願っています!
また、デザインビューでオブジェクトを右クリックしてカスタマイズコードを選択すると、自動生成されたコードのほとんどを編集できますが、パネルを編集できるとは思いません。
ここに何かが欠けているかどうかはわかりませんが、パネルにリスナーを追加できない理由はありません。
Netbeansでは、エディターウィンドウの左上にある[ソース]ボタンを押すだけで、ほとんどのコードを編集できます。実際のレイアウトコードはほとんどロックされていますが、必要に応じてカスタマイズすることもできます。
私が知る限り、txtMessage.requestFocusInWindow()
は、ウィンドウが最初に表示されるときのデフォルトのフォーカスを設定することになっています。ウィンドウが既に表示された後にフォーカスを要求する場合は、txtMessage.requestFocus()
を使用する必要があります
テストのために、コンストラクタにリスナーを追加するだけです:
addWindowListener(new WindowAdapter(){
public void windowOpened( WindowEvent e){
txtMessage.requestFocus();
}
});
JFrameまたはJDialogでは、setVisible()メソッドをいつでも上書きできます。これはうまく機能します。私はJPanelで試したことはありませんが、代わりになる可能性があります。
@Override
public void setVisible(boolean value) {
super.setVisible(value);
control.requestFocusInWindow();
}
私はこれを永遠にいじりました。
textField = new JTextField() {
public void addNotify() {
super.addNotify();
requestFocus();
}
};
TextFieldでAncesterAddedイベントを設定し、ウィンドウで要求フォーカスを設定することでそれを行いました。
私にとってそれを機能させる最も簡単な方法は、component.requestFocus();
行の後にsetVisible(true);
行をフレームまたはパネルコンストラクターの下部に配置することです。
これはおそらく、すべてのコンポーネントが作成された後、フォーカスを要求することと関係があります。フォーカス要求を要求した後、新しいコンポーネントを作成すると、コンポーネントがフォーカスを失い、新しく作成されたコンポーネントにフォーカスが移動するためです。少なくとも、それは私が推測することです。
[〜#〜] gui [〜#〜]をNetbeansで作成すると、自己記述コードを挿入することもできます。要素(ボタン、パネル、ウィンドウなど)を選択し、[プロパティ]ダイアログの[コード]タブを使用するだけです。
そこで、Pre-およびPost-コードを挿入できます。作成プロセス。
ウィンドウの「After-All-Set-Code」フィールドはコードに適した場所であるか、イベントにバインドできます(「Properties」-dialog->「Events」)「componentShownテキストフィールド/パネルの "。
私のウィンドウはJPopupMenu
であるため、上記のいずれも機能しませんでした。
効果があったのはこれです:
addAncestorListener(new AncestorListener() {
@Override
public void ancestorAdded(AncestorEvent ae) {
myEdit.requestFocus();
}
// ... other ancestor listener methods
}