从Swing更新JavaFx图表

问题描述:

我有一个绘制图表的JavaFx应用程序。从Swing更新JavaFx图表

public class Test2 extends Application {  
    @Override public void start(Stage stage) { 
    final SwingNode chartSwingNode = new SwingNode(); 
    chartSwingNode.setContent(
     new ChartPanel(generatePieChart())  
    ); 

    stage.setScene(
     new Scene(new StackPane(chartSwingNode)) 
    ); 
    stage.show(); 
    } 

    private JFreeChart generatePieChart() { 
    DefaultPieDataset dataSet = new DefaultPieDataset(); 
    dataSet.setValue("China",  1344.0); 
    dataSet.setValue("India",  1241.0); 
    dataSet.setValue("United States", 310.5); 

    return ChartFactory.createPieChart(
     "Population 2011", dataSet, true, true, false 
    ); 
    } 

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

然后我使用按钮从Swing调用它。

_btnStart.addActionListener(new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     new Thread() { 
     @Override 
     public void run() { 
      Application.launch(Test2.class); 

     } 
     }.start(); 
    } 
}); 

当我点击按钮,图表会显示。现在我想更新图表。我如何将价值传递给Test2课程并更新图表?我应该使用JFXPanel吗?

+1

你需要Swing吗? JFreeChart在JavaFX中工作,例如(https://*.com/a/44688314/230513)和[示例](https://*.com/a/44967809/230513)。 – trashgod

如果你真的需要这样做,为什么不使用Singleton

创建一个类ChartSingleton.java:

import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.data.general.DefaultPieDataset; 

public class ChartSingleton { 
    private static ChartSingleton instance = null; 
    private static ChartPanel chartPanel = null; 

    private ChartSingleton() { 
    chartPanel = new ChartPanel(generatePieChart()); 
    } 

    public static ChartSingleton getInstance() { 
    if (instance == null) { 
     instance = new ChartSingleton(); 
    } 
    return instance; 
    } 

    private JFreeChart generatePieChart() { 
    DefaultPieDataset dataSet = new DefaultPieDataset(); 
    dataSet.setValue("China",  1344.0); 
    dataSet.setValue("India",  1241.0); 
    dataSet.setValue("United States", 310.5); 

    return ChartFactory.createPieChart(
      "Population 2011", dataSet, true, true, false 
    ); 
    } 

    public ChartPanel getChartPanel() { 
    return chartPanel; 
    } 
} 

,然后更换行:

chartSwingNode.setContent(new ChartPanel(generatePieChart())); 

有了这个:

ChartSingleton chartSingleton = ChartSingleton.getInstance(); 
chartSwingNode.setContent(chartSingleton.getChartPanel()); 

现在,您可以更新/通过修改图表ChartSingleton类使用:

chartSingleton.youNewMethodToModifyOrUpdateTheChart();