从Swing GUI内部打开新的条形图窗口(JavaFX)

从Swing GUI内部打开新的条形图窗口(JavaFX),java,swing,window,javafx,bar-chart,Java,Swing,Window,Javafx,Bar Chart,当我点击按钮(在swing jar应用程序中)时,如何打开一个新的条形图窗口(JavaFX) 我已经有了一个带有按钮处理程序的运行GUI,但是我无法将Oracle()中的示例与按钮连接起来,这样当我单击按钮时条形图就会打开 我正在使用桌面Java开发工具包(版本7更新40,64位)和EclipseJuno 基本上我试过这个: ... BarChartSample chart = new BarChartSample(); Stage stage = new Stage(); chart.star

当我点击按钮(在swing jar应用程序中)时,如何打开一个新的条形图窗口(JavaFX)

我已经有了一个带有按钮处理程序的运行GUI,但是我无法将Oracle()中的示例与按钮连接起来,这样当我单击按钮时条形图就会打开

我正在使用桌面Java开发工具包(版本7更新40,64位)和EclipseJuno

基本上我试过这个:

...
BarChartSample chart = new BarChartSample();
Stage stage = new Stage();
chart.start(stage);
...

最简单的方法是使用swing中的窗口(包含图表的窗口)进行操作

如果这样做,代码将如下所示:

JFrame frame = new JFrame("Chart");
final JFXPanel fxPanel = new JFXPanel();
frame.add(fxPanel);
BarChart<String, Number> chart = getChart();
之后,您应该将图表添加到fxPanel,因为javaFx是线程安全的,所以您必须使用Platform.runLater:

Platform.runLater(new Runnable() {
   @Override
   public void run() {
      BarChartSample chart = new BarChartSample();
      fxPanel.setScene(new Scene(chart));
   }
});
希望有帮助


编辑:

图表应该是这样的:

JFrame frame = new JFrame("Chart");
final JFXPanel fxPanel = new JFXPanel();
frame.add(fxPanel);
BarChart<String, Number> chart = getChart();
同样,这是因为javaFx是线程安全的

以及创建它的方法:

public BarChart<String, Number> getChart() {
        final CategoryAxis xAxis = new CategoryAxis();
        final NumberAxis yAxis = new NumberAxis();
        final BarChart<String, Number> bc = new BarChart<String, Number>(xAxis,
                yAxis);
        bc.setTitle("Country Summary");
        xAxis.setLabel("Country");
        yAxis.setLabel("Value");

        XYChart.Series series1 = new XYChart.Series();
        series1.setName("2003");
        series1.getData().add(new XYChart.Data(austria, 25601.34));
        series1.getData().add(new XYChart.Data(brazil, 20148.82));
        series1.getData().add(new XYChart.Data(france, 10000));
        series1.getData().add(new XYChart.Data(italy, 35407.15));
        series1.getData().add(new XYChart.Data(usa, 12000));

        XYChart.Series series2 = new XYChart.Series();
        series2.setName("2004");
        series2.getData().add(new XYChart.Data(austria, 57401.85));
        series2.getData().add(new XYChart.Data(brazil, 41941.19));
        series2.getData().add(new XYChart.Data(france, 45263.37));
        series2.getData().add(new XYChart.Data(italy, 117320.16));
        series2.getData().add(new XYChart.Data(usa, 14845.27));

        XYChart.Series series3 = new XYChart.Series();
        series3.setName("2005");
        series3.getData().add(new XYChart.Data(austria, 45000.65));
        series3.getData().add(new XYChart.Data(brazil, 44835.76));
        series3.getData().add(new XYChart.Data(france, 18722.18));
        series3.getData().add(new XYChart.Data(italy, 17557.31));
        series3.getData().add(new XYChart.Data(usa, 92633.68));

        Scene scene = new Scene(bc, 800, 600);
        bc.getData().addAll(series1, series2, series3);
        return bc;
    }
public条形图getChart(){
最终CategoryAxis xAxis=新CategoryAxis();
最终数字axis yAxis=新数字axis();
最终条形图bc=新条形图(xAxis,
雅克西斯);
bc.setTitle(“国家概要”);
xAxis.setLabel(“国家”);
yAxis.setLabel(“值”);
XYChart.Series系列1=新的XYChart.Series();
系列1.集合名称(“2003”);
series1.getData().add(新的XYChart.Data(奥地利,25601.34));
series1.getData().add(新的XYChart.Data(巴西,20148.82));
series1.getData().add(新的XYChart.Data(法国,10000));
series1.getData().add(新的XYChart.Data(意大利,35407.15));
series1.getData().add(新的XYChart.Data(美国,12000));
XYChart.Series系列2=新的XYChart.Series();
序列2.集合名称(“2004”);
series2.getData().add(新的XYChart.Data(奥地利,57401.85));
series2.getData().add(新的XYChart.Data(巴西,41941.19));
series2.getData().add(新的XYChart.Data(法国,45263.37));
series2.getData().add(新的XYChart.Data(意大利,117320.16));
series2.getData().add(新的XYChart.Data(美国,14845.27));
XYChart.Series系列3=新的XYChart.Series();
系列3.集合名称(“2005”);
series3.getData().add(新的XYChart.Data(奥地利,45000.65));
series3.getData().add(新的XYChart.Data(巴西,44835.76));
series3.getData().add(新的XYChart.Data(法国,18722.18));
series3.getData().add(新的XYChart.Data(意大利,17557.31));
series3.getData().add(新的XYChart.Data(美国,92633.68));
场景=新场景(bc,800600);
bc.getData().addAll(系列1、系列2、系列3);
返回bc;
}

谢谢。我从上面发布的链接中选取了第一个示例,并将其放入
BarChartSample.java
。但是代码的问题是
newscene(chart)
不适用于类型
BarChartSample
的参数。我做错了什么?图表应该是类节点,而不是应用程序。小心点。所以实际上你应该在场景中添加“bc”而不是图表,从那个例子中,我编辑了原始答案,这样你就可以看到你应该添加什么作为图表。