JavaFX JFXDrawer не скрывается полностью при запуске программы - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь добавить JFXDrawer в свою программу, и мне это удалось, однако у меня есть только одна проблема, из-за которой я не могу понять, почему это происходит. Когда моя программа впервые запускает JFXDrawer, он должен быть полностью скрыт и отображаться, когда я нажимаю кнопку гамбургера, но если вы посмотрите на изображение ниже, выделено красное пространство (которое я добавил в качестве цвета фона для ящика, чтобы сделать его ясным), что пробел всегда отображается при запуске программы, но когда я нажимаю на гамбургер, чтобы открыть и закрыть, он возвращает нормально скрытый, это только при запуске.

jfxdrawer image

This is how its working now: image

NavDrawer.f xml

<VBox style="-fx-background-color: black;" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="navigationdrawertest.NavDrawerController">
   <children>
      <JFXButton alignment="BASELINE_LEFT" focusTraversable="false" graphicTextGap="15.0"  prefHeight="32.0" prefWidth="220.0" ripplerFill="WHITE" text="Button 1" textFill="#c1fff9">         
         <padding>
            <Insets bottom="5.0" left="30.0" top="5.0" />
         </padding>
      </JFXButton>
      <JFXButton alignment="BASELINE_LEFT" focusTraversable="false" graphicTextGap="15.0" layoutX="10.0" layoutY="10.0"  prefHeight="32.0" prefWidth="220.0" ripplerFill="WHITE" text="Button 2" textFill="#c1fff9">         
         <padding>
            <Insets bottom="5.0" left="30.0" top="5.0" />
         </padding>
      </JFXButton>
      <JFXButton alignment="BASELINE_LEFT" focusTraversable="false" graphicTextGap="15.0" layoutX="10.0" layoutY="45.0"  prefHeight="32.0" prefWidth="220.0" ripplerFill="WHITE" text="Button 3" textFill="#c1fff9">         
         <padding>
            <Insets bottom="5.0" left="30.0" top="5.0" />
         </padding>
      </JFXButton>
      <JFXButton alignment="BASELINE_LEFT" focusTraversable="false" graphicTextGap="15.0" layoutX="10.0" layoutY="80.0"  prefHeight="32.0" prefWidth="220.0" ripplerFill="WHITE" text="Button 4" textFill="#c1fff9">         
         <padding>
            <Insets bottom="5.0" left="30.0" top="5.0" />
         </padding>
      </JFXButton>
      <JFXButton alignment="BASELINE_LEFT" focusTraversable="false" graphicTextGap="15.0" layoutX="10.0" layoutY="115.0"  prefHeight="32.0" prefWidth="220.0" ripplerFill="WHITE" text="Button 5" textFill="#c1fff9">
         <padding>
            <Insets bottom="5.0" left="30.0" top="5.0" />
         </padding>
      </JFXButton>
   </children>
</VBox>

NavDrawerController

public class NavDrawerController implements Initializable {


    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

    
}

Я также пробовал использовать стековую панель и границу внутри нее, как я видел в некоторых руководствах, но все еще получаю ту же проблему.

К сожалению, примеров использования JFXDrawer не так много, в чем я не уверен почему.

1 Ответ

0 голосов
/ 16 июня 2020

К счастью, мне удалось решить эту проблему, но я не уверен, что это лучший способ решить эту проблему. Если у кого-то есть лучшее решение, поделитесь им. поэтому я просто добавил эту строку кода в MainController:

drawer.setMinWidth(0);

, поэтому MainController должен выглядеть так:

@Override
    public void initialize(URL url, ResourceBundle rb) {
    try {
            // TODO
            VBox box = FXMLLoader.load(getClass().getResource("NavDrawer.fxml"));
            drawer.setSidePane(box); 
            drawer.setMinWidth(0); // this is the new code added

        } catch (IOException ex) {
            Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, null, ex);
        }
        HamburgerSlideCloseTransition task = new HamburgerSlideCloseTransition(hamburger);
        task.setRate(-1);
        hamburger.addEventHandler(MouseEvent.MOUSE_CLICKED, (Event event) -> {
            drawer.toggle();
        });
        drawer.setOnDrawerOpening((event) -> {
            task.setRate(task.getRate() * -1);
            task.play();
            drawer.setMinWidth(220);
        });
        drawer.setOnDrawerClosed((event) -> {
            task.setRate(task.getRate() * -1);
            task.play();
            drawer.setMinWidth(0);
        });    
    } }
...