web-dev-qa-db-ja.com

テキストフィールドにフォーカスを設定する

Netbeansで開発されたアプリケーションがあり、パネルが表示されたときに特定のjTextFieldにフォーカスを設定したい。私は多くの投稿を読み、さまざまな方法を試しましたが、機能していません。主な問題の1つは、必要なコードを配置する場所です。私の場合、this.txtMessage.requestFocusInWindow();

Window Listenerを使用することを示す記事がいくつかありますが、netbeansがGUIを生成しているため、jPANELなどを作成するコードを編集できないため、インターフェイスの実装方法がわかりません。これはそんなに難しいことだと信じています。

テストのように、パネルのボタンにrequestFocusInWindow();を追加し、目的の入力にフォーカスを設定しました。

14
Lee

パネルが表示されたときに、パネル内のテキストボックスにフォーカスを設定する必要がある同様のシナリオがありました。パネルはアプリケーションの起動時にロードされたため、コンストラクターでフォーカスを設定できませんでした。パネルがロードされていないか、ショーにフォーカスが与えられていないため、これはフォーカス要求を発するイベントがなかったことを意味します。

これを解決するために、テキスト領域でrequestFocusInWindow()を呼び出したパネルのメソッドを呼び出すグローバルメソッドをメインに追加しました。パネルを表示したボタンにグローバルメソッドの呼び出しを配置し​​ました。after表示する呼び出し。これは、パネルが表示され、パネルを表示した後にテキスト領域がフォーカスを割り当てることを意味していました。それが理にかなって助けてくれることを願っています!

また、デザインビューでオブジェクトを右クリックしてカスタマイズコードを選択すると、自動生成されたコードのほとんどを編集できますが、パネルを編集できるとは思いません。

17
chvck

ここに何かが欠けているかどうかはわかりませんが、パネルにリスナーを追加できない理由はありません。

Netbeansでは、エディターウィンドウの左上にある[ソース]ボタンを押すだけで、ほとんどのコードを編集できます。実際のレイアウトコードはほとんどロックされていますが、必要に応じてカスタマイズすることもできます。

私が知る限り、txtMessage.requestFocusInWindow()は、ウィンドウが最初に表示されるときのデフォルトのフォーカスを設定することになっています。ウィンドウが既に表示された後にフォーカスを要求する場合は、txtMessage.requestFocus()を使用する必要があります

テストのために、コンストラクタにリスナーを追加するだけです:

addWindowListener(new WindowAdapter(){ 
  public void windowOpened( WindowEvent e){ 
    txtMessage.requestFocus();
  } 
}); 
11
Riaan Cornelius

JFrameまたはJDialogでは、setVisible()メソッドをいつでも上書きできます。これはうまく機能します。私はJPanelで試したことはありませんが、代わりになる可能性があります。

@Override
public void setVisible(boolean value) {
    super.setVisible(value);
    control.requestFocusInWindow();
}
5
Igor Rodriguez

私はこれを永遠にいじりました。

    textField = new JTextField() {

        public void addNotify() {
            super.addNotify();
            requestFocus();
        }
    };

TextFieldでAncesterAddedイベントを設定し、ウィンドウで要求フォーカスを設定することでそれを行いました。

2
Ray Saunders

私にとってそれを機能させる最も簡単な方法は、component.requestFocus();行の後にsetVisible(true);行をフレームまたはパネルコンストラクターの下部に配置することです。

これはおそらく、すべてのコンポーネントが作成された後、フォーカスを要求することと関係があります。フォーカス要求を要求した後、新しいコンポーネントを作成すると、コンポーネントがフォーカスを失い、新しく作成されたコンポーネントにフォーカスが移動するためです。少なくとも、それは私が推測することです。

1
SuperRetro

[〜#〜] gui [〜#〜]Netbeansで作成すると、自己記述コードを挿入することもできます。要素(ボタン、パネル、ウィンドウなど)を選択し、[プロパティ]ダイアログの[コード]タブを使用するだけです。

そこで、Pre-およびPost-コードを挿入できます。作成プロセス。

ウィンドウの「After-All-Set-Code」フィールドはコードに適した場所であるか、イベントにバインドできます(「Properties」-dialog->「Events」)「componentShownテキストフィールド/パネルの "。

1

私のウィンドウはJPopupMenuであるため、上記のいずれも機能しませんでした。

効果があったのはこれです:

addAncestorListener(new AncestorListener() {
    @Override
    public void ancestorAdded(AncestorEvent ae) {
        myEdit.requestFocus();
    }

    // ... other ancestor listener methods
}
1
wakjah