Java Swing: прозрачная панель JFX - PullRequest
2 голосов
/ 06 января 2020

Я хочу использовать прозрачную панель 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, остается непрозрачным.

...