Javafx Jfoenix Drawer блокирует узлы за оверлеем - PullRequest
0 голосов
/ 04 сентября 2018

Привет команда 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);
}

Образцы изображений:

Главная страница приложения

Содержимое ящика

1 Ответ

0 голосов
/ 15 сентября 2018

У меня была похожая проблема с той, которую вы описали. Однако в моем случае это был не оверлей, а сам ящик. Оверлей, когда он виден, будет охватывать весь пользовательский интерфейс, когда он будет виден, поэтому я быстро определил, что это не моя проблема, так как только кнопки слева от пользовательского интерфейса не получали события. Вместо этого казалось, что затронутая область ограничена размером выдвижного ящика по умолчанию.

Есть два решения, которые я мог видеть:

  1. Переместите кнопки над выдвижным ящиком в структуре пользовательского интерфейса. Это не сработало для меня, поскольку кнопки в моем пользовательском интерфейсе перекрывали расширенный ящик.

  2. Задайте для ящика отрицательное смещение и измените ограничения в зависимости от состояния ящика во время выполнения. Мой ящик находится слева от пользовательского интерфейса внутри AnchorPane, поэтому установите отрицательное значение левой привязки, чтобы начать с (-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);
    });
    

Надеюсь, это поможет!

...