当前位置: 首页 > 面试题库 >

如何在JavaFX中将CheckBox添加到TableView

凤晨朗
2023-03-14
问题内容

在我的Java桌面应用程序中,我有一个TableView,我想在其中包含CheckBoxes列。

我确实在http://www.jonathangiles.net/javafx/2.0/CellFactories/上找到了完成的位置,但是由于无法下载,因为我不知道Jonathan
Giles会多久回复我的电子邮件,所以我认为d问…

如何将CheckBox放在TableView的单元格中?


问题答案:

您需要在TableColumn上设置一个CellFactory。

例如:

Callback<TableColumn<TableData, Boolean>, TableCell<TableData, Boolean>> booleanCellFactory = 
            new Callback<TableColumn<TableData, Boolean>, TableCell<TableData, Boolean>>() {
            @Override
                public TableCell<TableData, Boolean> call(TableColumn<TableData, Boolean> p) {
                    return new BooleanCell();
            }
        };
        active.setCellValueFactory(new PropertyValueFactory<TableData,Boolean>("active"));
        active.setCellFactory(booleanCellFactory);

class BooleanCell extends TableCell<TableData, Boolean> {
        private CheckBox checkBox;
        public BooleanCell() {
            checkBox = new CheckBox();
            checkBox.setDisable(true);
            checkBox.selectedProperty().addListener(new ChangeListener<Boolean> () {
                public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
                    if(isEditing())
                        commitEdit(newValue == null ? false : newValue);
                }
            });
            this.setGraphic(checkBox);
            this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
            this.setEditable(true);
        }
        @Override
        public void startEdit() {
            super.startEdit();
            if (isEmpty()) {
                return;
            }
            checkBox.setDisable(false);
            checkBox.requestFocus();
        }
        @Override
        public void cancelEdit() {
            super.cancelEdit();
            checkBox.setDisable(true);
        }
        public void commitEdit(Boolean value) {
            super.commitEdit(value);
            checkBox.setDisable(true);
        }
        @Override
        public void updateItem(Boolean item, boolean empty) {
            super.updateItem(item, empty);
            if (!isEmpty()) {
                checkBox.setSelected(item);
            }
        }
    }


 类似资料:
  • 我试图将ActionListener添加到一个标签中,每当用户键入错误的密码或登录时,该标签就会弹出。这是我的登录控制器 我如何能够解决这个问题?我已经尝试了很多次(setOnAction, addMouseListener),但都不起作用:(。 如果你不介意的话,我还想问一下public void initialize函数。这是干什么用的?当我创建类时,它会自动弹出。 提前感谢

  • 我试图找到一种方法,将图像添加到JavaFx TableView列中,该列包含通过hibernate从H2数据库填充的其他列中的数据。TableView是在JavaFx场景生成器中设计的。 到目前为止,我一直在努力总结: 控制器类: 我得到一个错误在说. 这是我第一次尝试将图像添加到TableView中。 我从昨天开始四处看看,但现在似乎被卡住了。我希望得到一些帮助。我非常感谢你的帮助。 这是创建

  • 问题内容: 我正在尝试找到一种将图像添加到JavaFx TableView列的方法,该图像具有通过hibernate从H2数据库填充的其他列中的数据。TableView是在JavaFx Scene Builder中设计的。 到目前为止,这是我设法做到的: 控制器类: 我说那是一个错误。 这是我第一次尝试将图像添加到TableView中。 从昨天开始,我一直四处张望,但现在似乎被困住了。我希望能有所

  • 我正在尝试使用for循环在JavaFX中迭代地向GridPane添加标签,但当我尝试启动应用程序时,我一直收到错误。控制台输出是: 我是这方面的初学者,但我明白它告诉我,我正在尝试放置一个已经放置的物体。 代码: 然后我继续使用一个标签数组,我相信它不会试图替换一个已经放置的对象,但是我收到了另一个错误: 代码:

  • 我在互联网上看到了向TableView添加行的示例,例如使用Oracle留档中的Person类。 但我的列数是可变的,所以我不能绑定到Person(或任何其他)bean业务对象。 Oracle示例继续展示了如何将列绑定到属性名,但对于这一点,它只展示了如何添加列,而不是行。 我的问题是,有人能给我指出一个Hello, World动态添加任意列和/或行到JavaFX 8 TableView的例子吗?

  • 问题内容: 我收到以下错误,因为Java 11排除了JavaFX作为最新版本的一部分。 那么如何在Java 11中将JavaFX添加到Eclipse?谢谢。 问题答案: 按照入门指南,这些是从Eclipse运行JavaFX 11的必需步骤。 1安装Eclipse 2018-09 。 2安装JDK 11 。 3将Java 11作为已安装的JRE添加到Eclipse:Eclipse->窗口->首选项-