2017-08-14 8 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

スイングが必要ですか? JFreeChartは[example](https://stackoverflow.com/a/44688314/230513)と[example](https://stackoverflow.com/a/44967809/230513)のJavaFXで動作します。 – 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; 
    } 
} 

次にライン置き換える:今、あなたはを通して、あなたのチャートを変更/更新することができ

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

:これにより

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

を使用しているChartSingletonクラス:

chartSingleton.youNewMethodToModifyOrUpdateTheChart(); 
関連する問題