【发布时间】:2016-08-08 00:37:13
【问题描述】:
我对 Java、JavaFX 和一般编程有点陌生,但我遇到了一个让我头疼的问题。
在我查阅的大多数关于填充 ListView(更具体地说,使用 ObservableArrayList)的教程中,最简单的方法是从字符串的 ObservableList 中创建它,如下所示:
ObservableList<String> wordsList = FXCollections.observableArrayList("First word","Second word", "Third word", "Etc.");
ListView<String> listViewOfStrings = new ListView<>(wordsList);
但我不想使用字符串。我想使用一个名为 Words 的自定义对象:
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);
每个 Word 对象只有 2 个属性:wordString(单词的字符串)和 definition(另一个字符串,即单词的定义)。我对两者都有 getter 和 setter。
你可以看到这是怎么回事 - 代码编译并工作,但是当我在我的应用程序中显示它时,它不是在 ListView 中显示每个单词的标题,而是将 Word 对象本身显示为一个字符串!
我的问题是,具体来说,有没有一种简单的方法来重写这个:
ListView<Word> listViewOfWords = new ListView<>(wordsList);
以这样一种方式,而不是直接从 wordList 中获取 Words,它访问我的 observableArrayList 的每个 Word 中的 wordString 属性?
需要明确的是,这不适用于 android,单词列表最终会被更改、保存和加载,所以我不能只创建另一个数组来保存 wordStrings。我在网上做了一些研究,似乎有一个叫做“细胞工厂”的东西,但对于看起来如此简单的问题来说,它似乎不必要地复杂,正如我之前所说,我有点编程方面的新手。
有人可以帮忙吗?这是我第一次来这里,如果我没有包含足够的代码或者我做错了什么,我很抱歉。
【问题讨论】: