繁体   English   中英

从Swing更新JavaFx图表

[英]Update JavaFx chart from 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吗?

如果您确实需要采用这种方式,为什么不使用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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM