有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JavaFX:在窗口上移动元素(阶段)调整大小

我在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) 个答案

  1. # 1 楼答案

    <?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设置为ALWAYS

    enter image description here enter image description here

  2. # 2 楼答案

    你的问题是你在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

  3. # 3 楼答案

    看起来您可以通过使用带有重叠背景填充的BorderPaneVBox以及始终在按钮之间插入的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>