当前位置: 首页 > 知识库问答 >
问题:

在javafx的tableview中读取复选框属性

仲孙默
2023-03-14

我是JavaFx新手。我设计了一个table thorugh scenebuilder,其中第1列有一个按钮,第2列有一个复选框。单击按钮时,我希望获得checkbox属性的内容。但问题是,我的输出总是错误的。这是我的密码

模型JAVA

private boolean Active;     
    public boolean isActive() {
        return Active;
    }   
    public void setActive(boolean active) {
        Active = active;
    }

在我的控制器类中,我按照以下方式设计了initialize()方法

控制器。JAVA

@FXML
private TableView<Model> tableBuilding;
@FXML
private TableColumn<Model,Boolean> colActive;
@FXML
private TableColumn<Model,Model> colAction; 
 @Override
        public void initialize(URL arg0, ResourceBundle arg1) {
//Containing the button         
colAction.setCellFactory(col -> {
                Button ShowButton = new Button("Show");

                TableCell<Model, Model> cell = new TableCell<Model, Model>() {
                    @Override
                    //Updating with the number of row 
                    public void updateItem(Model building, boolean empty) {
                        super.updateItem(building, empty);
                        if (empty) {
                            setGraphic(null);
                        } else {
                            setGraphic(ShowButton);
                        }
                    }              
                };                                          
                ShowButton.setOnAction(event -> {

                TableRow row = cell.getTableRow();
                    Model building=(Model) row.getItem();


                    ObservableList<Model> data = tableBuilding.getItems();

                    for (Model item : data){
                        //check the boolean value of each item to determine checkbox state
                        System.out.println(item.isActive());
                    }

                });

                return cell ;
            });
//Containing the checkbox
colActive.setCellValueFactory(new PropertyValueFactory<Model,Boolean>("Active"));
        colActive.setCellFactory(tc -> new CheckBoxTableCell<>());   

}

这里是系统。出来println(item.isActive()) 总是将false作为输出重新展开。如何获取该复选框的实际属性?有人能帮我吗?


共有1个答案

常坚
2023-03-14

我相信你可以简化一下你的控制器。尝试将控制器代码更改为:

public class Controller {

    @FXML
    private TableView<Model> tableBuilding;
    @FXML
    private TableColumn<Model, Boolean> colActive;
    @FXML
    private TableColumn<Model, Model> colAction;

    @FXML
    public void initialize() {

        // Sample List
        ObservableList<Model> models = FXCollections.observableArrayList();
        models.addAll(
                new Model(),
                new Model(),
                new Model()
        );

        tableBuilding.setItems(models);

        //Containing the button
        colAction.setCellFactory(col -> {
            Button ShowButton = new Button("Show");

            TableCell<Model, Model> cell = new TableCell<>() {
                @Override
                //Updating with the number of row
                public void updateItem(Model building, boolean empty) {
                    super.updateItem(building, empty);
                    if (empty) {
                        setGraphic(null);
                    } else {
                        setGraphic(ShowButton);
                    }
                }
            };

            ShowButton.setOnAction(event -> {

                TableRow row = cell.getTableRow();
                Model building = (Model) row.getItem();

                System.out.println(building.getActive());

            });

            return cell;
        });

        //Containing the checkbox
        colActive.setCellValueFactory(new PropertyValueFactory<>("active"));
        colActive.setCellFactory(col -> new CheckBoxTableCell<>());

    }
}

具体来说,最后两行代码;您不需要指定自己的TableCell,因为CheckBoxTableCell可以自己处理模型的更新。

但是,需要更改模型类,以将活动字段更新为真实属性;否则,TableView无法正确更新它。控制器colActive中的行。setCellValueFactory(新属性ValueFactory

以下是定义属性的正确方法:

public class Model {

    private SimpleBooleanProperty active = new SimpleBooleanProperty(true);

    public boolean getActive() {
        return active.get();
    }

    public SimpleBooleanProperty activeProperty() {
        return active;
    }

    public void setActive(boolean active) {
        this.active.set(active);
    }
}

有趣的是,这似乎是遵循适当的Java编码实践很重要的情况之一。Active属性在这里也应该是小写的,而不是大写的。

 类似资料:
  • 我正在为我的soap服务编写一个JavaFX客户机,我的fxml页面必须包含一个完全可编辑的TableView,它由产品类实体组成。我的表现在由两个文本列和一个包含双值的文本列组成。我想添加一个选择列,在它的单元格中包含复选框项。使用集成演示应用程序,我扩展了一个使用复选框的单元格类: 然后,在fxml视图控制器类中,我为请求的TableColumn设置一个cellFactory: 我的问题是:

  • 主要内容:创建复选框,复选框状态,示例复选框允许用户进行多项选择。例如,当订购披萨时,可以添加多个调味料。单选按钮或切换按钮用于单选或无选择。 创建复选框 我们可以使用中的构造函数来创建的对象。 创建不带标题的复选框,如下代码所示 - 要创建带有字符串标题的复选框,如下代码所示 - 创建复选框后,我们可以更改其文本并将其选中。 复选框状态 可以使用来表示三个状态: Yes No Not Applicable(不适用) “不适用”状态是

  • 我目前正在使用 但这并没有返回选择模型中的一个选定项。

  • 问题内容: 如何从JavaFX中的中获取所选项目? 我目前正在使用 但这并没有给我返回选择模型中的一个选择项。 问题答案: 好的,假设您有一个名为的数据模型类。这条路: 请注意,必须使用a 作为类型参数以避免转换: 要么 选择行后,您将返回一个实例。然后对该实例执行任何您想要的操作。

  • 问题内容: 我正在Java中使用Selenium来测试Webapp中复选框的检查。这是代码: 我声明并将其分配给复选框所在的区域。 奇怪的是回报,因此 在复选框的HTML中,没有显示属性。但是,不是所有元素都有一个,这样的代码就可以工作吗? 问题答案: 如果您使用的是Webdriver,则正在寻找的项目已选中。 除非指定,否则通常在复选框呈现中实际上不会应用选中的属性。 所以您在Selenium

  • 问题内容: 如何读取PHP中是否选中了复选框? 问题答案: 如果您的HTML页面如下所示: 提交表格后,您可以使用以下方法进行检查: 要么