2

ユーザーが入力すると、一致をチェックして提案を表示する提案ボックスとして JcomboBox を使用します。JComboBox の作成方法は次のとおりです。

    Vector<String> popUpVector = new Vector<String>();
    JComboBox jcb = new JComboBox(popUpVector);

キーリスナーがイベントをキャッチするたびに、これを行います

    popUpVector.clear();
    jcb.hidhPopUp();
    for(String s : database){
     popUpVector.add(s);
    }
    jcb.showPopUp();

ドロップダウンから項目を選択しない限り機能します。ただし、ドロップダウンからアイテムを選択すると、ドロップダウンは後で空白で表示されます。popUpVector を確認しますが、空ではありません。選択と関係があると思うので、actionListener からフックを外しましたが、そうではありませんでした。役立ちます。

誰でもこれで私を助けることができます、どうもありがとう!

4

2 に答える 2

3

Vectorコンストラクターに aを渡すJComboBoxと、ソースによると、そのベクターを実際に使用して、基礎となるモデルをバックアップします。

public JComboBox(Vector<?> items) {
    super();
    setModel(new DefaultComboBoxModel(items));
    init();
}

public DefaultComboBoxModel(Vector<?> v) {
    objects = v;

    if ( getSize() > 0 ) {
        selectedObject = getElementAt( 0 );
    }
}

ベクトルの内容を変更すると、モデルの内容も変更されることを意味します。ただし、モデルに変更を加えるには、変更についてビューに通知するために正しいイベントを発生させる必要があります。vector はイベントを発生させないため、DefaultComboBoxModelは vector の内容が変更されたことを知る方法がありません。したがって、DefaultComboBoxModelコンストラクターは、ベクターから要素を取得し、ベクターを直接格納する iso を格納するだけで済みます。

問題を解決するには、値を に格納する代わりに、をVector使用しDefaultComboBoxModel、そのモデルで利用可能な API を使用して変更を行います。API を使用すると、モデルが正しい変更を確実に実行します。たとえば、addElementメソッドの実装を参照してください。

public void addElement(Object anObject) {
    objects.addElement(anObject);
    fireIntervalAdded(this,objects.size()-1, objects.size()-1);
    if ( objects.size() == 1 && selectedObject == null && anObject != null ) {
        setSelectedItem( anObject );
    }
}
于 2012-09-26T07:39:57.923 に答える
1

あなたの問題は

popUpVector.clear();

をクリアする正しい方法Vector

popUpVector = new Vector<String>();

add// removeComboBoxModelmodifyの方JComboBoxes Itemsが良いかもしれません

于 2012-09-26T07:07:50.203 に答える