Я хочу использовать прозрачную панель JFXPanel поверх панели AWT.
Прежде чем вы спросите, мне действительно нужно иметь прозрачную JFXPanel в приложении Swing, поскольку конечной целью является обогащение существующего приложения AWT с помощью перетаскиваемого JavaFx windows.
Вот что я пробовал:
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();
}
});
}
}
Я хотел бы просто получить текст из JFXPanel, все еще видя элементы AWT, но поскольку это фон JFXPanel, остается непрозрачным.