JavaFX を使用する場合、ListView にカスタム オブジェクトを設定するには、String を使用する場合とは若干異なるアプローチが必要です。この記事では、この問題の詳細な解決策を提供します。
JavaFX でカスタム オブジェクトの ObservableArrayList を使用すると、ListView は、オブジェクトを抽出して表示するのではなく、オブジェクト自体を文字列として表示します。
解決策は、ListView で Cell Factory を使用することです。 Cell Factory を使用すると、ListView 内の各セルのプレゼンテーションをカスタマイズできます。
ステップ 1: Cell Factory を作成する
ListCell を拡張する新しいクラスを作成します。この例では、それを WordCell と呼びます。
public class WordCell extends ListCell<Word> { @Override protected void updateItem(Word item, boolean empty) { super.updateItem(item, empty); if (empty || item == null || item.getWord() == null) { setText(null); } else { setText(item.getWord()); } } }
ステップ 2: ListView でセル ファクトリを設定する
WordCell クラスをセル ファクトリとして割り当てます。 ListView.
ListView<Word> listViewOfWords = new ListView<>(wordsList); listViewOfWords.setCellFactory(listViewOfWords.new WordCell());
ここで説明されているアプローチを示すサンプル アプリケーションです。
import javafx.application.Application; import javafx.collections.*; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.stage.Stage; public class ListViewCustomObject extends Application { @Override public void start(Stage stage) { ObservableList<Word> wordsList = FXCollections.observableArrayList(); wordsList.add(new Word("First Word", "Definition of First Word")); wordsList.add(new Word("Second Word", "Definition of Second Word")); wordsList.add(new Word("Third Word", "Definition of Third Word")); ListView<Word> listViewOfWords = new ListView<>(wordsList); listViewOfWords.setCellFactory(listViewOfWords.new WordCell()); stage.setScene(new Scene(listViewOfWords)); stage.show(); } public static class Word { private final String word; private final String definition; public Word(String word, String definition) { this.word = word; this.definition = definition; } public String getWord() { return word; } public String getDefinition() { return definition; } } public static void main(String[] args) { launch(args); } }
次の手順に従って、ListView にデータを設定できます。カスタム オブジェクトを使用して、各セル内に必要なプロパティを表示します。
以上がJavaFX ListViewでカスタムオブジェクトを表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。