如何解决如果我已经在该表上有一些事件,如何在 tabeview 中为一行着色?
public void updateList(PoliseTable poliseTable) {
poliseTable.getTableView().setRowFactory(tv -> {
TableRow<PolisePOJO> row = new TableRow<>();
row.setonMouseClicked(event -> {
if (event.getClickCount() == 1 && (!row.isEmpty())) {
PolisePOJO rowData = row.getItem();
List<PredmetiPOJO> predmetiList = PredmetiDAO.loadPredmete(rowData.getId());
predmetiList.stream().forEach(e
-> predmetiTable.getPredmetiTable().getItems().add(new PredmetiPOJO(e.getId(),e.getName(),e.getPlace(),e.getAdress(),e.getRegNumber(),e.getValue()))
);
}
});
return row;
});
}
所以上面的方法现在工作正常我想根据某些列值给行着色这是我试过的
public void customizeColorRow(TableColumn column) {
poliseTable.setRowFactory(tv -> new TableRow<PolisePOJO>() {
@Override
public void updateItem(PolisePOJO polise,boolean empty) {
super.updateItem(polise,empty);
if (polise == null) {
setStyle("");
} else if (polise.getStatus().equals("1")) {
setStyle("-fx-background-color: tomato;");
} else {
setStyle("");
}
}
});
}
当我调用 customizeColorRow
方法时它不起作用,但是当我删除 updateList
方法时它不起作用。我不是很好的 al lambda,所以也许我做错了什么。
那么我怎样才能让这两个功能同时工作呢?
解决方法
如评论中所述,TableView
只有一个行工厂。如果您设置行工厂两次,它将只有第二个工厂。只需使用为 rowFactory
实例提供您想要的所有功能的 TableRow
。
poliseTable.setRowFactory(tv -> {
TableRow<PolisePOJO> row = new TableRow<>() {
@Override
public void updateItem(PolisePOJO polise,boolean empty) {
super.updateItem(polise,empty);
if (polise == null) {
setStyle("");
} else if (polise.getStatus().equals("1")) {
setStyle("-fx-background-color: tomato;");
} else {
setStyle("");
}
}
};
row.setOnMouseClicked(event -> {
if (event.getClickCount() == 1 && (!row.isEmpty())) {
PolisePOJO rowData = row.getItem();
List<PredmetiPOJO> predmetiList = PredmetiDAO.loadPredmete(rowData.getId());
predmetiList.forEach(e
-> predmetiTable.getPredmetiTable().getItems().add(new PredmetiPOJO(e.getId(),e.getName(),e.getPlace(),e.getAdress(),e.getRegNumber(),e.getValue()))
);
}
});
return row;
});
如果您想保持功能分离,您可以使用 itemProperty()
注册一个侦听器而不是覆盖 updateItem()
,并“装饰”现有的行工厂:
public void updateList(TableView<PolisePOJO> poliseTable) {
poliseTable.setRowFactory(tv -> {
TableRow<PolisePOJO> row = getRowFromTable(tv);
row.setOnMouseClicked(event -> {
if (event.getClickCount() == 1 && (!row.isEmpty())) {
PolisePOJO rowData = row.getItem();
List<PredmetiPOJO> predmetiList = PredmetiDAO.loadPredmete(rowData.getId());
predmetiList.stream().forEach(e
-> predmetiTable.getPredmetiTable().getItems().add(new PredmetiPOJO(e.getId(),e.getValue()))
);
}
});
return row;
});
}
和
public void customizeColorRow() {
poliseTable.setRowFactory(tv -> {
TableRow<PolisePOJO> row = getRowFromTable(tv) ;
row.itemProperty().addListener((obs,oldPolise,polise) -> {
if (polise == null) {
row.setStyle("");
} else if (polise.getStatus().equals("1")) {
row.setStyle("-fx-background-color: tomato;");
} else {
row.setStyle("");
}
});
return row ;
});
}
与
private TableRow<PolisePOJO> getRowFromTable(TableView<PolisePOJO> table) {
Callback<TableView<PolisePOJO>,TableRow<PolisePOJO>> rowFactory = table.getRowFactory();
if (rowFactory == null) {
return new TableRow<>();
} else {
return rowFactory.call(table);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。