2

我是 Java 和 JavaFX 的新手,有一个问题。我在 JavaFX 中有一个具有单个阶段/场景的应用程序。它有多个选项卡。在其中一个选项卡中,我希望用户能够在文本字段中输入一些值,按下提交按钮,然后在同一场景中显示一个 lineChart。我没有运气让这个工作。
运行应用程序时会显示一个空折线图,但我无法弄清楚如何让一系列数据出现。

这是 Controller 类中的简单测试代码,用于在按下提交按钮时代码执行的方法:

@FXML
private void getEngDataPlot(ActionEvent event)  {

    lineChart.setTitle("Test charting");
    //defining a series
    XYChart.Series series = new XYChart.Series();
    series.setName("My Test Data");
    //populating the series with data
    series.getData().add(new XYChart.Data(1, 23));
    series.getData().add(new XYChart.Data(2, 14));
    series.getData().add(new XYChart.Data(3, 15));
    series.getData().add(new XYChart.Data(4, 24));
    series.getData().add(new XYChart.Data(5, 34));
    series.getData().add(new XYChart.Data(6, 36));
    series.getData().add(new XYChart.Data(7, 22));
    series.getData().add(new XYChart.Data(8, 45));
    series.getData().add(new XYChart.Data(9, 43));
    series.getData().add(new XYChart.Data(10, 17));
    series.getData().add(new XYChart.Data(11, 29));
    series.getData().add(new XYChart.Data(12, 25));

    lineChart.getData().add(series);

}

我必须在这种方法中“做”其他事情来加载场景中的图表吗?我看到了 show.stage(); 在示例中,但是在我执行此方法时,我的应用程序正在运行并且我已经显示了“阶段”-不是吗?我显然错过了一些基本的东西应该如何挂在一起,但我不知道是什么。

谢谢,请原谅我的无知。

4

2 回答 2

0

很可能您的图表轴设置不正确,因此您看不到新数据。尝试添加下一行:

lineChart.getXAxis().setAutoRanging(true);
lineChart.getYAxis().setAutoRanging(true);

或者看下一个例子:

public class ChartUpdate extends Application {
    @Override
    public void start(Stage primaryStage) {
        //random axis here
        final LineChart lineChart = new LineChart(new NumberAxis(1, 22, 0.5), new NumberAxis(1, 22, 0.5));
        lineChart.getXAxis().setAutoRanging(true);
        lineChart.getYAxis().setAutoRanging(true);
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                lineChart.setTitle("Test charting");
                //defining a series
                XYChart.Series series = new XYChart.Series();
                series.setName("My Test Data");
                //populating the series with data
                series.getData().add(new XYChart.Data(1, 23));
                series.getData().add(new XYChart.Data(2, 14));
                series.getData().add(new XYChart.Data(3, 15));
                series.getData().add(new XYChart.Data(4, 24));
                series.getData().add(new XYChart.Data(5, 34));
                series.getData().add(new XYChart.Data(6, 36));
                series.getData().add(new XYChart.Data(7, 22));
                series.getData().add(new XYChart.Data(8, 45));
                series.getData().add(new XYChart.Data(9, 43));
                series.getData().add(new XYChart.Data(10, 17));
                series.getData().add(new XYChart.Data(11, 29));
                series.getData().add(new XYChart.Data(12, 25));

                lineChart.getData().add(series);
            }
        });

        VBox root = new VBox();
        root.getChildren().addAll(btn, lineChart);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) { launch(); }
}
于 2012-08-07T10:26:22.657 回答
0

也许您已经找到了问题的答案,但我相信这可能会在未来对其他人有所帮助。

在 Scene Builder 中创建 LineChart 时,请注意有两种类型的 LineChart:LineChart 和 LineChart (N x N)。第一个具有类别 x 轴(您只能在其中定义类别以显示为字符串)。第二个有一个数字 x 轴。

因此,如果您想显示数据与数据,就像在您展示的示例中一样,您应该使用 LineChart (N x N)。

希望能帮助到你。

于 2013-08-26T15:15:52.660 回答