单击按钮后无法显示从csv表加载

时间:2019-04-13 12:42:09

标签: java csv javafx tableview

我正在使用JavaFX构建应用程序,这是我第一次使用它,因此我试图解决谷歌搜索,阅读等问题。该应用程序基本上使用REST API收集一些数据并将其存储在一些CSV文件中。后端没问题,因为我已经做到了,并且可以正常工作。

现在我正在构建界面,因此我想给用户一些选项,例如可视化表上的CSV数据。对于不同的CSV文件,会有几个不同的表。

因此,到目前为止,我的屏幕上有两个选项作为按钮,例如:“显示CSV A”,“显示CSV B”。我想做的是,单击其中之一后,更改“屏幕”(我想场景是它的技术术语),然后,带有CSV信息的表格应出现在屏幕上。 / p>

我正在尝试遵循MVC架构,因此每个屏幕和控制器都有fxml文件,用于修改信息。

我正在尝试从此处(http://java-buddy.blogspot.com/2016/06/read-csv-file-display-in-javafx.html)编写一些代码,以获取起点。这段代码仅解析CSV并将其存储到表中,有几件事我不喜欢它,但是我认为这是一个很好的示例并且很有帮助。如果执行它,它可以在自己的阶段完美运行。问题是试图使其成为应用程序流程中间场景的一部分。

这是我希望表格出现的fxml:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.Button?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<GridPane
    fx:controller="frontend.controllers.MetricasController"
    xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10"
    vgap="10">
    <padding>
        <Insets top="40" right="40" bottom="40" left="40" />
    </padding>
    <columnConstraints>
        <ColumnConstraints minWidth="100" prefWidth="100"
            maxWidth="Infinity" halignment="RIGHT">
        </ColumnConstraints>
        <ColumnConstraints minWidth="200" prefWidth="200"
            maxWidth="Infinity" hgrow="ALWAYS">
        </ColumnConstraints>
    </columnConstraints>
    <TableView fx:id="tableView" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"
        GridPane.rowSpan="1" GridPane.halignment="CENTER"></TableView>
</GridPane>

在名为MetricasController的控制器中,我试图将之前显示的URL的代码与该类集成在一起,该类为空,它仅具有表视图的FXML注释。我正在尝试在initialize方法中编写该代码的一部分(其中的部分填充表格的列)。

所以我一直在尝试,我相信问题可能在这里:

        vBox.setSpacing(10);
        vBox.getChildren().add(tableView);

        root.getChildren().add(vBox);

        primaryStage.setScene(new Scene(root, 700, 250));
        primaryStage.show();

        readCSV();

设置root.get ...之后,在设置主场景时,它不会更新我的场景,因此在屏幕上会出现一个空表。我认为使用该代码“更新” fxml中引用的表也会在屏幕上绘制它,但事实并非如此。

我也不能在fxml上写列,因为我不确定csv文件可以包含多少列。

也许有一种方法可以调用函数来绘制表,而无需在fxml或类似的文件上声明它。

总而言之,我期望得到的是这样的:

  1. 用户有两个按钮:显示选项A和B。
  2. 他单击选项A->过渡到新屏幕。
  3. 表格应显示/应该在此屏幕上显示csv信息。

谢谢。

0 个答案:

没有答案