1

複数列の JComboBox を作成しようとしています。私はかなり周りを見回しましたが、それは非常に難しいことのようです。多くの人でない限り、テーブル (行を選択する場所) には興味がありません。それらを 1 つの列だけに表示するのではなく、一覧表示します。

これまでの私の最善の策は、これを行うことでした:

JComboBox dropdown = new JComboBox(validValues);
CellRendererPane crp = (CellRendererPane) dropdown.getComponent(1);
crp.setLayout(new GridLayout(4, 4)); // for 16 items...

しかし、うまくいきません。それはまだセルを単一の列に配置します。LayoutManager を設定してから項目を追加してみましたが、結果に影響はありません。

誰でもこれを達成する方法についての手がかりを持っていますか?

これまでのところ、私は ListCellRenderer をいじっても無駄だと思ってきました。セルを描画する方法 (一度に 1 つずつ) を指定するだけで、すべてのセルを配置する方法 (互いの相対的な位置) は指定しません。

どんな助けでも大歓迎です!

ありがとう!

MJ

4

1 に答える 1

2

コンボボックスは、JList を使用して項目をポップアップに表示します。デフォルトでは、各項目は 1 行に表示されます。このリストには、次を使用して直接アクセスできます。

Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup popup  = (BasicComboPopup)child;
JList list = popup.getList();

リストにアクセスできるようになったので、次を使用してデフォルトの表示を変更できるはずです。

list.setLayoutOrientation(JList.HORIZONTAL_WRAP);

うまくいけば、ドロップダウンの幅に達するとアイテムが折り返されます。ドロップダウンの幅はコンボ ボックスの幅によって制御されるため、以下を使用してコンボ ボックスの幅を調整する必要がある場合があります。

list.setPrototypeDisplayValue(....);

編集:

実際、setPrototypeDisplayValue(...) の使用は忘れてください。ポップアップのサイズを手動で設定する必要があると思います。

デフォルトでは、ポップアップの幅は常にコンボ ボックスの幅と同じです。この動作は、PopupMenuListener を使用してポップアップのサイズをオーバーライドすることで変更できます。開始するには、Combo Box Popupエントリを参照してください。ポップアップの希望の幅をハードコードするだけなので、コードははるかに簡単になります。

于 2011-03-07T21:56:33.320 に答える