在一列中添加两个按钮,并获得单击行值javafx

在一列中添加两个按钮,并获得单击行值javafx,java,javafx,java-8,javafx-2,javafx-8,Java,Javafx,Java 8,Javafx 2,Javafx 8,我试图在javafx的表视图中实现一列中的两个按钮。一、 我能够在一列中实现一个按钮,但不能在一列中添加两个按钮。 我从这个链接中得到了一些想法 我已经在上面的链接中使用了这个想法。但是,代码对我不起作用 TableColumn<Student, String> firstCol = new TableColumn<Student, String>("ID"); TableColumn<Student, String> secondCol

我试图在javafx的表视图中实现一列中的两个按钮。一、 我能够在一列中实现一个按钮,但不能在一列中添加两个按钮。 我从这个链接中得到了一些想法

我已经在上面的链接中使用了这个想法。但是,代码对我不起作用

    TableColumn<Student, String> firstCol = new TableColumn<Student, String>("ID");
    TableColumn<Student, String> secondCol = new TableColumn<Student, String>("Name");
    TableColumn<Student, String> thirdCol = new TableColumn<Student, String>("Quiz Mark");
    TableColumn<Student, String> forthCol = new TableColumn<Student, String>("A1");
    TableColumn<Student, String> fifthCol = new TableColumn<Student, String>("A2");
    TableColumn<Student, String> sixthCol = new TableColumn<Student, String>("A3");
    TableColumn<Student, String> sevenCol = new TableColumn<Student, String>("Exam");
    TableColumn<Student, String> eightCol = new TableColumn<Student, String>("Result");
    TableColumn<Student, String> nineCol = new TableColumn<Student, String>("Grade");
    TableColumn<Student, Student> tenthCol = new TableColumn<Student, Student>("Action");   


firstCol.setCellValueFactory(new PropertyValueFactory<>("Id"));
    secondCol.setCellValueFactory(new PropertyValueFactory<>("Name"));
    thirdCol.setCellValueFactory(new PropertyValueFactory<>("QuizMark"));
    forthCol.setCellValueFactory(new PropertyValueFactory<>("Assingment1Mark"));
    fifthCol.setCellValueFactory(new PropertyValueFactory<>("Assingment2Mark"));
    sixthCol.setCellValueFactory(new PropertyValueFactory<>("Assingment3Mark"));
    sevenCol.setCellValueFactory(new PropertyValueFactory<>("ExamMark"));
    eightCol.setCellValueFactory(new PropertyValueFactory<>("Result"));
    nineCol.setCellValueFactory(new PropertyValueFactory<>("Grade"));
    tenthCol.setCellFactory(param -> new TableCell<Student, Student>() {
        private final Button editButton = new Button("edit");
        private final Button deleteButton = new Button("delete");
        HBox pane = new HBox(deleteButton, editButton);

        @Override
        protected void updateItem(Student patient, boolean empty) {
            super.updateItem(patient, empty);

            if (patient == null) {
                setGraphic(null);
                return;
            }

            deleteButton.setOnAction(event -> {
                Student getPatient = getTableView().getItems().get(getIndex());
                System.out.println(getPatient.getId() + "   " + getPatient.getName());
            });

            editButton.setOnAction(event -> {
                Student getPatient = getTableView().getItems().get(getIndex());
            });
            pane.getChildren().addAll(deleteButton,editButton);
            setGraphic(pane);
        }
    });
TableColumn firstCol=新的TableColumn(“ID”);
TableColumn secondCol=新的TableColumn(“名称”);
TableColumn thirdCol=新的TableColumn(“测验分数”);
TableColumn forthCol=新的TableColumn(“A1”);
TableColumn fifthCol=新的TableColumn(“A2”);
TableColumn第六列=新的TableColumn(“A3”);
TableColumn sevenCol=新的TableColumn(“检查”);
TableColumn eightCol=新的TableColumn(“结果”);
TableColumn nineCol=新的TableColumn(“等级”);
TableColumn tenthCol=新的TableColumn(“操作”);
firstCol.setCellValueFactory(新属性ValueFactory(“Id”);
第二列setCellValueFactory(新属性ValueFactory(“名称”);
第三家公司setCellValueFactory(新财产价值工厂(“QuizMark”);
forthCol.setCellValueFactory(新属性ValueFactory(“Assingment1Mark”);
第五列setCellValueFactory(新属性ValueFactory(“Assingment2Mark”);
第六列setCellValueFactory(新属性ValueFactory(“assing3Mark”);
sevenCol.setCellValueFactory(新属性价值工厂(“ExamMark”);
eightCol.setCellValueFactory(新属性ValueFactory(“结果”);
nineCol.setCellValueFactory(新物业价值工厂(“等级”);
tenthCol.setCellFactory(参数->新建TableCell(){
专用最终按钮编辑按钮=新按钮(“编辑”);
专用最终按钮deleteButton=新按钮(“删除”);
HBox窗格=新HBox(删除按钮、编辑按钮);
@凌驾
受保护的void updateItem(学生患者,布尔值为空){
super.updateItem(患者,空);
如果(患者==null){
设置图形(空);
返回;
}
deleteButton.setOnAction(事件->{
学生getPatient=getTableView().getItems().get(getIndex());
System.out.println(getPatient.getId()+“”+getPatient.getName());
});
editButton.setOnAction(事件->{
学生getPatient=getTableView().getItems().get(getIndex());
});
pane.getChildren().addAll(deleteButton,editButton);
设置图形(窗格);
}
});


在中,不会显示“操作”列按钮。我哪里做错了。请任何人告诉我。

缺少
cellValueFactory
第十列中的单元格项目
始终
为空。使用
updateItem
方法的第二个参数确定行是否为空

为了说明这一点,我将列的类型更改为
TableColumn

此外,在每次更改项目时再次添加
HBox
的子项是不必要的,因为在单击
按钮时会计算
getIndex()

您可以将代码更改为:

TableColumn<Student, Void> tenthCol = new TableColumn<>("Action");

...

tenthCol.setCellFactory(param -> new TableCell<Student, Void>() {
    private final Button editButton = new Button("edit");
    private final Button deleteButton = new Button("delete");
    private final HBox pane = new HBox(deleteButton, editButton);

    {
        deleteButton.setOnAction(event -> {
            Student getPatient = getTableView().getItems().get(getIndex());
            System.out.println(getPatient.getId() + "   " + getPatient.getName());
        });

        editButton.setOnAction(event -> {
            Student getPatient = getTableView().getItems().get(getIndex());
        });
    }

    @Override
    protected void updateItem(Void item, boolean empty) {
        super.updateItem(item, empty);

        setGraphic(empty ? null : pane);
    }
});
TableColumn tenthCol=新的TableColumn(“操作”);
...
tenthCol.setCellFactory(参数->新建TableCell(){
专用最终按钮编辑按钮=新按钮(“编辑”);
专用最终按钮deleteButton=新按钮(“删除”);
专用最终HBox窗格=新HBox(删除按钮、编辑按钮);
{
deleteButton.setOnAction(事件->{
学生getPatient=getTableView().getItems().get(getIndex());
System.out.println(getPatient.getId()+“”+getPatient.getName());
});
editButton.setOnAction(事件->{
学生getPatient=getTableView().getItems().get(getIndex());
});
}
@凌驾
受保护的void updateItem(void项,布尔值为空){
super.updateItem(项,空);
setGraphic(空?空:窗格);
}
});