我在Java ListView单元工厂中出现异常。我有一个 if 语句,它仅评估一个单元格项是否与其他项相等(如果相等),那么我只是更改该单元格的文本颜色。但是出于一个奇怪的原因,在我向ListView添加新元素后,其他单元格或项目均满足条件,因此结果是许多单元格的颜色违背了我的意愿。
我正在使用JFoenix材质设计库中的JFXListView自定义ListView。 我之前也遇到过同样的问题,但是更改了disable属性的值,当我滚动列表视图时,发生了同样的异常!未被禁用的一个单元格在滚动后被禁用(该项目在滚动条上处于隐藏状态,当它不再被隐藏时,异常就变得明显了(该单元格被违反了我的意愿而被禁用)。
zoneListView.setCellFactory(listSelectionView ->
{
ListCell<String> cell = new ListCell<String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setOnDragEntered(event -> setTextFill(Color.DARKRED));
setOnDragExited(event -> setTextFill(Color.BLACK));
setOnDragOver(event -> {
if (event.getGestureSource() != this &&
event.getDragboard().hasString()) {
event.acceptTransferModes(TransferMode.MOVE);
}
event.consume();
});
setOnDragDropped(event ->
{
if (getItem() == null) {
return;
}
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasString()) {
int index = Integer.valueOf(db.getString());
XBeeNode node = nodeListView.getItems().get(index);
if (node != null) {
if (!node.getZone().equals(getItem())) {
String actual_zone = node.getZone();
if (!changedNodes.containsKey(node)) {
changedNodes.put(node, node.getZone());
System.out.println(changedNodes.toString());
}
node.getZone();
node.setZone(getItem());
NodesFilteredList.setPredicate(data ->
{
if (actual_zone == null || actual_zone.isEmpty())
return true;
if (actual_zone.equals("*"))
return true;
else if ((data.getZone().equals(actual_zone) ))
return true;
else if (data.getZone().endsWith(actual_zone))
return true;
else return false;
});
}
}
success = true;
}
/* let the source know whether the string was successfully
* transferred and used */
event.setDropCompleted(success);
event.consume();
});
if (item.equals("*"))
setTextFill(Color.RED); // Here is where change the text color
setText(item == null ? "null" : item.toString());
setGraphic(null);
}
}
};
cell.setOnDragDone(DragEvent::consume);
return cell;
})
所以我有一个初始化列表项,如下所示:
在开始时,只有第一项(“ *”)具有红色文本颜色。但是正如我之前说的,添加新元素后,另一个单元格会更改其颜色。