从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吗?
答
如果你真的需要这样做,为什么不使用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();
你需要Swing吗? JFreeChart在JavaFX中工作,例如(https://*.com/a/44688314/230513)和[示例](https://*.com/a/44967809/230513)。 – trashgod