如何将两个TextField放在TableView的单个行中

问题描述 投票:0回答:1

我需要从数据库中获取一些信息并将它们放在表中。我不能把这两个文字放在一行。请帮我。 I wont to create TableView like this image. anyone has idea ??

javafx-8
1个回答
0
投票

当我获得正确的链接图像时,您需要垂直“分割”一个表格行的单元格,分别为TabelView实现类似“行跨度”的内容 - 这两种情况都是TableView不支持开箱即用的 - 或者您需要创建一个CellFactory来生成自定义TableCell,例如,在VBox中呈现两个标签。不知道你的数据是什么样的,方法是这样的:

theTableColumn.setCellFactory(column -> {
  return new TableCell<YourDataClass, YourDataFieldType>() {
    private VBox vbox;
    private Label upperLabel = new Label();
    private Label lowerLabel = new Label();

    {
        vbox = new VBox(upperLabel, lowerLabel);
        this.setGraphic(this.vbox);
        this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
    }

    @Override
    protected void updateItem(YourDataFieldType item, boolean empty) {
        super.updateItem(item, empty);

        if (item == null || empty) { 
             upperLabel.setText(null);
             lowerLabel.setText(null);
        } else {
             upperLabel.setText("Here goes the upper text (row)");
             lowerLabel.setText("Here goes the lower text (row)");
        }
    }
};

});

这只是我通常如何在TableView中解决特殊渲染任务的快速介绍,请将其作为一个scetch或伪代码阅读。背后的想法是:

  • Table Cell是Labeled,因此您可以使用Graphic属性获取Table Cell中显示的任何节点或节点图
  • 重要说明:将表格单元格设置为GRAPHIC_ONLY
  • 其余的是标准的JavaFX TableCell管道(...不要忘记当单元格需要为空时的情况!)
  • 只要您只需要在单个单元格中显示两行文本,就可以更好地使用Label实例。只有在需要进行单元格编辑时才会使用TextField - 在这种情况下,您需要一些不同的方法。
  • 还需要做什么:您在图像中绘制的水平线可以按CSS完成。也许你最好通过表格单元格背景来解决它,标签之间的间距比上面标签的底部边框更好。
  • shure的一种更通用的方法是将行跨越添加到表视图中,它将为您提供渲染详细信息的CSS。但它也意味着“一点点”更多的工作;-)

我希望,这有帮助 - 请随时询问是否还有其他问题。

© www.soinside.com 2019 - 2024. All rights reserved.