java - 从 Swing GUI 中打开新的条形图窗口 (JavaFX)

标签 java swing window javafx bar-chart

单击按钮(在 swing jar 应用程序内)时如何打开新的条形图窗口 (JavaFX)?

我已经有了一个带有按钮处理程序的功能性 GUI,但我无法将来自 Oracle ( http://docs.oracle.com/javafx/2/charts/bar-chart.htm ) 的示例与按钮连接,以便在我单击按钮时打开条形图。

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

基本上我试过这个:

...
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);

然后您应该将图表添加到 fxPanel,因为 javaFx 是线程安全的,您将不得不使用 Platform.runLater:

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

希望对您有所帮助!


编辑:

图表应该是这样的:

BarChart<String, Number> chart = getChart();

上一行代码应该在:

Platform.runLater(new Runnable() {
       @Override
       public void run() {
         //CODE HERE
       }
    });

同样,这是因为 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;
    }

关于java - 从 Swing GUI 中打开新的条形图窗口 (JavaFX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896908/

相关文章:

java - 从其他类指向 UI 中的对象 - Android SDK

java - 输入ENTER键不捕获

MySQL Window函数计算百分比

java - Android:索引 0 无效,大小为 0。在哪里?

java - 在 JOptionPane 中设置 JTextFields 的文本

java - 如何使用 Swing 暂停 Java 模拟

java - 更改 Java Swing 组件焦点指示器的颜色

c# - Visual Studio 2010 - 出现狂野窗口?

java - Swing GUI - 创建一个 'Settings' 窗口(正确)

java : Identifier expected error when calling a void method from another class