0

jListから入力を取得する必要があるjTextfieldがあります。FocusGained プロパティでは、jList は jTextfield のすぐ下に表示され、jList は FocusLost プロパティでは非表示になります。いくつかのコーディングを行いましたが、問題が発生しています。FocusGained プロパティで、jList が表示されますが、それをクリックすると、前のテキストフィールドの下にある別の jTextfield の裏側に移動します。以下は私のコードです:

private void txtAccountFocusGained(java.awt.event.FocusEvent evt) {                                       
    jScrollPane3.setLocation(txtAccount.getX(), txtAccount.getY()+txtAccount.getHeight());
    jScrollPane3.setVisible(true);    //scrollpane associated with list
    listAccount.setVisible(true);   //listAccount is jList
}

private void listAccountMouseClicked(java.awt.event.MouseEvent evt) {                                         
    txtAccount.setText((String)listAccount.getSelectedValue());
    jScrollPane3.setVisible(false);  //scrollpane associated with list
    txtSalesLedger.requestFocus(); //it is next field
}
4

1 に答える 1

1

JComboBoxの代わりに a を使用しJTextFieldます。を呼び出すJComboBox.setEditable( true )JComboBox、エディタが表示されJTextFieldます。まさにあなたが望むものであり、ユーザーは任意のテキストを入力できますが、矢印アイコンでリスト ボックスを開くこともできます。さらに、 を呼び出してリストを自動的に表示することもできますJComboBox.showPopup()。JComboBox のエディター テキスト フィールドにフォーカス リスナーを追加すると、ユーザーがテキスト フィールドをクリックしたときにそこからポップアップを表示することもできます。ポップアップ リストは、矢印アイコンで閉じることができます。

サンプルコードは次のとおりです。

final JComboBox comboBox = new JComboBox( 
    new Object[] { "", "Item #1", "Another item", "Something else" } );

comboBox.setEditable( true );

comboBox.getEditor().getEditorComponent().addFocusListener( new FocusAdapter() {
    @Override
    public void focusGained( final FocusEvent event ) {
        comboBox.showPopup();
    }
} );

注:コンボ ボックスの最初の項目は空の文字列です。コンボボックスのエディターテキストフィールドに最初は値が表示されないように追加しました。もちろん、初期値が必要な場合は削除できます。

于 2012-10-01T13:02:03.673 に答える