Не могу прокрутить VBox, полный ярлыков, используя ScrollPane - PullRequest
0 голосов
/ 19 октября 2018

В основном составление списка ярлыков, которые складываются.Когда они достигают дна, они выходят за свои границы (также должны быть за TextField) и их невозможно прокрутить.Как заставить их вести себя нормально?Метки добавляются в VBox, который находится внутри ScrollPane

Изображение с проблемой: Здесь

Скриншот SceneBuilder: Здесь

файл FXML:

    <?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.*?>
<?import javafx.scene.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.canvas.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane fx:id="root" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.view.GameUIController">
   <children>
      <SplitPane dividerPositions="0.6889632107023411" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <items>
          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
               <children>
                  <SplitPane dividerPositions="0.8737373737373737" orientation="VERTICAL" prefHeight="398.0" prefWidth="407.0">
                    <items>
                      <AnchorPane minWidth="0.0" prefWidth="160.0">
                           <children>
                              <ScrollPane fx:id="scrollPane" fitToHeight="true" fitToWidth="true" pannable="true" prefWidth="407.0" vvalue="1.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                 <content>
                                    <VBox fx:id="box" minWidth="0.0" />
                                 </content>
                              </ScrollPane>
                           </children>
                        </AnchorPane>
                      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
                           <children>
                              <TextField fx:id="textField" onAction="#enterPressed" prefHeight="20.0" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="-5.0" AnchorPane.rightAnchor="5.0" />
                           </children>
                        </AnchorPane>
                    </items>
                  </SplitPane>
               </children>
            </AnchorPane>
          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
               <children>
                  <SplitPane dividerPositions="0.5" layoutY="44.0" orientation="VERTICAL" prefHeight="398.0" prefWidth="181.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                    <items>
                      <AnchorPane fx:id="inventoryPane" minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
                           <children>
                              <Label layoutX="48.0" layoutY="30.0" text="Inventory" textAlignment="CENTER" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
                                 <font>
                                    <Font size="22.0" />
                                 </font>
                              </Label>
                           </children>
                        </AnchorPane>
                      <AnchorPane fx:id="playerPane" minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
                           <children>
                              <Label text="Player" textAlignment="CENTER">
                                 <font>
                                    <Font size="22.0" />
                                 </font>
                              </Label>
                           </children>
                        </AnchorPane>
                    </items>
                  </SplitPane>
               </children>
            </AnchorPane>
        </items>
      </SplitPane>
   </children>
</AnchorPane>

Метод добавления метки находится в другом потоке (из-за игровой механики)

@FXML
    public void text(String text1) {
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                Label label = new Label(text1);
                box.getChildren().add(label);

            }
        });
        listener = false;
        // scroll to bottom

    }

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Очевидно, мой класс GameEngine не мог видеть правильные узлы, поэтому я передал их из контроллера в методы движка.Работает как шарм сейчас

0 голосов
/ 19 октября 2018

Удалите это из fxml fitToHeight="true", и это работает, удачи, человек.

...