如何从java调用JavaFX_图表应用程序并更新其值
我创建了一个gui应用程序,它读取一些数据并将它们存储在一个文件中。我想从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
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();
}
});
}
}