JavaSwing:透明JFXPanel
我想在AWT面板上使用一个透明的JFXPanel 在您提问之前,我真的需要在Swing应用程序中有一个透明的JFXPanel,因为最终目标是用可拖动的JavaFx窗口丰富现有的AWT应用程序 以下是我尝试过的:JavaSwing:透明JFXPanel,java,swing,javafx,transparency,Java,Swing,Javafx,Transparency,我想在AWT面板上使用一个透明的JFXPanel 在您提问之前,我真的需要在Swing应用程序中有一个透明的JFXPanel,因为最终目标是用可拖动的JavaFx窗口丰富现有的AWT应用程序 以下是我尝试过的: public class JavaFXTest { private static void initAndShowGUI() { // Java FX Panel JFXPanel fxPanel = new JFXPanel();
public class JavaFXTest {
private static void initAndShowGUI() {
// Java FX Panel
JFXPanel fxPanel = new JFXPanel();
BorderPane root = new BorderPane();
root.setStyle("-fx-background-color: transparent;");
Text text = new Text();
text.setX(40);
text.setY(100);
text.setFont(new Font(25));
text.setText("Welcome JavaFX!");
root.setCenter(text);
Scene scene = new Scene(root);
scene.setFill(javafx.scene.paint.Color.TRANSPARENT);
fxPanel.setBounds(0, 0, 1280, 720);
fxPanel.setScene(scene);
fxPanel.setOpaque(false);
// AWT Panel
Button button = new Button("AWT Button");
Label label = new Label("AWT Label");
Panel awtPanel = new Panel();
awtPanel.setBounds(0, 0, 300, 300);
awtPanel.setLayout(new GridLayout(2,1));
awtPanel.add(label);
awtPanel.add(button);
// Layered Pane
JLayeredPane layers = new JLayeredPane();
layers.add(fxPanel, 1);
layers.add(awtPanel, 2);
// Main Panel
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(layers, BorderLayout.CENTER);
// Main Window
JFrame frame = new JFrame("Swing and JavaFX");
frame.getContentPane().add(mainPanel);
frame.setSize(1280, 720);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
initAndShowGUI();
}
});
}
}
我希望在仍然看到AWT元素的情况下,只保留JFXPanel中的文本,但JFXPanel背景仍然不透明。Swing的第一条规则:不要将AWT和Swing混合使用。当您将JavaFX添加到此鸡尾酒中时,您会增加第三级头痛。请尝试使用fxPanel.setBackground(新颜色(0,0,0,0));