JavaFX: переместить элемент на размер окна (рабочей области) - PullRequest
0 голосов
/ 31 января 2019

У меня есть простое приложение на JavaFX, оно на самом деле состоит из нескольких панелей и кнопок.Я не могу понять, как заставить кнопку двигаться при изменении размера сцены.Итак, я хочу, чтобы левая нижняя кнопка всегда была видна даже при изменении размера окна.enter image description here

вот обзор узлов:

enter image description here

здесь fxml:

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

<?import com.jfoenix.controls.JFXButton?>
<?import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView?>
<?import javafx.geometry.Insets?>
<?import javafx.geometry.Point3D?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>


<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="750.0" prefWidth="1000.0" xmlns="http://javafx.com/javafx/9.0.4" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <BorderPane layoutX="89.0" layoutY="64.0" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <left>
            <AnchorPane prefHeight="150.0" prefWidth="150.0" style="-fx-background-color: #4059a9 #4059a9;" BorderPane.alignment="CENTER">
               <children>
                  <AnchorPane prefHeight="750.0" prefWidth="75.0" style="-fx-background-color: #2b4496 #2b4496;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="75.0" AnchorPane.topAnchor="0.0">
                     <children>
                        <VBox alignment="CENTER" prefHeight="750.0" prefWidth="75.0" spacing="35.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                           <children>
                              <JFXButton contentDisplay="GRAPHIC_ONLY" prefWidth="82.0" VBox.vgrow="ALWAYS">
                                 <graphic>
                                    <FontAwesomeIconView fill="WHITE" glyphName="HOME" size="2em" />
                                 </graphic>
                                 <VBox.margin>
                                    <Insets top="25.0" />
                                 </VBox.margin>
                              </JFXButton>
                              <JFXButton contentDisplay="GRAPHIC_ONLY" prefWidth="75.0">
                                 <VBox.margin>
                                    <Insets bottom="10.0" top="600.0" />
                                 </VBox.margin>
                                 <graphic>
                                    <FontAwesomeIconView fill="WHITE" glyphName="SIGN_OUT" size="2em" />
                                 </graphic>
                                 <opaqueInsets>
                                    <Insets />
                                 </opaqueInsets>
                              </JFXButton>
                           </children>
                        </VBox>
                     </children>
                     <rotationAxis>
                        <Point3D />
                     </rotationAxis>
                  </AnchorPane>
               </children>
            </AnchorPane>
         </left>
      </BorderPane>
   </children>
</AnchorPane>

Ответы [ 3 ]

0 голосов
/ 31 января 2019
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>


<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
   <left>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <Button mnemonicParsing="false" text="Button" />
            <AnchorPane VBox.vgrow="ALWAYS" />
            <Button mnemonicParsing="false" text="Button" />
         </children>
      </VBox>
   </left>
</BorderPane>

Добавьте пустую панель в середину с VGROW, установленным на ВСЕГДА.

enter image description here enter image description here

0 голосов
/ 31 января 2019

Похоже, что вы могли бы достичь того же эффекта, используя BorderPane и VBox с наложенными фоновыми заливками и Region, который всегда увеличивается между вашими кнопками:

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

<?import com.jfoenix.controls.JFXButton?>
<?import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.layout.Region?>

<BorderPane prefHeight="750.0" prefWidth="1000.0"
    xmlns="http://javafx.com/javafx/9.0.4"
    xmlns:fx="http://javafx.com/fxml/1">
    <left>
        <VBox alignment="TOP_LEFT"
            spacing="35.0"
            style="-fx-background-color: #2b4496, #4059a9; -fx-background-insets: 0, 0 0 0 75;"> <!-- overlay 2 backgrounds produce rectangles -->
            <padding>
                <Insets right="75.0" />
            </padding>
            <children>
                <JFXButton contentDisplay="GRAPHIC_ONLY" prefWidth="82.0"  VBox.vgrow="NEVER">
                    <graphic>
                        <FontAwesomeIconView fill="WHITE" glyphName="HOME" size="2em" />
                     </graphic>
                     <VBox.margin>
                        <Insets top="25.0" />
                     </VBox.margin>
                  </JFXButton>
                  <Region VBox.vgrow="ALWAYS" /> <!-- filler -->
                  <JFXButton contentDisplay="GRAPHIC_ONLY" prefWidth="75.0" VBox.vgrow="NEVER">
                     <VBox.margin>
                        <Insets bottom="10.0" />
                     </VBox.margin>
                     <graphic>
                        <FontAwesomeIconView fill="WHITE" glyphName="SIGN_OUT" size="2em" />
                     </graphic>
                 </JFXButton>
            </children>
        </VBox>
    </left>
</BorderPane>
0 голосов
/ 31 января 2019

Ваша проблема - поля, которые вы установили на Buttons.Следуйте этой схеме.Я использовал HBox в качестве корневого узла.

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

<?import com.jfoenix.controls.JFXButton?>
<?import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>


<HBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="700.0" prefWidth="1000.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <VBox alignment="CENTER" prefWidth="75.0" style="-fx-background-color: #2b4496 #2b4496;">
         <children>
            <JFXButton contentDisplay="GRAPHIC_ONLY" prefWidth="82.0" VBox.vgrow="ALWAYS">
               <graphic>
                  <FontAwesomeIconView fill="WHITE" glyphName="HOME" size="2em" />
               </graphic>
               <VBox.margin>
                  <Insets top="25.0" />
               </VBox.margin>
            </JFXButton>
            <Button maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" opacity="0.0" VBox.vgrow="ALWAYS" />
            <JFXButton contentDisplay="GRAPHIC_ONLY" prefWidth="75.0">
               <VBox.margin>
                  <Insets bottom="25.0" />
               </VBox.margin>
               <graphic>
                  <FontAwesomeIconView fill="WHITE" glyphName="SIGN_OUT" size="2em" />
               </graphic>
               <opaqueInsets>
                  <Insets />
               </opaqueInsets>
            </JFXButton>
         </children>
      </VBox>
      <VBox prefHeight="200.0" prefWidth="75.0" style="-fx-background-color: #4059a9 #4059a9;" />
      <AnchorPane prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
   </children>
</HBox>

enter image description here

enter image description here

...