2

私は Java と JavaFX が初めてで、質問があります。JavaFX で単一のステージ/シーンを持つアプリケーションがあります。複数のタブがあります。これらのタブの 1 つで、ユーザーがテキスト フィールドにいくつかの値を入力し、送信ボタンを押して、同じシーンに 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 に答える