setfullscreen (логическое значение) в eclipse для пользовательского интерфейса, разработанного в scene builder

#java #javafx #fxml #scenebuilder #fxmlloader

#java #javafx #fxml #scenebuilder #fxmlloader

Вопрос:

Я работаю над мини-проектом по созданию приложения beatbox, в котором я использовал JavaFX в качестве пользовательского интерфейса и scene builder для инструмента проектирования. Пока я размещал там компоненты, я вижу, что это не полноэкранный режим, но когда я связал это с Eclipse IDE. Я установил сцену как установленный полноэкранный режим, но у меня были компоненты, размещенные далеко слева, но я хотел выровнять их.

 primaryStage.setMaximized(true);

primaryStage.setMaximized(true);
  

Он должен быть автоматически выровнен, но не так, как если бы он был крайним слева.

введите описание изображения здесь

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

<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXProgressBar?>
<?import javafx.scene.Cursor?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>

 <VBox prefHeight="400.0" prefWidth="640.0" 
  xmlns="http://javafx.com/javafx/11.0.1" 
  xmlns:fx="http://javafx.com/fxml/1" fx:controller="box.firstcontroller">
 <children>
 <AnchorPane maxHeight="-1.0" maxWidth="-1.0" prefHeight="-1.0" 
 prefWidth="-1.0" style="-fx-background-color: #78909C;" 
 VBox.vgrow="ALWAYS">
  <children>
        <JFXProgressBar layoutX="203.0" layoutY="333.0" />
        <ImageView fitHeight="186.0" fitWidth="164.0" layoutX="53.0" 
  layoutY="94.0" pickOnBounds="true" preserveRatio="true">
           <cursor>
              <Cursor fx:constant="S_RESIZE" />
           </cursor>
           <image>
              <Image url="@../login.png" />
           </image>
        </ImageView>
        <ImageView fitHeight="164.0" fitWidth="151.0" layoutX="410.0" 
  layoutY="101.0" pickOnBounds="true" preserveRatio="true">
           <image>
              <Image url="@../signup.png" />
           </image>
        </ImageView>
        <Label layoutX="251.0" layoutY="36.0" text="BeatBox">
           <font>
              <Font name="Tempus Sans ITC" size="41.0" />
           </font>
        </Label>
        <JFXButton fx:id="signup" buttonType="RAISED" layoutX="68.0" 
     layoutY="314.0" onAction="#signupform" prefHeight="44.0" 
     prefWidth="115.0" ripplerFill="#752f2f" style="-fx-background-color: 
     #ae2121;" text="Sign Up" textFill="#fcfcfcf2">
           <font>
              <Font name="Webdings" size="20.0" />
           </font>
        </JFXButton>
        <JFXButton fx:id="signin" layoutX="428.0" layoutY="312.0" 
      onAction="#signinform" prefHeight="17.0" prefWidth="115.0" style="- 
      fx-background-color: #ae2121;" text="Sign In" textFill="WHITE">
           <font>
              <Font size="20.0" />
           </font>
        </JFXButton>
       </children>
      </AnchorPane>
      </children>
     </VBox>
  

~

Комментарии:

1. Все зависит от того, какие панели макета вы используете (т.Е.: VBox , HBox и т.д.). Опубликуйте свой FXML, если хотите, чтобы вам помогли разобраться с этим. Какой макет вы хотите, когда он полноэкранный?

2. я использовал vbox, это нормально или я могу попробовать другие панели макета? @Zephyr

3. Я бы рекомендовал изучить еще несколько руководств по верстке JavaFX. На самом деле у вас есть все ваши узлы в AnchorPane пределах VBox . AnchorPane Подразумевается, что другая панель макета является дочерней. Возможно, вы могли бы попробовать удалить AnchorPane и просто поместить узлы непосредственно в VBox .

Ответ №1:

На самом деле у вас возникает несколько проблем. Прежде всего, ваш root VBox имеет AnchorPane дочерний элемент, который, в свою очередь, содержит отдельные узлы.

Это приводит к тому, что вам приходится устанавливать координаты X / Y для этих узлов вручную. Это довольно плохо разработано.

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

Вот очень простой пример, который отчасти напоминает ваш макет, и он полностью масштабируемый:

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

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ProgressBar?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox alignment="TOP_CENTER" spacing="10.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1">
    <padding>
        <Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
    </padding>
    <children>
        <Label text="BeatBox">
            <font>
                <Font name="Tempus Sans ITC" size="48.0"/>
            </font>
        </Label>
        <HBox alignment="CENTER" spacing="10.0" VBox.vgrow="ALWAYS">
            <children>
                <Button mnemonicParsing="false" text="Sign Up"/>
                <ProgressBar prefWidth="200.0" progress="0.0"/>
                <Button mnemonicParsing="false" text="Sign In"/>
            </children>
        </HBox>
    </children>
</VBox>
  

Обратите внимание, что я использую HBox под заголовком для горизонтального расположения кнопок. Нет необходимости вручную устанавливать координаты или размеры; пусть JavaFX сделает всю работу за вас!

Результат:

скриншот

Иерархия конструктора сцен:

снимок экрана 2

Комментарии:

1. теперь я могу это немного понять. предоставите ли вы скриншот иерархии конструктора сцен?

2. Выполнено. Я настоятельно рекомендую прочитать руководство Oracle по работе с макетами . Это действительно невероятно полезно для правильной настройки ваших интерфейсов.