我使用JavaFX创建了一个swing GUI和一个图形。我想通过单击swing GUI上的按钮打开图表。我的代码如下。谢谢您的帮助。
这就是我必须从swing GUI中打开FX GUI。
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Test Graph = new Test();
Graph.GrpahScreen();
}
});
FX类
public class Test extends Application {
@Override
public void start(Stage stage) {
// TODO
}
public static void main(String args []) {
launch(args);
}
}
答案 0 :(得分:4)
Application
类表示JavaFX应用程序。由于您正在编写Swing应用程序(其中嵌入了JavaFX内容),因此创建Application
子类是没有意义的。
此外,强烈建议不在同一应用程序中同时使用JavaFX Stage
和Swing JFrame
。您应该将JavaFX内容放在JFXPanel
中,并在JFXPanel
中显示JFrame
。您需要小心遵守两个工具包的线程限制:像往常一样,在AWT事件派发线程上创建Swing组件必须,并且JavaFX组件必须在JavaFX应用程序线程上创建。 JFXPanel
documentation中详细介绍了这一点,但实质上是:
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JFrame frame = new JFrame();
JFXPanel jfxPanel = new JFXPanel();
Platform.runLater(() -> {
Parent root = ... ; // create JavaFX content, can be in a separate class
Scene scene = new Scene(root);
jfxPanel.setScene(scene);
});
frame.add(jfxPanel);
frame.setSize(...);
frame.setVisible(true);
}
});