【问题标题】:Adding and selecting ChoiceBox that's inside a TableView添加和选择 TableView 中的 ChoiceBox
【发布时间】:2018-09-07 15:23:25
【问题描述】:

所以我尝试为插入到 TableView 中的每个变量添加一个 ChoiceBox。

Users.java:

 Users(String userName , Integer userAge , ChoiceBox employed)
{
    this.userName = userName ;
    this.userAge = userAge ;
    this.employed= employed;
}
//getters and setters

Main.java:

ObservableList<Users>userList = FXCollections.observableArrayList();
TableView<Users> userTable = new TableView();
TableColumn<Users, String> nameCol = new TableColumn();
TableColumn<Users, Integer> ageCol = new TableColumn();

TableColumn<Users, ChoiceBox> employCol = new TableColumn();

private ChoiceBox createBox(){ 
ChoiceBox box = new ChoiceBox();
box.getItems.addAll("true" , "false");
box.setValue("true"); 
return box;
}


userList.addAll(new User("James" , 47 , createBox()));

一切编译和运行都很好,但我无法获得对用户单击的box 的引用。我尝试通过选择模型获得它:

userTable.getSelectionModel().getSelectedItem().employed;

但这只是给了我一个 NullPointerException。我需要能够选择选择框,如果用户选择 "true" ,那么它将显示在文本字段中,但这是一个简单的解决方法,我实际上无法将实例放入选择框。我提到过:

Getting selected item from a JavaFX TableView

javafx: attach ChoiceBox to a TableCell on a TableColumn during Edit

ChoiceBox with custom Item in a TableView

但无济于事。我也尝试过使用多种变体

ChoiceBoxTableCell

ChoiceBoxTableList

但这些甚至无法编译,我不断收到回调错误。

【问题讨论】:

    标签: java xml javafx fxml


    【解决方案1】:
    Callback<TableColumn<Users, String>, TableCell<Users, String>> cellFactory
                = //
                new Callback<TableColumn<Users, String>, TableCell<Users, String>>() {
            @Override
            public TableCell call(final TableColumn<Users, String> param) {
                final TableCell<Users, String> cell = new TableCell<Users, String>() {
    
                    final ChoiceBox createBox(){ 
    ChoiceBox box = new ChoiceBox();
    box.getItems.addAll("true" , "false");
    box.setValue("true"); 
    
                    @Override
                    public void updateItem(String item, boolean empty) {
                        super.updateItem(item, empty);
                        if (empty) {
                            setGraphic(null);
                            setText(null);
                        } else {
                            setGraphic(createBox);
                            setText(null);
                        }
                    }
                };
                return cell;
            }
        };
    
        employCol.setCellFactory(cellFactory);
    

    【讨论】:

    • 虽然我非常感谢SSCCE,但我更想知道解决方案背后的“原因”。另一件事是,这是否将选择框绑定到列表中创建的每个“用户”对象?如果是,我们如何访问它?
    • 你能再解释一下吗,我不明白你在问什么。
    • 我需要在表格单元格中返回所选选择框的值。 userList.addAll(new User("James" , 47 , createBox())); 就在createBox()所在的位置,在table中选中时如何获取它的t/f值
    • 不要重新发明轮子,fx 有一个 ChoiceBoxTableCell ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多