web-dev-qa-db-ja.com

監視可能なリスト/コレクションの作成

JavaFX 8でChoiceBoxを必要とするCollectionを作成しようとしています。 Collectionの作成方法がわかりませんが...試した場合:

 ObservableList<String> list = new ObservableList<String>();

抽象的であるため、ObservableListをインスタンス化できないというエラーが表示されます。分かりやすい。 ObservableListのドキュメントを見ると、SortedList implements ObservableList、しかし私はできません:

 ObservableList<String> list = new SortedList<String>();

該当するコンストラクターがないため。どうやらObservableListに渡すSortedListが必要なようですが、ObservableListを作成できないので奇妙です。

constructor SortedList.SortedList(ObservableList<? extends String>,Comparator<? super String>) is not applicable
  (actual and formal argument lists differ in length)
constructor SortedList.SortedList(ObservableList<? extends String>) is not applicable
  (actual and formal argument lists differ in length)

私はそれを解読する方法がわかりません。私が試してみると

 ObservableList<String> list = new SortedList<SortedList<String>>();
 //or
 ObservableList<String> list = new SortedList<ObservableList<String>>();

絶望から、さらに複雑なエラーが発生します。

    SortedList<String> list = new SortedList<String>();

動作しません。どういうわけかこれは動作します(ただし、明らかに安全でない操作を使用します):

ChoiceBox box = new ChoiceBox(FXCollections.observableArrayList("Asparagus", "Beans", "Broccoli", "Cabbage" , "Carrot", "Celery", "Cucumber", "Leek", "Mushroom" , "Pepper", "Radish", "Shallot", "Spinach", "Swede" , "Turnip"));

だから私は試しました:

 ObservableList<string> list = new FXCollections.observableArrayList("Asparagus", "Beans", "Broccoli", "Cabbage" , "Carrot", "Celery", "Cucumber", "Leek", "Mushroom" , "Pepper", "Radish", "Shallot", "Spinach", "Swede" , "Turnip");

しかし、そこには運もありません。私は非常に混乱しており、これを理解しようとする無限のループで何度も同じ考えをしています。私が見つけたドキュメントには、役に立たない例や例が示されていません。公式文書も役に立たない:

たとえば、コレクションcがあり、リスト、セット、または別の種類のコレクションであるとします。このイディオムは、新しいArrayList(Listインターフェイスの実装)を作成します。最初はcのすべての要素が含まれています。

 List<String> list = new ArrayList<String>(c);

ArrayListの実装であるListを作成するには、Listが必要です。最初にドキュメントに行った理由は、彼らが私が持っていると仮定しているものを作る方法を学ぶためでした。道に迷いました。助けて?

27
LilSweden

FXCollections のファクトリメソッドを使用します。

ObservableList<String> list = FXCollections.observableArrayList();

選択ボックスコンストラクターでの安全でない操作は、選択ボックスのタイプを指定していないためです。

ChoiceBox<String> box = new ChoiceBox<>(FXCollections.observableArrayList("Asparagus", "Beans", "Broccoli", "Cabbage" , "Carrot", "Celery", "Cucumber", "Leek", "Mushroom" , "Pepper", "Radish", "Shallot", "Spinach", "Swede" , "Turnip"));

SortedListからのエラーは、引数を取らないコンストラクタがないためです。 (繰り返しますが、 javadocs を参照してください。)2つのコンストラクターがあります。最も単純なコンストラクターは、ObservableList(ソート済みリストがソート済みビューを提供するリスト)への参照を取ります。そのため、次のようなものが必要になります

SortedList<String> sortedList = new SortedList<>(list);

または

SortedList<String> sortedList = new SortedList<>(FXCollections.observableArrayList());
46
James_D