make list view显示我想要的JavaFX

Yas*_*har 2 listview javafx observablelist

我创建了一个类并将其添加到一个可观察列表中,我还有一个列表视图,我将其项目设置为我的可观察列表.

问题是当我将一个对象从我的类添加到可观察列表时,列表视图在内存中显示它们的地址package.TestClass@574f5892,如何使列表视图显示存储在每个对象中的文本及其图像而不是它们的内存地址?

谢谢

Jam*_*s_D 6

快速入侵就是toStringTestClass返回要显示的文本时定义一个方法.这不是一个强大的解决方案,因为通常您可能希望该toString()方法返回与您希望在GUI环境中显示的文本不同的内容.

"正确"的方法是cellFactory在列表视图上设置一个.有点像

listView.setCellFactory(lv -> new ListCell<TestClass>() {
    @Override
    public void updateItem(TestClass item, boolean empty) {
        super.updateItem(item, empty);
        if (empty) {
            setText(null);
        } else {
            String text = ... ; // get text from item
            setText(text);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

要包含图像,您可以这样做

listView.setCellFactory(lv -> new ListCell<TestClass>() {

    private final ImageView imageView = new ImageView();
    @Override
    public void updateItem(TestClass item, boolean empty) {
        super.updateItem(item, empty);
        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            String text = ... ; // get text from item
            setText(text);
            Image image = ... ; // get image from item
            imageView.setImage(image);
            setGraphic(imageView);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)