【问题标题】:Animated menubar in javafxjavafx中的动画菜单栏
【发布时间】:2015-07-31 14:24:04
【问题描述】:

有没有人有在 javafx 中创建动画菜单栏的经验。我需要在鼠标移到顶部时显示菜单栏,并在鼠标离开此区域(顶部 25 像素)时隐藏。目前我有一些解决方案,但它看起来不像我想要的那么漂亮,只是显示/隐藏没有任何滑动)))

root.setOnMouseMoved(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            if (event.getY() < 25){
                menuBar.setVisible(true);
                root.setTopAnchor(clipPane, 35.0); 
            } else {
                if (menuBar.isVisible()) {
                    menuBar.setVisible(false);
                }

                if (menuFile.isShowing()) {
                    try {
                        Robot bot = new Robot();
                        bot.mousePress(InputEvent.BUTTON1_MASK);
                        bot.mouseRelease(InputEvent.BUTTON1_MASK);
                    } catch (AWTException ex) {
                    }
                }

                root.setTopAnchor(clipPane, 0.0);
            }
        }
    });

那么有人可以提供有关如何为显示/隐藏菜单栏添加滑动效果的信息吗?

【问题讨论】:

标签: java javafx menubar


【解决方案1】:

经过几个小时的搜索,通过 ParallelTransitions 自己实现))

root.setOnMouseMoved(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            if ((event.getY() <= 35) && (!fMenuVisible)) {
                TranslateTransition clipPane_Slide = new TranslateTransition(Duration.millis(300), clipPane);
                clipPane_Slide.setFromY(0);
                clipPane_Slide.setToY(35);
                clipPane_Slide.setCycleCount(1);
                clipPane_Slide.setAutoReverse(false);

                TranslateTransition menuBar_Slide = new TranslateTransition(Duration.millis(300), menuBar);
                menuBar_Slide.setFromY(0);
                menuBar_Slide.setToY(35);
                menuBar_Slide.setCycleCount(1);
                menuBar_Slide.setAutoReverse(false);

                ParallelTransition ShowMenu = new ParallelTransition(); 
                ShowMenu.getChildren().addAll(clipPane_Slide, menuBar_Slide);
                ShowMenu.setCycleCount(1);
                ShowMenu.playFromStart();

                fMenuVisible = true;
            } else if ((event.getY() > 35) && (fMenuVisible)) {
                TranslateTransition clipPane_Slide = new TranslateTransition(Duration.millis(300), clipPane);
                clipPane_Slide.setFromY(35);
                clipPane_Slide.setToY(0);
                clipPane_Slide.setCycleCount(1);
                clipPane_Slide.setAutoReverse(false);

                TranslateTransition menuBar_Slide = new TranslateTransition(Duration.millis(300), menuBar);
                menuBar_Slide.setFromY(35);
                menuBar_Slide.setToY(0);
                menuBar_Slide.setCycleCount(1);
                menuBar_Slide.setAutoReverse(false);

                ParallelTransition HideMenu = new ParallelTransition(); 
                HideMenu.getChildren().addAll(clipPane_Slide, menuBar_Slide);
                HideMenu.setCycleCount(1);
                HideMenu.playFromStart();

                fMenuVisible = false;
            }
        }
    });

【讨论】:

  • 我正在尝试实现这一点。什么是 clipPane ?
  • 你好,我的朋友。窗格 clipPane = new Pane();
猜你喜欢
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多