我對Java,JavaFX和一般編程有點新鮮感,而且我遇到了一個打破我的大腦的問題。如何使用自定義對象在JavaFX中填充ListView?
在大多數教程我已經看過了關於填充一個ListView(使用ObservableArrayList,更具體)做最簡單的方法是從字符串的ObservableList使得它,就像這樣:
ObservableList<String> wordsList = FXCollections.observableArrayList("First word","Second word", "Third word", "Etc.");
ListView<String> listViewOfStrings = new ListView<>(wordsList);
但我不想使用字符串。我想用我製作的一個叫做字的自定義對象:
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);
每個字的對象只有2個屬性:wordString(這個詞的字符串),並定義(另一個字符串,它是這個詞的定義)。我有兩個getter和setter。
你可以看到這是怎麼回事 - 代碼編譯和工作,但是當我在應用程序中顯示它而不是在ListView中顯示每個單詞的標題時,它將Word對象本身顯示爲字符串!
Image showing my application and its ListView
我的問題在這裏,具體而言,有一個簡單的方法來改寫這個:
ListView<Word> listViewOfWords = new ListView<>(wordsList);
在這樣一種方式,而不是直接從wordsList的詞語,它訪問wordString屬性在我的observableArrayList的每個單詞中?
只是要清楚,這不是爲android,並且單詞列表將被最終更改,保存和加載,所以我不能只是讓另一個數組來保存wordStrings。我在網上做了一些研究,似乎有一個叫做「細胞工廠」的東西,但似乎是一個非常簡單的問題,似乎並不複雜,正如我之前所說的,我有點當談到編程時,這是一個新手。
誰能幫助?這是我第一次來這裏,所以我很抱歉,如果我沒有包含足夠的代碼或者我做錯了什麼。
非常感謝您的詳細解答!現在我將嘗試覆蓋toString()方法,但是我將更多地閱讀Cell Factories以更好地理解它們,然後修改應用程序以根據您的建議使用它們。我只會用該編輯按鈕修改每個單詞的「定義」,而列表視圖只跟蹤「單詞」屬性,因此它不需要跟蹤對「定義」的更改。 –