JavaFX2.2:如何将鼠标事件转发到JLayeredPane中JFXPanel下的Swing组件?
在我的应用程序中,我希望有一个带有JavaFX控制的Swing面板。为此,我使用了一个JLayeredPane,在其中插入一个JPanel和一个JFXPanel,其中的场景没有填充(akaJavaFX2.2:如何将鼠标事件转发到JLayeredPane中JFXPanel下的Swing组件?,java,swing,javafx-2,Java,Swing,Javafx 2,在我的应用程序中,我希望有一个带有JavaFX控制的Swing面板。为此,我使用了一个JLayeredPane,在其中插入一个JPanel和一个JFXPanel,其中的场景没有填充(akasetFill(null))。但没有任何事件通过JFXPanel的透明区域传递到Swing面板 这个问题有什么解决办法吗 谢谢 这里有一个例子: public class TestJavaFX { private static JButton button; pr
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);
}
}
我认为您的问题是需要将Componenet侦听器设置为javafxPanel.addComponentListener,而不是pane.addComponentListener。试试看,告诉我发生了什么。谢谢,但我的问题不是组件的大小问题,而是不接收像鼠标事件这样的事件。我通过在JavaFX场景中添加一个事件监听器并将其发送到底层Swing组件找到了一个解决方案。但是,我希望有一个更干净的解决方案。我担心手动转换事件实际上是一种方法。我不知道还有什么更通用的事件转发机制。我是通过在互联网上搜索得出这个结论的,但我想得到确认!无论如何,谢谢。@pascal请发布您的答案并将其设置为解决方案