当用户选择/取消选择CheckBox时,我想更改JavaFX TableView的行高。我能找到的唯一方法是通过CSS,所以我尝试了:
if (someCheckBox.isSelected())
tableView.setStyle(".table-row-cell {-fx-cell-size: 60px;}");
else
tableView.setStyle(".table-row-cell {-fx-cell-size: 20px;}");
但这不起作用。任何建议都将不胜感激。
答案 0 :(得分:4)
我发现JavaFX 8引入了 setFixedCellSize 属性,这符合我的要求,因为我需要所有行具有相同的高度。所以这就是解决方案:
if (someCheckBox.isSelected())
tableView.setFixedCellSize(60.0);
else
tableView.setFixedCellSize(20.0);
答案 1 :(得分:1)
这是我对这个问题的解决方案(它只是第一个“解决方法”,但“工作正常”):
column8.setCellFactory(column -> {
return new TableCell<Anfrage, Set<Email>>() /*Or whathever you have*/ {
@Override
protected void updateItem(Set<Email> item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setGraphic(null);
setText("");
} else {
VBox graphic = new VBox();
if (item.size()>1) {
List<Email> sortedMailsList = new ArrayList<>();
sortedMailsList.addAll(item);
Collections.sort(sortedMailsList, new Comparator<Email>(){
@Override
public int compare(Email o1, Email o2) {
if (o1.getEmailVersandt() != null) {
if (o2.getEmailVersandt() != null) {
return o1.getEmailVersandt().compareTo(o2.getEmailVersandt());
} else {
return 1;
}
} else {
if (o2.getEmailVersandt() != null) {
return -1;
} else {
return 0;
}
}
}
});
sortedMailsList.stream().forEach((emailObj) -> {
graphic.getChildren().add((new Label(emailObj.toString())));
});
} else {
for (Email emailObj : item) {
graphic.getChildren().add((new Label(emailObj.toString())));
}
}
this.setMaxHeight(20.0*item.size());
setGraphic(graphic);
}
}
};
});
对我而言,它也是“邮件”(可以为空的日期字段),但我认为你不需要它。 要点是: 1.设置单元工厂 2.在“updateItem”中设置高度。 就是这样:))