使列表视图显示我想要的 JavaFX
make list view show what I want JavaFX
我创建了一个 class 并将其添加到一个可观察列表中,我还有一个列表视图,我将其项目设置到我的可观察列表中。
问题是当我将 class 中的对象添加到可观察列表时,列表视图显示它们在内存中的地址,如 package.TestClass@574f5892
,如何使列表视图显示存储在中的文本每个对象及其图像而不是它们的内存地址?
谢谢
快速破解只是在 TestClass
return 要显示的文本中定义 toString
方法。这并不是一个可靠的解决方案,因为通常您可能希望 toString()
方法 return 不同于您希望在 GUI 环境中显示的文本。
"proper" 方法是在列表视图上设置一个 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);
}
}
});
要包含图像,您可以这样做
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);
}
}
});
我创建了一个 class 并将其添加到一个可观察列表中,我还有一个列表视图,我将其项目设置到我的可观察列表中。
问题是当我将 class 中的对象添加到可观察列表时,列表视图显示它们在内存中的地址,如 package.TestClass@574f5892
,如何使列表视图显示存储在中的文本每个对象及其图像而不是它们的内存地址?
谢谢
快速破解只是在 TestClass
return 要显示的文本中定义 toString
方法。这并不是一个可靠的解决方案,因为通常您可能希望 toString()
方法 return 不同于您希望在 GUI 环境中显示的文本。
"proper" 方法是在列表视图上设置一个 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);
}
}
});
要包含图像,您可以这样做
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);
}
}
});