gpt4 book ai didi

java - 将 Javafx 嵌入到 Swing 应用程序中

转载 作者:行者123 更新时间:2023-12-04 04:54:51 24 4
gpt4 key购买 nike

我有一个巨大的 Swing 应用程序,我想将 javafx 嵌入其中。
我多次尝试这样做(通过遵循 oracle 教程等),并且只有在我声明一个新的 JFrame 以使用 JFXPanel 组件时才成功。但是,我不想使用新的 Frame,我想将我的 Javafx 代码合并到 Swing 应用程序的根 JFrame 中。

我们可以将 javaFX 组件嵌入 JPanel 而不是 JFrame 吗?
如果答案是肯定的,为什么我没有成功?

有可能是错误的代码示例:

该类直接扩展了JPanel,并在EDT中调用了初始化方法

private void initialize(){

setLayout(new BorderLayout());

final JFXPanel fxPanel = new JFXPanel();
JPanel jp = new JPanel();

jp.add(fxPanel);
jp.setVisible(true);
jp.setSize(500, 300);
jp.setBackground(Color.CYAN);

Platform.runLater(new Runnable() {
@Override
public void run() {
initFX(fxPanel);
}
});

add(createButtonsPanel(), BorderLayout.NORTH);
add(jp,BorderLayout.CENTER);
}


private static void initFX(JFXPanel fxPanel) {
Scene scene = initScene();
fxPanel.setScene(scene);
}


private static Scene initScene(){

Group root = new Group();
Scene scene = new Scene(root, javafx.scene.paint.Color.ALICEBLUE );
Text text = new Text();
text.setX(40);
text.setY(100);
text.setFont(new Font(25));
text.setText("Welcome JavaFX!");
root.getChildren().add(text);
return (scene);

}

最佳答案

拿走你的代码,把它变成一个 SSCCE - 一切似乎都有效,这表明问题出在你的代码中的其他地方。您可以使用此代码重现您的问题吗?

import java.awt.Color;
import java.awt.Container;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.*;
import javafx.scene.text.*;
import javax.swing.*;

public class SwingJFXCombo {

public static Container initialize(){

final JFXPanel fxPanel = new JFXPanel();
JPanel jp = new JPanel();

jp.add(fxPanel);
jp.setVisible(true);
// Really shouldn't do this, so commented it out
//jp.setPreferredSize(new Dimension(500, 300));
jp.setBackground(Color.CYAN);

Platform.runLater(new Runnable() {
@Override
public void run() {
initFX(fxPanel);
}
});

return jp;
}

private static void initFX(JFXPanel fxPanel) {
Scene scene = initScene();
fxPanel.setScene(scene);
}

private static Scene initScene(){
Group root = new Group();
Scene scene = new Scene(root, javafx.scene.paint.Color.ALICEBLUE );
Text text = new Text();
text.setX(40);
text.setY(100);
text.setFont(new Font(25));
text.setText("Welcome JavaFX!");
root.getChildren().add(text);
return (scene);
}

public static void main(String[] args){
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.add(SwingJFXCombo.initialize());
frame.pack();
}
}

关于java - 将 Javafx 嵌入到 Swing 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16891778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com