簡體   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