如何从java调用JavaFX_Charts应用程序并更新其值

时间:2014-09-08 14:41:35

标签: javafx

我创建了一个gui应用程序,它读取一些数据并将它们存储在一个文件中。我想从java调用JavaFX_Charts应用程序创建并在屏幕上显示来自文件的数据。

该文件包含两列,每列axis's的编号为1。我读了这个文件并创建了两个

List<Integer> l1 = new ArrayList<Integer>();
List<Integer> l2 = new ArrayList<Integer>();

如何调用JavaFX_Charts并使用2个列表中的值更新它?

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;

public class JavaFX_Charts extends Application {
    private void init(Stage primaryStage) {
        Group root = new Group();
        primaryStage.setScene(new Scene(root));
        root.getChildren().add(createChart());
    }

    protected LineChart<Number, Number> createChart() {
        final NumberAxis xAxis = new NumberAxis();
        final NumberAxis yAxis = new NumberAxis();
        final LineChart<Number, Number> lc = new LineChart<Number, Number>(
                xAxis, yAxis);
        // setup chart

        lc.setTitle("Basic LineChart");
        xAxis.setLabel("X Axis");
        yAxis.setLabel("Y Axis");
        // add starting data
        XYChart.Series<Number, Number> series = new XYChart.Series<Number, Number>();
        series.setName("Data Series 1");
        series.getData().add(new XYChart.Data<Number, Number>(20d, 50d));
        series.getData().add(new XYChart.Data<Number, Number>(40d, 80d));
        series.getData().add(new XYChart.Data<Number, Number>(50d, 90d));
        series.getData().add(new XYChart.Data<Number, Number>(70d, 30d));
        series.getData().add(new XYChart.Data<Number, Number>(170d, 122d));
        lc.getData().add(series);
        return lc;
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        init(primaryStage);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

1 个答案:

答案 0 :(得分:0)

我创建了两个列表并用随机数据填充,然后解析列表以将数据填入图表

显示列表中填充数据的示例

    import java.util.ArrayList;
    import java.util.List;

    import javafx.application.Application;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.chart.LineChart;
    import javafx.scene.chart.NumberAxis;
    import javafx.scene.chart.XYChart;
    import javafx.stage.Stage;

    public class JavaFX_Charts extends Application {
        private void init(Stage primaryStage) {
            Group root = new Group();
            primaryStage.setScene(new Scene(root));
            root.getChildren().add(createChart());
        }

        protected LineChart<Number, Number> createChart() {
            final NumberAxis xAxis = new NumberAxis();
            final NumberAxis yAxis = new NumberAxis();
            final LineChart<Number, Number> lc = new LineChart<Number, Number>(
                    xAxis, yAxis);
            // setup chart
            lc.setTitle("Basic LineChart");
            xAxis.setLabel("X Axis");
            yAxis.setLabel("Y Axis");
            // add starting data
            List<Integer> l1 = new ArrayList<Integer>();
            List<Integer> l2 = new ArrayList<Integer>();

            //Populating the List with Random data
            for(int i=0; i<10; i++){
                l1.add((int) (Math.random()*10*i));
                l2.add((int) (Math.random()*10*i));
            }

            XYChart.Series<Number, Number> series = new XYChart.Series<Number, Number>();
            series.setName("Data Series 1");

            //Fetching data from the list
            /**
             * Using the size of l1, taking into 
             * consideration that l1 and l2 are of same size
             */
            for(int i=0; i<l1.size(); i++){
                series.getData().add(new XYChart.Data<Number, Number>(l1.get(i), l2.get(i)));
            }

            lc.getData().add(series);
            return lc;
        }

        @Override
        public void start(Stage primaryStage) throws Exception {
            init(primaryStage);
            primaryStage.show();
        }

        public static void main(String[] args) {
            launch(args);
        }
    }

根据评论更新

要在Swing应用程序中运行相同的东西,您只需使用JFXPanel并使用setScene()将JavaFX场景设置到其中

Swing示例

import java.util.ArrayList;
import java.util.List;

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class JFX_Charts_Swing {
    private static void initAndShowGUI() {
        // This method is invoked on Swing thread
        JFrame frame = new JFrame("Chart FX");
        final JFXPanel fxPanel = new JFXPanel();
        frame.add(fxPanel);
        frame.setBounds(400, 400, 600, 600);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);

        // To run on the Javafx thread
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                initFX(fxPanel);
            }
        });
    }

    private static void initFX(JFXPanel fxPanel) {
        Group root = new Group();
        Scene scene = new Scene(root);
        root.getChildren().add(createChart());
        fxPanel.setScene(scene);
    }

    protected static LineChart<Number, Number> createChart() {
        final NumberAxis xAxis = new NumberAxis();
        final NumberAxis yAxis = new NumberAxis();
        final LineChart<Number, Number> lc = new LineChart<Number, Number>(
                xAxis, yAxis);
        // setup chart
        lc.setTitle("Basic LineChart");
        xAxis.setLabel("X Axis");
        yAxis.setLabel("Y Axis");
        // add starting data
        List<Integer> l1 = new ArrayList<Integer>();
        List<Integer> l2 = new ArrayList<Integer>();

        // Populating the List with Random data
        for (int i = 0; i < 10; i++) {
            l1.add((int) (Math.random() * 10 * i));
            l2.add((int) (Math.random() * 10 * i));
        }

        XYChart.Series<Number, Number> series = new XYChart.Series<Number, Number>();
        series.setName("Data Series 1");

        // Fetching data from the list
        /**
         * Using the size of l1, taking into consideration that l1 and l2 are of
         * same size
         */
        for (int i = 0; i < l1.size(); i++) {
            series.getData().add(
                    new XYChart.Data<Number, Number>(l1.get(i), l2.get(i)));
        }

        lc.getData().add(series);
        return lc;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                initAndShowGUI();
            }
        });
    }
}