0

UserNameを検索して、jComboBoxに値を返そうとしています。コードは次のとおりです。

public void actionPerformed(java.awt.event.ActionEvent e) {
    sr = new Search(((String) jComboBoxReceiver.getSelectedItem()));    
    usrList = sr.searchUser();
    String[] userList = new String[usrList.size()] ;
    for(int i=0;i<usrList.size();i++){
        userList[i]= usrList.get(i).getUserName();
    }
    model = new DefaultComboBoxModel(userList);
    jComboBoxReceiver.setModel(model);
}

別の場所をクリックするか、Enterキーを押すと、検索が実行されますが、最初のアイテムが再度検索されるため、非常に混乱します...次に、キーを押してみました

if(e.getKeyCode()==13){
    sr = new Search(((String) jComboBoxReceiver.getSelectedItem()));    
    usrList = sr.searchUser();
    String[] userList = new String[usrList.size()] ;
    for(int i=0;i<usrList.size();i++){
        userList[i]= usrList.get(i).getUserName();
    }
    model = new DefaultComboBoxModel(userList);
    jComboBoxReceiver.setModel(model);
}

そして、これはまったく反応しません。

4

3 に答える 3

2

ComboBox自体ではなく、エディターでリスナーを設定する必要があります。ここで答えを参照してください:

ユーザーがJavaでEnterキーを押したときの検出

于 2011-02-01T16:10:58.153 に答える
1

うわー、毎回ComboBoxModelを再構築していますか?少し高いですね。毎回モデルを再構築せずにコンボボックスから要素を追加/削除できるようにする、がMutableComboBoxModel実装されていることをご存知ですか?DefaultComboBoxModel

あなたの質問に関して、私は声明を理解していません

ただし、それを行うと、正しく実行されますが、最初のアイテムを再度検索します

JComboBoxが点滅し始め、コンテンツが毎回変更されるということですか?

もしそうなら、おそらくあなたActionListenerがにリンクされているためJComboBoxであり、そのコンテンツは継続的に変化します。

とにかく、私はあなたがのようないくつかのログを追加することをお勧めします

sr = new Search(((String) jComboBoxReceiver.getSelectedItem()));    
DefaultComboBoxModel model = (DefaultComboBoxModel) jComboBoxReceiver.getModel();
model.remvoeAllElements();
usrList = sr.searchUser();
String[] userList = new String[usrList.size()] ;
for(int i=0;i<usrList.size();i++){
    String username = usrList.get(i).getUserName();
    System.out.println(username); // feel free to instead use one loger
    model.addElement(username);
}

さらに、コンボボックスモデルに単純な文字列ではなくListCellRenderer、ユーザー名のみを表示するUserオブジェクトを含める別のアプローチを提案する傾向があります。

于 2011-02-01T15:50:18.850 に答える
1

IMO、ユーザーにとって本当に混乱するのは、ユーザーがオプションの1つを選択するとすぐに、コンボボックスのコンテンツと選択を変更することです。

とにかく、本当にそれを実行したい場合は、コンテンツを変更する前にアクションリスナーを削除(または非アクティブ化)し、次の後に再度追加(または再アクティブ化)する必要があります。

public void actionPerformed(java.awt.event.ActionEvent e) {
    sr = new Search(((String) jComboBoxReceiver.getSelectedItem()));    
    usrList = sr.searchUser();
    String[] userList = new String[usrList.size()] ;
    for(int i=0;i<usrList.size();i++){
        userList[i]= usrList.get(i).getUserName();
    }
    model = new DefaultComboBoxModel(userList);
    jComboBoxReceiver.removeActionListener(this);
    jComboBoxReceiver.setModel(model);
    jComboBoxReceiver.addActionListener(this);
}
于 2011-02-01T15:45:48.157 に答える