【问题标题】:How to make Hyperlink TableColumn in TableView editable如何使 TableView 中的超链接 TableColumn 可编辑
【发布时间】:2017-07-23 13:19:47
【问题描述】:
 TableColumn<ComponentObject, Hyperlink> template_id = new TableColumn<ComponentObject, Hyperlink>("Template Id");
    template_id.setCellValueFactory(
            new PropertyValueFactory<ComponentObject, Hyperlink>("template"));

   template_id.setCellFactory(TextFieldTableCell.forTableColumn());
    template_id.setOnEditCommit(
        new EventHandler<CellEditEvent<ComponentObject, Hyperlink>>() {
            @Override
            public void handle(CellEditEvent<ComponentObject, Hyperlink> t) {
                ((ComponentObject) t.getTableView().getItems().get(
                    t.getTablePosition().getRow())
                    ).setTemplate((javafx.scene.control.Hyperlink) t.getNewValue());
            }
        }
    );

这里 setCellFactory 给出的错误是 "

The method setCellFactory(Callback<TableColumn<ComponentObject,Hyperlink>,TableCell<ComponentObject,Hyperlink>>) in 
 the type TableColumn<ComponentObject,Hyperlink> is not applicable for the arguments 
 (Callback<TableColumn<Object,String>,TableCell<Object,String>>)

"

如何解决这个问题?我想让 template_id 列可编辑..但请注意它是超链接..

【问题讨论】:

    标签: javafx hyperlink tableview tablecolumn


    【解决方案1】:

    快速而肮脏的方法是为TextFieldTableCell指定stringConverter

    StringConverter<Hyperlink> converter = new StringConverter<Hyperlink>() {
    
        @Override
        public Hyperlink fromString(String string) {
            return new Hyperlink(string);
        }
    
        @Override
        public String toString(Hyperlink hyperlink) {
            return hyperlink.getText();
        }
    }
    
    template_id.setCellFactory(TextFieldTableCell.forTableColumn(converter));
    

    不过,一般来说,用 UI 节点表示数据是一个非常糟糕的主意,这就是通过将列类型设置为 Hyperlink 所做的事情。这里可能会发生奇怪的事情。最好将数据类型设为String,并实现自己的TableCell,在不处于编辑模式时显示Hyperlink,在编辑模式时显示TextField

    【讨论】:

    • 感谢您的回答。您能否举例说明如何实现一个表格单元格,该表格单元格在不处于编辑模式时会显示超链接,而在编辑模式下会显示文本字段?
    猜你喜欢
    • 1970-01-01
    • 2020-09-29
    • 2015-12-10
    • 1970-01-01
    • 2013-12-14
    • 2020-05-07
    • 2013-10-20
    • 2020-10-21
    • 1970-01-01
    相关资源
    最近更新 更多