5

在我的应用程序中,我想要一个带有 JavaFX 控制的 Swing 面板。为此,我使用了一个 JLayeredPane,我在其中插入了一个 JPanel 和一个 JFXPanel,其中的场景未填充(又名setFill(null))。但是没有事件通过 JFXPanel 的透明区域传递到 Swing 面板。

这个问题有什么解决办法吗?

谢谢

这里有一个例子:

    public class TestJavaFX
    {
        private static JButton button;
        private static JFXPanel javafxPanel;

        public static void main(String[] args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    initAndShowGUI();
                }
            });
        }

        public static void initAndShowGUI()
        {
            JFrame frame = new JFrame("Swing application");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            javafxPanel = new JFXPanel();
            button = new JButton("Swing - Push me");

            JLayeredPane pane = new JLayeredPane();
            pane.add(button, JLayeredPane.DEFAULT_LAYER);
            pane.add(javafxPanel, JLayeredPane.PALETTE_LAYER);
            pane.addComponentListener(new ComponentListener()
            {
                @Override
                public void componentShown(ComponentEvent e)
                {
                }

                @Override
                public void componentResized(ComponentEvent e)
                {
                    button.setBounds(20, 50, 150, 30);
                    javafxPanel.setBounds(0, 0, e.getComponent().getWidth(), e.getComponent().getHeight());
                }

                @Override
                public void componentMoved(ComponentEvent e)
                {
                }

                @Override
                public void componentHidden(ComponentEvent e)
                {
                }
            });

            frame.getContentPane().add(pane, BorderLayout.CENTER);

            Platform.runLater(new Runnable()
            {
                public void run()
                {
                    createScene();
                }
            });

            // Show frame.
            frame.setSize(600, 400);
            frame.setVisible(true);
        }

        private static void createScene()
        {
             Button btn = new Button();
             btn.setText("JavaFX - Push me");

             VBox pane = new VBox();
             pane.getChildren().add(btn);
             Scene scene = new Scene(pane);
             scene.setFill(null);
             javafxPanel.setScene(scene);
        }
   }
4

0 回答 0