sshahine / JFoenix

JavaFX Material Design Library
MIT License
6.29k stars 1.06k forks source link

MouseClicked once,JFXDrawer.setOnDrawerOpening() will be performed twice. #1099

Closed XShandow closed 3 years ago

XShandow commented 4 years ago

Controller.class

@ViewController(value = "/gui/main/index.fxml", title = "KiTool")
public class IndexController {

    public static final Log logger = LogFactory.getLog(IndexController.class);

    @FXMLViewFlowContext
    private ViewFlowContext appFlowContext;

    @ViewNode
    private StackPane root;

    @ViewNode
    private StackPane pkiBurgerContainer;
    @ViewNode
    private JFXHamburger pkiBurger;

    @ViewNode
    private StackPane emvBurgerContainer;
    @ViewNode
    private JFXHamburger emvBurger;

    @ViewNode
    private JFXDrawersStack drawerPane;

    private JFXPopup toolbarPopup;

    /**
     * init gui when loaded.
     */
    @PostConstruct
    public void init() throws Exception {
        logger.info("IndexController init()...");

        Flow contentFlow = new Flow(WelcomeController.class);

        final FlowHandler contentFlowHandler = contentFlow.createHandler(appFlowContext);
        appFlowContext.register("ContentFlowHandler", contentFlowHandler);
        appFlowContext.register("ContentFlow", contentFlow);

        bindBurgerToDrawer(pkiBurger, pkiBurgerContainer, PKISideMenuController.class);
        bindBurgerToDrawer(emvBurger, emvBurgerContainer, EMVSideMenuController.class);
    }

    private void bindBurgerToDrawer(JFXHamburger titleBurger, StackPane burgerContainer, Class<?> startViewControllerClass) {

        JFXDrawer drawer = new JFXDrawer();
        drawer.setDefaultDrawerSize(230);
        drawer.setId("pkidrawer");
        drawer.setDirection(JFXDrawer.DrawerDirection.LEFT);

​        
​        Flow sideMenuFlow = new Flow(startViewControllerClass);
​        FlowHandler sideMenuFlowHandler = sideMenuFlow.createHandler(appFlowContext);
​        try {
​            drawer.setSidePane(sideMenuFlowHandler.start(new ExtendedAnimatedFlowContainer(Duration.millis(320), SWIPE_LEFT)));
​        } catch (FlowException ex) {
​            ex.printStackTrace();
​        }
​    

        drawer.setOnDrawerOpening(e -> {
            System.out.println("**" + drawer.getId() + "" + titleBurger.getId());
            final Transition animation = titleBurger.getAnimation();
            animation.setRate(2);
            animation.play();
        });

        drawer.setOnDrawerClosing(e -> {
            System.out.println("==" + titleBurger.getId());
            final Transition animation = titleBurger.getAnimation();
            animation.setRate(-1);
            animation.play();
        });

        burgerContainer.setOnMouseClicked(e -> {
            System.out.println("--" + burgerContainer.getId() + " is clicked:" + drawer.getId());
            if (drawer.isClosed() || drawer.isClosing()) {
                drawer.open();

            } else {
                drawer.close();

            }
        });

        drawerPane.addDrawer(drawer);
    }

}

FXML file

<StackPane fx:id="root" xmlns:fx="http://javafx.com/fxml/1"
           xmlns="http://javafx.com/javafx/2.2">
    <!-- Header -->
    <BorderPane>
        <top>
            <VBox spacing="20">
                <JFXToolbar>
                    <leftItems>
                        <JFXRippler styleClass="KT-top-menu-JFXRippler">
                            <StackPane fx:id="pkiBurgerContainer">
                                <HBox>
                                    <Label>PKI</Label>
                                    <JFXHamburger fx:id="pkiBurger" styleClass="KT-top-menu-JFXHamburger">
                                        <HamburgerSlideCloseTransition/>
                                    </JFXHamburger>
                                </HBox>
                            </StackPane>
                        </JFXRippler>

                        <JFXRippler styleClass="KT-top-menu-JFXRippler">
                            <StackPane fx:id="emvBurgerContainer">
                                <HBox>
                                    <Label>EMV</Label>
                                    <JFXHamburger fx:id="emvBurger" styleClass="KT-top-menu-JFXHamburger">
                                        <HamburgerBackArrowBasicTransition/>
                                    </JFXHamburger>
                                </HBox>
                            </StackPane>
                        </JFXRippler>
                    </leftItems>

                    <rightItems>

                    </rightItems>
                </JFXToolbar>
            </VBox>
        </top>

        <!-- Content Area -->
        <center>
            <JFXDrawersStack fx:id="drawerPane">

            </JFXDrawersStack>

        </center>

    </BorderPane>

</StackPane>

when I click emvBurgerContainer(second), The program runs normally。

--emvBurgerContainer is clicked:  emvdrawer

**emvdrawer   emvBurger

when I click pkiBurgerContainer(first),the program runs unnormally。

--pkiBurgerContainer is clicked:  pkidrawer

**pkidrawer   pkiBurger

**emvdrawer   emvBurger   

JDK:Java_8u152_64 JFoenix:8.0.3

XShandow commented 4 years ago

444

jfoenixadmin commented 4 years ago

Hello, can you test using the latest JFoenix version 8.0.9?

stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.