【问题标题】:How to make combobox editable in a tablecell in javafx?如何在 javafx 的表格单元中使组合框可编辑?
【发布时间】:2018-11-08 22:18:44
【问题描述】:

我已经使用 ComboBoxTableCell 在表格单元中设置了一个组合框,现在我希望此组合框可编辑,以便用户可以相应地对其进行编辑。我已将组合框的可编辑属性设为 true,但没有成功。下面是代码。

            ComboBoxTableCell combo = new ComboBoxTableCell();                
           tc_target.setCellFactory(combo.forTableColumn(new 
            DefaultStringConverter(), trans));
            tc_target.setOnEditCommit(new 
          EventHandler<TableColumn.CellEditEvent<File, String>>() {

                @Override
        public void handle(TableColumn.CellEditEvent<File, String>event) {
                //work to do
           }

            });
     combo.setEditable(true);

如何使这个组合框可编辑?很高兴得到任何建议。

【问题讨论】:

    标签: javafx combobox tablecell


    【解决方案1】:

    ComboBoxTableCell(和其他类似的类)在其 Javadoc 中不太清楚。正确使用ComboBoxTableCell的要求是:

    1. TableColumn 必须是可编辑的。
    2. 它所属的TableView 也必须是可编辑的。

    如果您需要确保其他列不可编辑,则在这些列上显式调用 TableColumn.setEditable(false)

    附带说明,您不需要写setOnEditCommit(),我不确定这样做是否会破坏ComboBoxTableCell

    【讨论】:

    • TableColumn 和 TableView 都可编辑,但仍然无法使 ComboBox 可编辑。还需要做什么?
    • @Ziva setOnEditCommit() 被删除了吗?
    • 我需要对 setOnEditCommit() 的句柄事件执行一些任务,将其删除,不允许我这样做。那我该如何实现呢?
    • @Ziva 默认情况下,ComboBoxTableCell 负责通过Label 显示单元格值,单元格值取自该行所代表的项目。 Label 在进入编辑模式时变为ComboBox。当您从ComboBox 中选择一个新值时,并且当TableCell 失去焦点时,它会返回到从中获取其原始值的“项目”。如果您不希望出现这种行为,则需要编写自己的单元工厂回调。
    • 我是新手,不知道怎么做。你能告诉我同样的代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2014-07-21
    • 2014-09-04
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多