javafx - 复选框松开他的状态
问题描述
我创建了一个包含 3 列的表。在中间栏中,我有 3 个复选框。当我的窗口初始化时,如果来自数据库的信息合适,则勾选复选框。有用。用户可以取消勾选数据库中更改信息的复选框。我的问题是,当我验证复选框是否被选中时,一次返回 true,一次返回 false,但复选框处于相同状态(选中与否)。
public CheckBox podglad2, edycja2, dodawanie2, usuwanie2, importowanie2, eksportowanie2, nadawanie2;
private static void setAccessLabelStyle2(CheckBox label, AccessLevel level, Integer value) {
if (check(level, value)) {
label.setSelected(true);
} else {
label.setSelected(false);
}
}
private static boolean check(AccessLevel accessLevel, Integer value) {
return (accessLevel.getBit() & value) > 0;
}
public TableCell getFunctionCell2(TableCell cell, Integer accessLevel) {
HBox graphics = new HBox();
graphics.setAlignment(Pos.CENTER_LEFT);
graphics.setSpacing(7.0);
podglad2 = new CheckBox("P");
setAccessLabelStyle2(podglad2, AccessLevel.VIEW, accessLevel);
dodawanie2 = new CheckBox("D");
setAccessLabelStyle2(dodawanie2, AccessLevel.CREATE, accessLevel);
edycja2 = new CheckBox("E");
setAccessLabelStyle2(edycja2, AccessLevel.UPDATE, accessLevel);
}
accessLevelCol.setCellFactory(param -> {
return new TableCell<FunctionTableModel, Integer>() {
@Override
protected void updateItem(Integer item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
setStyle("");
} else {
getFunctionCell2(this, item);
podglad2.setOnAction(e -> {
FunctionTableModel row = getTableView().getItems().get(getIndex());
if (check(AccessLevel.VIEW, row.getAccessLevel())) {
if (podglad2.isSelected() == false) {
row.setAccessLevel(row.getAccessLevel() - AccessLevel.VIEW.getBit());
}
} else {
if (podglad2.isSelected() == true) {
row.setAccessLevel(row.getAccessLevel() + AccessLevel.VIEW.getBit());
}
}
});
dodawanie2.setOnAction(e -> {
FunctionTableModel row = getTableView().getItems().get(getIndex());
if (check(AccessLevel.CREATE, row.getAccessLevel())) {
if (dodawanie2.isSelected() == false) {
row.setAccessLevel(row.getAccessLevel() - AccessLevel.CREATE.getBit());
}
} else {
if (dodawanie2.isSelected() == true) {
row.setAccessLevel(row.getAccessLevel() + AccessLevel.CREATE.getBit());
}
}
});
edycja2.setOnAction(e -> {
FunctionTableModel row = getTableView().getItems().get(getIndex());
if (check(AccessLevel.UPDATE, row.getAccessLevel())) {
if (edycja2.isSelected() == false) {
row.setAccessLevel(row.getAccessLevel() - AccessLevel.UPDATE.getBit());
}
} else {
if (edycja2.isSelected() == true) {
row.setAccessLevel(row.getAccessLevel() + AccessLevel.UPDATE.getBit());
}
}
});
}
我该如何解决这个问题?
解决方案
推荐阅读
- javascript - 使用文本字段同时过滤 react-table 和 react-leaflet 标记(在表中显示过滤器数据并在地图中显示标记)
- bezier - 将 3 次立方 Nurbs 曲线转换为 Catmull-Rom?
- python - 确定 fileinput.input 是否有任何输入?
- go - Go 模板不会显示结构切片
- php - array_search 找不到以 `@` 开头的字符串
- git - 创建本地目录并推送到 GitHub 的简洁命令行步骤
- java - JMOD 架构会影响 Javac 生成的类文件吗
- java - 将图像从内部存储上传到服务器 [错误]
- javascript - 从用户输入发送 JSON 对象中的日期
- php - 在同一视图中将数据从 foreach 循环传递到引导模式