如何在FXML(JavaFX)中为按钮定义列
我知道可以在TableView中创建一个充满按钮的列 但是我想知道是否可以直接在FXML中定义它 例如,对于其他类型,您可以: 班级人员:如何在FXML(JavaFX)中为按钮定义列,java,javafx,javafx-2,javafx-8,fxml,Java,Javafx,Javafx 2,Javafx 8,Fxml,我知道可以在TableView中创建一个充满按钮的列 但是我想知道是否可以直接在FXML中定义它 例如,对于其他类型,您可以: 班级人员: 私有最终SimpleStringProperty生日=新SimpleStringProperty(“”); 然后在FXML中: 并且可以使用添加此元素: @FXML私有TableView表; //... 表.getItems()添加(“12/02/1452”); 如何使用按钮实现同样的效果?由于需要单元格工厂,因此无法将按钮添加到FXML中的表列中
私有最终SimpleStringProperty生日=新SimpleStringProperty(“”);
然后在FXML中:
并且可以使用添加此元素:
@FXML私有TableView表;
//...
表.getItems()添加(“12/02/1452”);
如何使用按钮实现同样的效果?由于需要单元格工厂,因此无法将按钮添加到FXML中的表列中
您可以像以前一样使用Java代码来完成 不,不可能用代码初始化它
class ButtonListCell extends ListCell<MyObject> {
@Override
public void updateItem(MyObject obj, boolean empty) {
super.updateItem(obj, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setText(obj.toString());
Button butt = new Button();
butt.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("clicked");
}
});
setGraphic(butt);
}
}
}
class ButtonListCell扩展ListCell{
@凌驾
public void updateItem(MyObject对象,布尔空){
super.updateItem(对象,空);
if(空){
setText(空);
设置图形(空);
}否则{
setText(obj.toString());
按钮对接=新按钮();
butt.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“单击”);
}
});
设置图形(对接);
}
}
}
listview.setCellFactory(新回调(){
@凌驾
公共ListCell调用(ListView参数){
返回新的ButtonListCell();
}
});
在场景生成器中是不可能的。我认为这是不可能的。您必须在代码上设置单元格工厂。
listview.setCellFactory(new Callback<ListView<MyObject>, ListCell>() {
@Override
public ListCell call(ListView<MyObject> param) {
return new ButtonListCell();
}
});