代码之家  ›  专栏  ›  技术社区  ›  user9565564

添加和选择TableView中的ChoiceBox

  •  0
  • user9565564  · 技术社区  · 6 年前

    因此,我尝试为TableView中插入的每个变量添加一个选项框。

    用户。java:

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

    主要的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
    

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Elarbi Mohamed Aymen    6 年前
    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);