我想让我的切换按钮列在我的 TableView 中正常工作。当我按下切换按钮时,什么也没有发生。如何修复这个问题?我没有更改“Medicaments.java”模型中的任何内容。看起来就像您在下面看到的那样:
@FXML
private TableColumn<Medicaments, Void> editRow;
我的型号:
public Medicaments(int idNumber, String LOTNumber, String medName, String dateExpiry, int quantity, String unit,String timeLeft) {
this.idNumber = idNumber;
this.LOTNumber = LOTNumber;
this.medName = medName;
this.dateExpiry = dateExpiry;
this.quantity = quantity;
this.unit = unit;
this.timeLeft = timeLeft;
}
切换按钮列:
private void AddEditButton() {
TableColumn<Medicaments, Void> colBtn = new TableColumn("");
Callback<TableColumn<Medicaments, Void>, TableCell<Medicaments, Void>> cellFactory = new
Callback<TableColumn<Medicaments, Void>, TableCell<Medicaments, Void>>() {
@Override
public TableCell<Medicaments, Void> call(final TableColumn<Medicaments, Void> param)
{
final TableCell<Medicaments, Void> cell = new TableCell<Medicaments, Void>() {
private final ToggleButton toggleButton = new ToggleButton("Edit");
{
/**/
toggleButton.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
event.consume();
toggleButton.selectedProperty().addListener((observable,oldValue,
newValue) -> {
if(newValue){
toggleButton.setText("Save");
} else {
toggleButton.setText("Edit");
}
});
});
/*btn.addEventFilter(MouseEvent.MOUSE_PRESSED, event ->{
event.consume();
Medicaments data = getTableView().getItems().get(getIndex());
System.out.println("selectedData: " + data);
});*/
}
@Override
public void updateItem(Void item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
setGraphic(toggleButton);
}
}
};
return cell;
}
};
editRow.setCellFactory(cellFactory);
}
这个答案可能适用,因为您可能会更改 TableView 看不到的内容。
如果您的 TableView 实例是该方法所在的类的私有成员
addEditButton()
,则可以在设置图形后refresh()
直接从方法内部调用它。updateItem(Void item, boolean empty)
否则,您必须将 TableView 实例添加到 addEditButton 方法签名中,以便 update 方法可以调用它,或者通过向保存它的类添加访问器来从方法内部访问它。第一种方法(例如):请注意,您可能必须制作
tableView
final
; 有一阵子了。这是一个例子。您还可以采取其他可能更通用的方法。
推荐的解决方案可能是基于对CheckBoxTableCell代码副本的修改的实现(我不会在此处介绍)。
警告
如果您自己实现类似的功能,请小心尝试复制简单按钮的教程(如您在评论中所述)。这种方法可能会导致您走上错误的道路。
按钮没有反映的内部状态,而切换按钮则有状态(可以选择或不选择)。
当支持行的项目更新时(例如,将新项目添加到列表中,或对列表重新排序,或对表格进行排序),您需要切换按钮继续反映与其关联的项目的正确状态(或现在与之关联的新项目),但这对于没有状态的简单按钮来说是不必要的。
因此,当涉及诸如 ToggleButton 之类的有状态控件时,需要解决的问题的性质与无状态控件不同,并且解决方案可能相应地有所不同。