相关疑难解决方法(0)

如何使用自定义对象在JavaFX中填充ListView?

我对Java,JavaFX和一般的编程有点新意,我有一个问题正在打破我的大脑.

在大多数关于填充ListView的教程中(更具体地说,使用ObservableArrayList),最简单的方法是从字符串的ObservableList中创建它,如下所示:

ObservableList<String> wordsList = FXCollections.observableArrayList("First word","Second word", "Third word", "Etc."); 
ListView<String> listViewOfStrings = new ListView<>(wordsList);
Run Code Online (Sandbox Code Playgroud)

但我不想使用字符串.我想使用一个名为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);
Run Code Online (Sandbox Code Playgroud)

每个Word对象只有2个属性:wordString(单词的一个字符串)和definition(另一个字符串,即单词的定义).我两个都有吸气剂和二传手.

您可以看到它的位置 - 代码编译和工作,但是当我在我的应用程序中显示它时,它不会显示ListView中每个单词的标题,而是将Word对象本身显示为字符串!

该图显示了我的应用程序及其ListView

我的问题是,具体来说,有一种简单的方法可以重写这个:

ListView<Word> listViewOfWords = new ListView<>(wordsList);
Run Code Online (Sandbox Code Playgroud)

这样一来,它不是直接从wordsList中获取Words,而是访问我的observableArrayList的每个Word中的wordString属性?

为了清楚起见,这不适用于android,并且最终将更改,保存和加载单词列表,因此我不能只创建另一个数组来保存wordStrings.我在网上做了一些研究,似乎有一个名为'Cell Factories'的东西,但对于看起来如此简单的问题似乎不必要的复杂,正如我之前所说,我有点编程方面的新手.

有人可以帮忙吗?这是我第一次来这里,所以如果我没有包含足够的代码或者我做错了,我很抱歉.

java listview javafx

26
推荐指数
1
解决办法
2万
查看次数

JavaFX 2.0选择框问题.如何在更新对象时更新表示对象列表的choiceBox?

我有一个表示列表对象的choiceBox.当代表其中一个对象的名称被另一位代码更改时,选择框的下拉列表中的名称不会更改.例如,如果我有一个由列表Test对象组成的选择框.测试代码如下所示:

class Test {
    String name;

    public Test(String name) {
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return name; 
    }
} 
Run Code Online (Sandbox Code Playgroud)

然后有一个选择框如下:

ChoiceBox<Test> chi = new ChoiceBox<>();
ObservableList<Test> items = FXCollections.observableArrayList();
chi.setItems(items);
items.addAll(new Test("ITEM1"),new Test("ITEM2"),new Test("ITEM3"));
Run Code Online (Sandbox Code Playgroud)

ChoiceBox将显示ITEM1,ITEM2和ITEM3列表

如果我然后通过以下代码更改其中一个项目的名称:

items.get(1).setName("CHANGED");
Run Code Online (Sandbox Code Playgroud)

ChoiceBox仍将显示ITEM1,ITEM2和ITEM3列表.我该如何制作,以便choiceBox更新并显示列表ITEM1,CHANGED和ITEM3?

java object javafx-2

8
推荐指数
1
解决办法
3039
查看次数

标签 统计

java ×2

javafx ×1

javafx-2 ×1

listview ×1

object ×1