【问题标题】:Columns not displaying in TableView - javaTableView 中未显示的列 - java
【发布时间】:2019-02-25 17:19:15
【问题描述】:

我正在尝试编写一个程序,该程序使用 TableView 在 javafx gui 中显示数据库中表的内容。我有一个通用的 gui,其中有一个空的 TableView。在您决定要显示应用程序的表之后,将表名发送到中间件,该中间件从数据库中获取所有列名并将它们发送到应用程序。然后我遍历所有列名,生成一个新的 TableColumn 并添加它到TableView 并调用TableView 的refresh() 方法。使用table.getChidlren(); 我可以看到这些列已成功添加到 TableView,但是它们不会显示在 JavaFX GUI 中。它只是一直显示“表中没有列”。所有的 fx:ids 和控制器类也是正确的。

这是我的代码:

public void loadTableContent(){
    try (Socket client = new Socket(InetAddress.getLocalHost(), 667);
         ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
         ObjectInputStream ois = new ObjectInputStream(client.getInputStream())) {

        System.out.println("Sending request");
        oos.writeUTF(databaseTableComboBox.getSelectionModel().getSelectedItem().toString());
        oos.flush();

        System.out.println("reading from sever");
        String[] columnNames =  ois.readUTF().split(";");

        System.out.println("Column names received");

        for (String s: columnNames)
            table.getColumns().add(new TableColumn(s));

        table.refresh();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

【问题讨论】:

  • 检查 columnNames 是否真的是长度 > 0 的数组。如果一切顺利,则不需要 table.refresh - 如果它有所作为,则说明您的设置有问题。无论如何,请提供一个 minimal reproducible example 来证明问题。
  • “我可以看到这些列已成功添加到 TableView,但是它们不会显示在 JavaFX GUI 中。”您如何看待它们已添加到表格视图但未显示需要更多信息来解决此问题
  • 我使用了 table.getColumns() 方法并遍历了元素。所有列都在那里,但它们没有显示在 GUI 中。
  • loadTableContent 调用了什么线程? JavaFX 应用程序线程 还是某个后台线程?如果是后者,那么这可能会导致您的问题 — 切勿从 JavaFX 应用程序线程 以外的线程更新实时场景图。
  • 在JavaFX应用线程中调用

标签: java javafx tableview


【解决方案1】:

我发现了问题所在。我在 SceneBuilder 中添加了 TableView,但是我在我的代码中调用了 table = new TableView();,这只是从 SceneBuilder 中删除了一个。谢谢大家的帮助。

【讨论】:

  • 您的 sn-p 中缺少它 - 如果它在那里,有些人可能会更早发现它;)这就是为什么 minimal reproducible example 很重要..
猜你喜欢
  • 1970-01-01
  • 2017-08-23
相关资源
最近更新 更多