Javafx Jfoenix Drawer阻塞了Overlay后面的节点

时间:2018-09-04 19:29:05

标签: javafx drawer jfoenix

您好,StackOverflow小组,

我是Javafx的新手,在阅读了该主题之后,我决定开始构建我的第一个应用程序。

我的应用程序有一个主页和一个左侧面板上的hamburgerDrawer。我遇到的麻烦是,当我加载应用程序时,抽屉叠加层会阻塞其下面的节点。我在关闭抽屉时尝试使用方法SetDefaultDrawerSize()0,并使用SetDefaultDrawerSize(900)的特定大小,但没有成功...抽屉仍然阻止下面的内容。

非常感谢您的帮助...谢谢。...

@Override
public void initialize(URL url, ResourceBundle rb) {
try {
  AnchorPane drawerContent = FXMLLoader.load(getClass().getResource("/materialitemtracker/view/AnchorPaneHamburgerDrawerView.fxml"));

  hamburgerDrawer.setSidePane(drawerContent);
  hamburgerDrawer.setOverLayVisible(true);
  hamburgerDrawer.setResizableOnDrag(true);
  HamburgerBackArrowBasicTransition burgerTask = new HamburgerBackArrowBasicTransition(hamburger);
  burgerTask.setRate(-1);
  hamburger.addEventHandler(MouseEvent.MOUSE_PRESSED, (e) -> {

    burgerTask.setRate(burgerTask.getRate() * -1);
    burgerTask.play();

    if (hamburgerDrawer.isShown()) {

      hamburgerDrawer.close();
      // hamburgerDrawer.setDefaultDrawerSize(0);
    } else {
      hamburgerDrawer.open();
      // hamburgerDrawer.setDefaultDrawerSize(900);
    }
  });

} catch (IOException ex) {
  Logger.getLogger(AnchorPaneMainController.class.getName()).log(Level.SEVERE, null, ex);
}

样本图像:

Application Main Page

Drawer content

1 个答案:

答案 0 :(得分:1)

我遇到了与您描述的问题类似的问题。但是在我的情况下,这不是覆盖物,而是抽屉本身。可见时的覆盖层将覆盖可见时的整个UI,因此我迅速确定这不是我的问题,因为只有UI左侧的按钮没有接收事件。相反,似乎受影响的区域受到我设置的默认抽屉大小的限制。

我可以看到两种解决方案:

  1. 将鼠标按钮移至UI结构中抽屉上方。这对我来说不起作用,因为按钮将与用户界面中展开的抽屉重叠。

  2. 为抽屉提供一个负偏移,并在运行时根据抽屉状态更改约束。我的抽屉位于AnchorPane内部UI的左侧,因此设置负的左锚定值开头(对于此示例为-255)。然后根据状态,执行以下操作。

    drawer.setOnDrawerOpening(event ->
    {
        AnchorPane.setRightAnchor(drawer, 0.0);
        AnchorPane.setLeftAnchor(drawer, 0.0);
        AnchorPane.setTopAnchor(drawer, 0.0);
        AnchorPane.setBottomAnchor(drawer, 0.0);
    });
    
    drawer.setOnDrawerClosed(event ->
    {
        AnchorPane.clearConstraints(drawer);
        AnchorPane.setLeftAnchor(drawer, -255.0);
        AnchorPane.setTopAnchor(drawer, 0.0);
        AnchorPane.setBottomAnchor(drawer, 0.0);
    });
    

希望这会有所帮助!