Java,使用javaFX作为主菜单,然后切换到游戏本身的JFrame
我在这里询问是否可以使用JavaFX作为我游戏的主菜单,然后切换到游戏本身的JFrame 我之所以想这样做,是因为我知道如何用JavaFX而不是JFrame制作非常花哨的游戏菜单,而且JavaFX对我来说也比JFrame更花哨Java,使用javaFX作为主菜单,然后切换到游戏本身的JFrame,java,swing,javafx,jframe,Java,Swing,Javafx,Jframe,我在这里询问是否可以使用JavaFX作为我游戏的主菜单,然后切换到游戏本身的JFrame 我之所以想这样做,是因为我知道如何用JavaFX而不是JFrame制作非常花哨的游戏菜单,而且JavaFX对我来说也比JFrame更花哨 我将非常感谢您给我的任何帮助。这是可以做到的:您只需要确保在所有事情上使用正确的线程。特别是,确保在AWT事件调度线程上启动Swing应用程序 下面是一个简单的例子 斯温加普: import java.awt.BorderLayout; import javax.swi
我将非常感谢您给我的任何帮助。这是可以做到的:您只需要确保在所有事情上使用正确的线程。特别是,确保在AWT事件调度线程上启动Swing应用程序 下面是一个简单的例子 斯温加普:
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class SwingApp extends JFrame {
public SwingApp() {
setLayout(new BorderLayout());
add(new JLabel("This is the Swing App", JLabel.CENTER), BorderLayout.CENTER);
JButton quitButton = new JButton("Exit");
quitButton.addActionListener(e -> System.exit(0));
add(quitButton, BorderLayout.SOUTH);
setSize(600, 600);
setLocationRelativeTo(null);
setVisible(true);
}
}
然后
import javax.swing.SwingUtilities;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class LaunchSwingFromFX extends Application {
@Override
public void start(Stage primaryStage) {
Platform.setImplicitExit(false);
Button launch = new Button("Launch");
launch.setOnAction(e -> {
SwingUtilities.invokeLater(SwingApp::new);
primaryStage.hide();
});
StackPane root = new StackPane(launch);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这是可以做到的:你只需要确保你使用了正确的线程。特别是,确保在AWT事件调度线程上启动Swing应用程序 下面是一个简单的例子 斯温加普:
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class SwingApp extends JFrame {
public SwingApp() {
setLayout(new BorderLayout());
add(new JLabel("This is the Swing App", JLabel.CENTER), BorderLayout.CENTER);
JButton quitButton = new JButton("Exit");
quitButton.addActionListener(e -> System.exit(0));
add(quitButton, BorderLayout.SOUTH);
setSize(600, 600);
setLocationRelativeTo(null);
setVisible(true);
}
}
然后
import javax.swing.SwingUtilities;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class LaunchSwingFromFX extends Application {
@Override
public void start(Stage primaryStage) {
Platform.setImplicitExit(false);
Button launch = new Button("Launch");
launch.setOnAction(e -> {
SwingUtilities.invokeLater(SwingApp::new);
primaryStage.hide();
});
StackPane root = new StackPane(launch);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
是的,只需在
SwingUtilities.invokeLater(…)
中创建并显示JFrame
,那么为什么不使用JavaFX处理所有事情呢?Swing已过时。@James_D我是否在同一个类中创建javaFX和Jframe?完全由您决定,只需确保您在FX应用程序线程上创建任何javaFXStage
s,并在AWT事件调度线程上创建Jframe
。好的,但我认为您在找麻烦。您真的希望FX应用程序线程和AWT事件线程同时运行吗?理论上,应用程序的每个部分都应该接收适当的事件。在实践中,您可能会遇到各种各样的错误,您希望事件出现在应用程序的一个部分,而它出现在另一个部分。您的应用程序将很难维护,并且可能容易出现错误。我强烈建议您只使用一个平台或另一个平台。是的,只需在SwingUtilities.invokeLater(…)
中创建并显示JFrame
,那么您为什么不使用JavaFX来处理所有问题呢?Swing已过时。@James_D我是否在同一个类中创建javaFX和Jframe?完全由您决定,只需确保您在FX应用程序线程上创建任何javaFXStage
s,并在AWT事件调度线程上创建Jframe
。好的,但我认为您在找麻烦。您真的希望FX应用程序线程和AWT事件线程同时运行吗?理论上,应用程序的每个部分都应该接收适当的事件。在实践中,您可能会遇到各种各样的错误,您希望事件出现在应用程序的一个部分,而它出现在另一个部分。您的应用程序将很难维护,并且可能容易出现错误。我强烈建议您只使用一个或另一个平台。非常感谢James_D和所有commented@NightX:点击左边的,你可以接受这个答案。接受你的回答谢谢你的詹姆斯和所有commented@NightX:单击左侧的可接受此答案。已接受您的答案