正如標題所述,我試圖啓用/禁用基於該錶行數據中的布爾值的錶行內的按鈕。這裏是我的代碼到目前爲止:如何啓用/禁用基於表格內的布爾屬性的按鈕
col.setCellFactory(new Callback<TableColumn<ExampleRow, String>, TableCell<ExampleRow, String>>() {
@Override
public TableCell call(final TableColumn<ExampleRow, String> param){
final Button btn = new Button("Save");
final TableCell<ExampleRow, String> cell = new TableCell<ExampleRow, String>(){
@Override
public void updateItem(String item, boolean empty){
super.updateItem(item, empty);
if(empty){
setGraphic(null);
setText(null);
} else {
btn.setPrefWidth(col.getWidth());
btn.setPadding(Insets.EMPTY);
btn.setOnAction(event -> {
});
setGraphic(btn);
setText(null);
}
}
};
ExampleRow row = (ExampleRow)cell.getTableRow().getItem(); //NPE here
btn.setDisable(!row.hasChanged());
return cell;
}
});
不幸的是我的代碼在底線的第五個打破。如果我排除該行並將下面的行更改爲btn.setDisable(true)
,它的功能非常好。基於按鈕所在的數據,我可以做些什麼來禁用這個按鈕?
什麼是您用於此列的String屬性(即作爲'item'傳遞給'updateItem'方法的值)?它看起來不像你正在使用它。如果沒有,爲什麼不把該列設置爲'TableColumn'並且使單元格的值爲'ExampleRow'的'changed'屬性?然後,您可以直接在'updateItem'方法中更改按鈕的禁用狀態。 –
這只是一個未使用的虛擬字符串,我在[this](http://stackoverflow.com/questions/29489366/how-to-add-button-in-javafx-table-view)問題的建議中使用。 – Taelsin