不显示Swing应用程序的玻璃窗格中的JavaFX组件

时间:2016-07-13 16:51:10

标签: java swing javafx

我有一个用Swing编写的简单应用程序,它还允许您使用按钮启用/禁用其他JavaFX功能。现在我只想显示这些功能。

我正在为JavaFX组件使用一个玻璃窗格,并且具有以下actionPerformed方法,该方法在每次单击按钮时为新图层生成一个组件(用于测试目的)。

@Override
public void actionPerformed(ActionEvent e) {
    if (fx) {
        // display FX components
        newTest = new FXVersion();
        newTest.start(i);
        layers.add(newTest.panel, new Integer(i));
        i++;
        layers.setVisible(true);
    } else {
        // Hide FX stuff
        layers.setVisible(false);
    }
    fx= !fx;
}

分层窗格定义为:

layers = new JLayeredPane();
...
frame.setGlassPane(layers);    

在我的FXVersion.java中,我尝试使用以下代码设置场景并显示任何内容:

public class FXVersion {

    JFXPanel panel;

    public FXVersion() {
    }

    public void start(int i) {
        panel = new JFXPanel();
        Point origin = new Point(250 + i * 10, 100 + i * 10);
        Rectangle r = new Rectangle(origin.x, origin.y, 140, 140);
        r.setFill(Color.CADETBLUE);

        Group root = new Group();
        Scene scene = new Scene(root, 800, 300);
        scene.setFill(Color.BLACK);
        root.getChildren().add(r);
        panel.setScene(scene);
    }
}

没有任何反应。我没有错误甚至警告,只是没有面板出现。

我知道这是场景的问题而不是其他任何问题,因为如果我用Swing替换JavaFX的东西,它就可以正常工作,例如。

public class FXVersion {
    JLabel panel;

    public FXVersion() {
    }  

    public void start(int i) {
        panel = new JLabel();
        Point origin = new Point(250 + i * 10, 100 + i * 10);
        panel = new JLabel("BOOM " + i);
        panel.setVerticalAlignment(JLabel.TOP);
        panel.setHorizontalAlignment(JLabel.CENTER);
        panel.setOpaque(true);
        panel.setBounds(origin.x, origin.y, 140, 140);
    }
}

显示一系列标签,每个标签与前一个标签重叠,每次点击“激活”按钮时都会有一个标签。

编辑: 我也尝试过使用SwingUtilities和Platform.runLater(将它放在Application线程上),但这也无济于事。

我认为问题在于设置玻璃窗格,因为代码按预期工作,当我只是在包含所有Swing内容的面板底部添加JFXpanel时,作为另一个组件。但是,这没有达到预期的覆盖效果。

0 个答案:

没有答案