Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在FXML(JavaFX)中为按钮定义列_Java_Javafx_Javafx 2_Javafx 8_Fxml - Fatal编程技术网

如何在FXML(JavaFX)中为按钮定义列

如何在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中的表列中

我知道可以在TableView中创建一个充满按钮的列

但是我想知道是否可以直接在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();
    }

});