如何在JavaFX中动态更改listview中项目的背景
我正在编写一个程序,它将一组项放置在listview中。 然后检查是否在数据库中找到了这些项。如果在数据库中找不到该项,我想在listview中更改该项的背景。 我正在使用JavaFX来实现这个程序如何在JavaFX中动态更改listview中项目的背景,java,listview,javafx,colors,Java,Listview,Javafx,Colors,我正在编写一个程序,它将一组项放置在listview中。 然后检查是否在数据库中找到了这些项。如果在数据库中找不到该项,我想在listview中更改该项的背景。 我正在使用JavaFX来实现这个程序 如何执行此操作?您可以为ListView使用自定义单元格工厂,该工厂检查条件并将适当的css样式类应用于每个项/单元格 下面的代码显示了如何对具有String类型项的Listview执行此操作 listView.setCellFactory(new Callback<ListView
如何执行此操作?您可以为ListView使用自定义单元格工厂,该工厂检查条件并将适当的css样式类应用于每个项/单元格 下面的代码显示了如何对具有String类型项的Listview执行此操作
listView.setCellFactory(new Callback<ListView<String>, ListCell<String>>(){
@Override
public ListCell<String> call(ListView<String> p) {
ListCell<String> cell = new ListCell<String>(){
@Override
protected void updateItem(String t, boolean bln) {
super.updateItem(t, bln);
if (t != null ) {
setText( t);
if (item_is_not_available){
if (!getStyleClass().contains("mystyleclass") {
getStyleClass().add("mystyleclass");
}
} else {
getStyleClass().remove("mystyleclass");
}
} else {
setText("");
}
}
};
return cell;
}
});
您可以为ListView使用自定义单元格工厂来检查条件,并将适当的css样式类应用于每个项/单元格 下面的代码显示了如何对具有String类型项的Listview执行此操作
listView.setCellFactory(new Callback<ListView<String>, ListCell<String>>(){
@Override
public ListCell<String> call(ListView<String> p) {
ListCell<String> cell = new ListCell<String>(){
@Override
protected void updateItem(String t, boolean bln) {
super.updateItem(t, bln);
if (t != null ) {
setText( t);
if (item_is_not_available){
if (!getStyleClass().contains("mystyleclass") {
getStyleClass().add("mystyleclass");
}
} else {
getStyleClass().remove("mystyleclass");
}
} else {
setText("");
}
}
};
return cell;
}
});
请显示一些代码-理想情况下是a,其中包括列表和单元格工厂(如果有)中项目的类定义。请粘贴您正在描述的代码,并告诉我们您迄今为止尝试了什么。请显示一些代码-理想情况下是a,其中包括列表和单元格工厂(如果有)中项目的类定义。请,粘贴您正在描述的代码,并告诉我们您到目前为止尝试了什么。这充满了bug。您必须在
updateItem(…)
方法中处理项目为null
的情况。如果单元格从可用项更新为不可用项,则还必须删除样式类,并且您需要确保不向同一单元格多次添加“mystyleclass”
。我编辑了答案。至于“如果单元格从可用项更新为不可用项,则还必须删除样式类”,我假设该示例足以理解该概念,并适当地处理其他情况。但它实际上不起作用。在这个实现中,如果用户四处滚动,错误的单元格将具有给定的样式类。这一点您是对的。现在添加了缺少的部分,甚至试着运行它,它也能工作。因为OP想要改变背景,你也可以通过添加“mystyleclass”的定义来完成答案,说明它是什么样子。这里面充满了bug。您必须在updateItem(…)
方法中处理项目为null
的情况。如果单元格从可用项更新为不可用项,则还必须删除样式类,并且您需要确保不向同一单元格多次添加“mystyleclass”
。我编辑了答案。至于“如果单元格从可用项更新为不可用项,则还必须删除样式类”,我假设该示例足以理解该概念,并适当地处理其他情况。但它实际上不起作用。在这个实现中,如果用户四处滚动,错误的单元格将具有给定的样式类。这一点您是对的。现在添加了缺少的部分,甚至尝试运行它,它也可以工作。由于OP想要更改背景,您也可以通过添加“mystyleclass”的定义来完成答案,说明它的外观。