0

私はマルチカラム jcombobox をかなり使用していましたが、まだ見つけていないか、自分で作成することができませんでした。Web で見つかったいくつかのアプローチを試しましたが、うまくいきませんでした。その後、それらの(古い)が現在のJavaバージョンでは機能しないことをどこかで読みました。

これまでのところ、コンボボックスにドロップダウンリストとしてテーブルがあり、マウスで項目を選択できるように独自に作成しましたが、ユーザーが編集ボックスに入力を開始すると、ドロップダウンリストが開き、カーソルが表示されることが目標ですユーザーが書いたテキストに基づいて動きます。eg からのイベントがJTextField editor = (JTextField) comboBox.getEditor().getEditorComponent()機能しないようです。

ユーザーが入力を開始したときにイベントを取得する方法を教えてください。

4

3 に答える 3

2

あなたはオートコンプリート機能を探しています(質問を理解しているように):SwingXでサポートされており、非常に使いやすいです。

要約すると、カスタム ObjectToStringConverter を実装し、そのコンバーターを使用して autoCompleteDecorator を使用してコンボボックスを構成します。何かのようなもの:

/**
 *  A converter which expects an item of an array type and returns
 *  a string representation of its first value. 
 */
public static class ArrayToStringConverter extends ObjectToStringConverter {

    @Override
    public String getPreferredStringForItem(Object item) {
        if (!(item instanceof Object[])) return DEFAULT_IMPLEMENTATION.getPreferredStringForItem(item);
        Object[] array = (Object[]) item;
        return DEFAULT_IMPLEMENTATION.getPreferredStringForItem(array[0]);
    }

}

// usage
// assuming an model with items being arrays 
JComboBox combo = new JComboBox(arrayModel);
// the renderer supporting multiple columns, f.i. a table
combo.setCellRenderer(new TabularListRenderer());
AutoCompleteDecorator.decorate(combo, new ArrayToStringConverter());

完全な動作例 (レンダラーを含み、ポップアップの幅をコンボ自体よりも大きくする方法を示す) は、インキュベーター セクションの TableAsListRenderer です。

ところで: オートコンプリート機能はスタンドアロン モジュールであり、maven を介してアクセスするか、java.netの maven 担当者から手動でダウンロードできます。swingx-autocomplete-1.6.4.jar (興味がある場合は、対応するドキュメント/ソース) が必要です。

于 2012-10-15T09:51:27.033 に答える
1

誰かが2列のコンボボックスを作成したり、アイデアを持ったりしたことがありますか。ユーザーが入力を開始したときにイベントを取得するにはどうすればよいですか。

に置くことができJTableますが、デフォルトでは、直接ではなく、行JComboBox全体から値のみを選択できます(追加の回避策が必要ですが、まだ試されていません)JTablesJTables Cell

于 2012-05-28T12:41:36.050 に答える
1

私はまだこの答えを探しています

これまで試してみました..Jpopupを作成し、そこにJtableを配置します..次に、jcomboboxではなくjlabelを使用します。ユーザーがjlabelをクリックすると、ポップアップ(Jtable)がそのjlabelの場所に表示されます..ユーザーがjtableの値を選択すると、ポップアップが破棄され、jlabel が結果を表示します。

あなたの場合、jlabelではなくjtextfieldを使用できます

編集:heres関連の質問 は、ここにリンクの説明を入力してください

于 2012-10-15T06:21:39.887 に答える