オートコンプリート/先行入力をサポートするSWT/JFaceのコンボ(ビューア)を探しています。つまり、ユーザーは数文字を入力でき、ドロップダウンリストに一致するすべての要素が表示されます。
6 に答える
org.eclipse.jface.fieldassist.AutoCompleteField
クラスの様子もご覧いただけます。これはコンボではなく単なるテキスト フィールドですが、コンボのようにオートコンプリート機能を非常に簡単に追加できます。次のような簡単なことを行うことができます。
Text textField = new Text(parentComposite, SWT.BORDER);
new AutoCompleteField(textField, new TextContentAdapter(), new String[]
{"autocomplete option 1", "autocomplete option 2"});
Combo にも ComboViewer にも、このようなものは組み込まれていないと思います。
thehiatus が示唆してorg.eclipse.jface.fieldassist.AutoCompleteField
いるように、おそらくこれを探すのに最適な場所ですが、コンボのサポートがあります。
new AutoCompleteField(combo, new ComboContentAdapter(), new String[]
{"item0", "item1"});
Eclipse の「Content Assist」機能に興味があるかもしれません。Eclipse IDE の Java エディターを使用すると、その動作を確認できます。ソース コードを編集していると、入力内容を補完する語句を含むドロップダウン メニューが表示されることがあります。( Ctrl+Spaceを押すと、ドロップダウン メニューが強制的に表示されることに注意してください。)
これは、独自の SWT/JFace アプリケーションにも実装できます。「Java Developer's Guide to Eclipse」には、Content Assist を実装するサンプル アプリケーションがあります。サンプル アプリケーションは SQL エディタであり、第 26 章「JFace Text を使用したカスタム テキスト エディタの構築」で説明されています。実際には、この章のオンライン概要がここにあります。サンプル SQL エディター プロジェクト はcom.ibm.jdg2e.editor.jfacetext.sql
、ここにあります。
一方、独自の Combo ウィジェットを作成し、入力された入力に基づいて自動入力する場合、これはあまり適切ではない可能性があります。役に立つかもしれないと思っていorg.eclipse.jface.viewers.ComboViewer
ます(私は肯定的ではありませんが)。
チェックアウト: http://sourceforge.net/projects/swtaddons/
私は自分のプロジェクトでそれを使用します(少し調整して)。
これを設定するのは本当に簡単です。
paz117 のコメントのおかげで、この作業を行うためのコードを共有すると思いました:
String[] proposals = new String[controller.model().size()];
for (int i = 0; i < controller.model().size(); i++)
proposals[i] = controller.model().get(i).getAppropriateName();
comboViewer = new ComboViewer(parent, SWT.NONE);
comboViewer.setContentProvider(new ArrayContentProvider());
comboViewer.setLabelProvider(new AppropriateLabelProvider());
comboViewer.setInput(_controller.model());
// additionally, configure the comboViewer arbitrary
new AutoCompleteField(comboViewer.getCombo(), new ComboContentAdapter(), proposals);
唯一の小さな煩わしさは、ComboViewer と AutoCompleteField のモデルを別々に設定する必要があることですが、少なくとも静的ユーティリティ メソッドまたは同様のものを介して自動化できます。