5

私のアプリケーションでは、JavaFX コントロールを備えた Swing パネルが必要です。そのために、JPanel を挿入する JLayeredPane と、塗りつぶされていないシーン (別名 ) を含む 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