我有一个表示日历的TableView。每个细胞都是一天。我想向细胞添加一个事件。单击单元格时,背景必须更改为红色...应该可以选择多个单元格
答案 0 :(得分:0)
如果只是您需要的选择,您可以使用具有多个选择的选择模型和单元格选择模式。
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
table.getSelectionModel().setCellSelectionEnabled(true);
.table-cell {
-fx-selection-bar: red;
-fx-selection-bar-non-focused: red;
}
如果您不想使用选择模型,则需要将数据存储在商品中并使用自定义TableCell
public class DayCell extends TableCell<Week, Boolean> {
{
setOnMouseClicked(evt -> {
if (!isEmpty() && getItem() != null && evt.getButton() == MouseButton.PRIMARY) {
WritableValue<Boolean> property = (WritableValue<Boolean>) getTableColumn().getCellObservableValue((Week) getTableRow().getItem());
property.setValue(!getItem());
}
});
}
@Override
protected void updateItem(Boolean item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setStyle(null);
} else {
setStyle(item ? "-fx-background-color: red;" : null);
}
}
}
column.setCellFactory(c -> new DayCell());
这需要ObservableValue
返回的cellValueFactory
以一种将数据存储在表项类中的方式实现WritableValue<Boolean>
。使用存储在此类中的BooleanProperty
可以解决问题。
我不认为在这种情况下使用TableView
是个好主意。它不是为了显示固定大小的不可调整大小的网格而设计的。