【发布时间】:2025-12-28 09:25:17
【问题描述】:
我喜欢旧的 Java 小程序。但是因为我真的很喜欢 JFX 的工作方式,所以我想用它写一些游戏(甚至是游戏制作系统,谁知道呢?),但我希望能够将它们发布在我的网站上。怎么做呢?
【问题讨论】:
我喜欢旧的 Java 小程序。但是因为我真的很喜欢 JFX 的工作方式,所以我想用它写一些游戏(甚至是游戏制作系统,谁知道呢?),但我希望能够将它们发布在我的网站上。怎么做呢?
【问题讨论】:
是的,您可以将 JavaFX GUI 嵌入到基于 Swing 的 JApplet 中。您可以通过使用JFXPanel 来做到这一点 - 它本质上是 Swing 和 JavaFX 面板之间的适配器。
完整示例:
设置 JavaFX GUI 的 FXApplet 类:
public class FXApplet extends JApplet {
protected Scene scene;
protected Group root;
@Override
public final void init() { // This method is invoked when applet is loaded
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initSwing();
}
});
}
private void initSwing() { // This method is invoked on Swing thread
final JFXPanel fxPanel = new JFXPanel();
add(fxPanel);
Platform.runLater(new Runnable() {
@Override
public void run() {
initFX(fxPanel);
initApplet();
}
});
}
private void initFX(JFXPanel fxPanel) { // This method is invoked on JavaFX thread
root = new Group();
scene = new Scene(root);
fxPanel.setScene(scene);
}
public void initApplet() {
// Add custom initialization code here
}
}
还有一个测试实现:
public class MyFXApplet extends FXApplet {
// protected fields scene & root are available
@Override
public void initApplet() {
// this method is called once applet has been loaded & JavaFX has been set-up
Label label = new Label("Hello World!");
root.getChildren().add(label);
Rectangle r = new Rectangle(25,25,250,250);
r.setFill(Color.BLUE);
root.getChildren().add(r);
}
}
或者,您可以使用FXApplet gist,其中还包含一些文档。
【讨论】:
【讨论】: