【发布时间】:2022-01-26 20:16:21
【问题描述】:
我正在尝试这样做,以便每当我在 tableviwew 的最后一列中选择一个复选框时,我都会删除该行。我有一个任务对象,我用相关字段字符串名称、字符串 dateString 和布尔 tickOff 输入到 tableview 中。有人可以帮忙吗?
这是那个班级:
public class Task {
private BooleanProperty tickOff;
private String name;
private String description;
private String dateString;
private String reminder1, reminder2, reminder3, reminder4, reminder5, reminder6;
private int year, month, day;
public Task(String name, String description, int year, int month, int day, boolean ticoff) {
this.name = name;
this.description = description;
this.year = year;
this.month = month;
this.day = day;
dateString = day + "/" + month + "/" + year;
this.tickOff = new SimpleBooleanProperty(ticoff);
// this.tickOff = new SimpleBooleanProperty(false);
/*
* this.tickOff.addListener(new ChangeListener<Boolean>() { public void
* changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
*
* System.out.println("Hi");
*
* } });
*/
}
/////////////
public boolean getSelected() {
return selectedProperty().get();
}
public BooleanProperty selectedProperty() {
return this.tickOff;
}
public boolean isChecked() {
return this.tickOff.get();
}
public boolean getickOff() {
return this.tickOff.get();
}
public BooleanProperty getTickOff() {
return this.tickOff;
}
public BooleanProperty checkedProperty() {
return this.tickOff;
}
这是 tableviwew 所在场景的 Controller 类。
public class ClassPlanController {
private TableView<Task> tasks;
@FXML
private TableColumn<Task, String> task;
@FXML
private TableColumn<Task, String> date;
@FXML
private TableColumn<Task, Boolean> done;
public void addTaskToList(Task taskName) {
task.setCellValueFactory(new PropertyValueFactory<>("name"));
date.setCellValueFactory(new PropertyValueFactory<>("dateString"));
done.setCellValueFactory(new PropertyValueFactory<>("tickOff"));
/*
done.setCellFactory(CheckBoxTableCell.forTableColumn(new Callback<Integer, ObservableValue<Boolean>>() {
public ObservableValue<Boolean> call(Integer param) {
return tasks.getItems().get(param).checkedProperty();
}
}));
/*
done.setCellFactory(new Callback<TableColumn<Task, Boolean>, TableCell<Task, Boolean>>() {
public TableCell<Task, Boolean> call(TableColumn<Task, Boolean> p) {
return new CheckBoxTableCell<Task, Boolean>();
}
});
done.setCellFactory(CheckBoxTableCell.forTableColumn(new Callback<Integer, ObservableValue<Boolean>>() {
public ObservableValue<Boolean> call(Integer param) {
return tasks.get(param).checkedProperty();
}
}));
*/
tasks.getItems().add(taskName);
tasks.setEditable(true);
}
【问题讨论】:
-
如果您真的想保留所有任务(即使是那些未显示在表格中的任务),请使用
FilteredList并按布尔属性进行过滤。如果您想完全摆脱选中的任务,可能按钮比复选框更有意义。 -
这不是一个代码编写服务.. 做一些研究,应用你所学到的,然后用minimal reproducible example 来证明问题所在
-
@James_D 我试图让它模拟一个待办事项列表,所以它非常重要
-
@kleopatra 我从未要求编写任何代码。我做了研究,找不到解决方案,大概是我在这里问这个问题的原因。我认为这适合上下文的最小可重复示例,如果有任何遗漏,请随时告诉我,我会更新问题。
-
你误解了我的意思。您是想完全丢弃该项目(即不再引用它),还是仍想将其保留在内存中(例如,您可以显示已完成的任务等)而不是将其显示在表格中? (无论哪种方式,我想,当您选中复选框时,某些东西会完全从 UI 中消失,这是一种非常奇怪的用户体验。)