3

編集可能なセルを持つ JTable があります。各セルには、入力されたテキストをすばやく検証するための CarretListener が含まれています。ただし、1 つの特別なセルでは、リストからエントリを選択できる必要があります。テキストを入力すると、リストが生成されます。エントリのリスト内の Programm serach は等しいので、入力されたテキストは、Google のように提案されます。これまでのところ、すべて良いです。しかし、リストを正しい位置に表示する方法がわかりません。GlassPane を試しましたが、うまくいきません。セルの座標を取得して JList を表示するのに問題があります。行全体を変更したくないため、行の高さを設定して、リスト全体も機能しないように表示します。たぶん、TableCellRenderer などにトリックがあるのでしょうか...? 完全なソースコードなどは必要ありませんが、正しい方向へのプッシュが必要です。

これがプログラムの写真で、次のようになります : http://img198.imageshack.us/img198/3227/sosollsseinh.jpg

マルク

4

2 に答える 2

1

リストに特定の動作を適用しない限り、このテーブルのエディターとしてコンボボックスを追加することで、別の方法を試すことができます。その例については、DefaultCellEditorを確認してください。

呼び出されたときにコンボボックスの内容を正しい値で変更すると、必要に応じて一致すると思います。このためには、おそらくTableCellEditorを実装して、独自の CellEditor を作成する必要があります。これにより、(メソッド getTableCellEditorComponent() で) 呼び出されるタイミングに応じて値を変更できるようになります。


編集:コメントで話しているKeyListenerの問題については、実際のテキストが JTextField で更新される前に Key イベントが送信されると考える必要があります。したがって、 への呼び出しがgetText()新しい文字なしで値を返すのは正常です。

ただし、これはKeyEventであるため、入力された文字にevt.getKeyChar()直接 orevt.getKeyCode()でアクセスして、これが実際に入力された文字かどうかを確認できます。これらのメソッドを使用すると、必要な完全な「テキスト」を知ることができます。


また、コメントのビデオから、ユーザーが入力を開始した内容に応じて実際に適応し、既に入力された内容に応じて選択を制限するリストが必要なようです。

追加のライブラリを使用できる (および許可されている) 場合は、SwingX コンポーネント( http://swinglabs.org/ ) を確認することをお勧めします。このライブラリは、通常、swing インターフェースで使用するための多くの有用なコンポーネントを提案します。彼らのサイトにはデモがありますが、現時点では利用できないようですが、後日になる可能性があります。

彼らのパッケージ「autocomplete」には、「AutoCompleteDecorator」という名前のクラスと、コンボボックスエディターを改善できるその他の便利なクラスが含まれているため、ユーザー入力自体を完成させ、スクロールしてリスト内の適切な位置(リストをフィルタリングすることもできると思いますが、あなたが望む正確な動作ですが、完全にはわかりません)。これを使用できれば、キャレット イベントを自分で処理したり、リストを更新したりする手間が実際に軽減されます。

.Jar と javadocは、彼らのサイトからダウンロードできます。オートコンプリート パッケージの別のサイトからの javadoc のコピーを次に示します。その間に変更された可能性がありますが、アイデアが得られます。

于 2009-11-10T10:02:59.363 に答える
0

JComboboxa の代わりに aとして使えませんJListか? それはもっと簡単です。DefaultCellEditorすぐに使えるようJComboboxに、

TableColumn X = table.getColumnModel().getColumn(Y);
JComboBox cb = new JComboBox(VECTOR_OF_ITEMS);
X.setCellEditor(new DefaultCellEditor(cb));
于 2009-11-10T11:03:54.553 に答える