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

时间:2019-04-12 13:40:19

标签: javafx-8

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

1 个答案:

答案 0 :(得分:0)

当我正确获得链接的图像时,您要么需要垂直“拆分”表格行的一个单元格,要么分别为TabelView实现“行跨度”之类的东西– TableView不支持这两种功能-box –或者您需要创建一个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或伪代码的形式阅读它。背后的想法是:

  • TableCell是带标签的,因此您可以使用Graphic属性获取TabelCell内显示的任何Node或Node图
  • 重要提示:将表格单元格设置为GRAPHIC_ONLY
  • 其余是标准的JavaFX TableCell管道(...当单元格需要为空时,请不要忘记这种情况!)
  • 只要您只需要在单个单元格中显示两行文本,最好使用Label实例。仅在需要单元格编辑时才使用TextField –在这种情况下,您将需要一些不同的方法。
  • 仍然需要做的事情:您可以在CSS中完成在图像中绘制的水平线。也许您最好通过表格单元格背景解决这些问题,而不是在标签之间留一个间距,而不要在上方标签的底部边框处解决。
  • 一种更通用的舒展方法是将行跨度添加到表视图中,这将使您节省CSS来获取呈现细节。但这也意味着更多的工作;-)

我希望这会有所帮助–请随时询问是否还有其他问题。