我创建了一个类并将其添加到可观察列表中,我还有一个列表视图,我将其项目设置为我的可观察列表。
问题是当我将类中的对象添加到可观察列表时,列表视图会显示它们在内存中的地址,例如package.TestClass@574f5892
,如何使列表视图显示存储在每个对象及其图像中的文本而不是它们的内存地址?
谢谢
我创建了一个类并将其添加到可观察列表中,我还有一个列表视图,我将其项目设置为我的可观察列表。
问题是当我将类中的对象添加到可观察列表时,列表视图会显示它们在内存中的地址,例如package.TestClass@574f5892
,如何使列表视图显示存储在每个对象及其图像中的文本而不是它们的内存地址?
谢谢
快速破解只是在返回要显示的文本时定义一个toString
方法。TestClass
这并不是一个真正可靠的解决方案,因为通常您可能希望该toString()
方法返回与您希望在 GUI 环境中显示的文本不同的内容。
执行此操作的“正确”方法是cellFactory
在列表视图上设置 a 。类似的东西
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);
}
}
});
要包含图像,您可以执行
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);
}
}
});