2017-08-14 39 views
0

我有一個繪製圖表的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://stackoverflow.com/a/44688314/230513)和[示例](https://stackoverflow.com/a/44967809/230513)。 – trashgod

回答

1

如果你真的需要這樣做,爲什麼不使用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();