我正在尝试在基于摇摆的 UI 上创建一个透明的 JFXPanel。问题是事件没有像正常挥杆组件那样通过“透明”部分转发。我在下面包含了一个简单的示例。注意有3层,swing,swing,然后是jfxpanel。如果你注释掉
addItemToLayeredPanel(panel, createFXOverlay(), 7);
即使它们的 jpanel 位于底部的上方,您也可以单击这两个按钮。(仅演示效果仅适用于摇摆不适用于 JFXPanel)
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
JLayeredPane panel = new JLayeredPane();
JButton button = new JButton("Push me");
JPanel overlay = createOverlay();
addItemToLayeredPanel(panel, button, 5);
addItemToLayeredPanel(panel, overlay, 6);
addItemToLayeredPanel(panel, createFXOverlay(), 7);
frame.getContentPane().add(panel);
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private static JPanel createOverlay() {
JPanel panel = new JPanel();
panel.add(new JButton("on top"));
panel.setOpaque(false);
return panel;
}
private static JFXPanel createFXOverlay() {
JFXPanel panel = new JFXPanel();
BorderPane root = new BorderPane();
root.setStyle("-fx-background-color:transparent;");
root.setCenter(new Button("root"));
Scene scene = new Scene(root);
scene.setFill(javafx.scene.paint.Color.TRANSPARENT);
panel.setScene(scene);
panel.setOpaque(false);
return panel;
}
private static void addItemToLayeredPanel(JLayeredPane panel, JComponent item, int layer) {
item.setBounds(0,0,500,500);
panel.add(item);
panel.setLayer(item, layer);
}
}
想法?我尝试了几种将事件(通常)转发到下面的 jcomponents 的方法,但我无法让它工作。我确实找到了几个类似的问题,但在这里和这里没有解决方案