如何从java调用JavaFX_图表应用程序并更新其值

如何从java调用JavaFX_图表应用程序并更新其值,javafx,Javafx,我创建了一个gui应用程序,它读取一些数据并将它们存储在一个文件中。我想从java调用JavaFX_图表应用程序来创建并在屏幕上显示文件中的数据 该文件包含两列,每个轴的编号为一。我读了文件并创建了两个 List<Integer> l1 = new ArrayList<Integer>(); List<Integer> l2 = new ArrayList<Integer>(); List l1=new ArrayList(); 列表l2=新的A

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

该文件包含两列,每个轴的编号为一。我读了文件并创建了两个

List<Integer> l1 = new ArrayList<Integer>();
List<Integer> l2 = new ArrayList<Integer>();
List l1=new ArrayList();
列表l2=新的ArrayList();
我如何调用JavaFX_图表并使用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);
    }
}
导入javafx.application.application;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.chart.LineChart;
导入javafx.scene.chart.NumberAxis;
导入javafx.scene.chart.XYChart;
导入javafx.stage.stage;
公共类JavaFX_图表扩展了应用程序{
私有void init(阶段primaryStage){
组根=新组();
primaryStage.setScene(新场景(根));
root.getChildren().add(createChart());
}
受保护的折线图createChart(){
最终数字axis xAxis=新数字axis();
最终数字axis yAxis=新数字axis();
最终线形图lc=新线形图(
xAxis,yAxis);
//设置图
lc.setTitle(“基本线形图”);
xAxis.setLabel(“X轴”);
yAxis.setLabel(“Y轴”);
//添加起始数据
XYChart.Series系列=新的XYChart.Series();
系列名称(“数据系列1”);
series.getData().add(新的XYChart.Data(20d,50d));
series.getData().add(新的XYChart.Data(40d,80d));
series.getData().add(新的XYChart.Data(50d,90d));
series.getData().add(新的XYChart.Data(70d,30d));
series.getData().add(新的XYChart.Data(170d,122d));
lc.getData().add(系列);
返回信用证;
}
@凌驾
public void start(Stage primaryStage)引发异常{
初始阶段;
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

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

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

import java.util.ArrayList;
导入java.util.List;
导入javafx.application.application;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.chart.LineChart;
导入javafx.scene.chart.NumberAxis;
导入javafx.scene.chart.XYChart;
导入javafx.stage.stage;
公共类JavaFX_图表扩展了应用程序{
私有void init(阶段primaryStage){
组根=新组();
primaryStage.setScene(新场景(根));
root.getChildren().add(createChart());
}
受保护的折线图createChart(){
最终数字axis xAxis=新数字axis();
最终数字axis yAxis=新数字axis();
最终线形图lc=新线形图(
xAxis,yAxis);
//设置图
lc.setTitle(“基本线形图”);
xAxis.setLabel(“X轴”);
yAxis.setLabel(“Y轴”);
//添加起始数据
列表l1=新的ArrayList();
列表l2=新的ArrayList();
//用随机数据填充列表

对于(int i=0;ii如果有两个包含数据的列表,可以在列表上运行循环,并使用
series.getData().add()将它们添加到图表中
我知道如何在JavaFX_图表中创建和填充列表,但我想用swing创建的GUI中的2个列表作为参数来调用对象JavaFX_图表。添加了更多信息。请在提问时尽量澄清问题。在提问的问题中,您没有提到您想要的任何地方d它可以在Swing应用程序上运行
    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);
        }
    }
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();
            }
        });
    }
}