我希望我的Javafx组件,如标签、单独包装在vbox中的文本字段,即使调整了大小,也保持在窗口的中心。请参阅附件中的图片。目前,这些成分包含在锚烷中。下面给出了FXML文件代码。请告诉我怎么做。谢谢
组件位于中间的小尺寸窗口的图像。
全尺寸窗口,但部件位置不变。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="650.0" minWidth="850.0" prefHeight="650.0" prefWidth="850.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<HBox layoutY="-1.0" minWidth="500.0" prefHeight="653.0" prefWidth="850.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<MenuBar layoutY="-1.0" minWidth="500.0" prefHeight="30.0" prefWidth="850.0" HBox.hgrow="ALWAYS">
<menus>
<Menu mnemonicParsing="false" text="Account">
<items>
<MenuItem fx:id="menuItemCreate" mnemonicParsing="false" text="Create" />
<MenuItem fx:id="menuItemUpdate" mnemonicParsing="false" text="Update" />
<MenuItem fx:id="menuItemDelete" mnemonicParsing="false" text="Delete" />
<MenuItem fx:id="menuItemLedger" mnemonicParsing="false" text="Ledger" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="In Stock">
<items>
<MenuItem fx:id="menuItemAddItem" mnemonicParsing="false" text="Add items" />
<MenuItem fx:id="menuItemInventory" mnemonicParsing="false" text="Inventory" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Reports">
<items>
<MenuItem fx:id="menuItemSalesReport" mnemonicParsing="false" text="Sales report" />
<MenuItem fx:id="menuItemProfitReport" mnemonicParsing="false" text="Profit report" />
<MenuItem fx:id="menuItemRcvables" mnemonicParsing="false" text="Receivables" />
</items>
</Menu>
</menus>
</MenuBar>
</children>
</HBox>
<AnchorPane fx:id="anchorPaneUpdate" layoutY="30.0" prefHeight="620.0" prefWidth="850.0" visible="false">
<children>
<VBox layoutX="300.0" layoutY="150.0" prefHeight="120.0" prefWidth="60.0" spacing="30.0">
<children>
<Label alignment="BASELINE_RIGHT" prefWidth="60.0" text="Full Name" BorderPane.alignment="CENTER" VBox.vgrow="NEVER" />
<Label alignment="BASELINE_RIGHT" layoutX="10.0" layoutY="10.0" prefWidth="60.0" text="Address" VBox.vgrow="NEVER" />
<Label alignment="BASELINE_RIGHT" layoutX="10.0" layoutY="27.0" prefWidth="60.0" text="CNIC" VBox.vgrow="NEVER" />
<Label alignment="BASELINE_RIGHT" layoutX="10.0" layoutY="44.0" prefWidth="60.0" text="Mobile #" VBox.vgrow="NEVER" />
</children>
</VBox>
<VBox layoutX="400.0" layoutY="150.0" spacing="20.0">
<children>
<TextField layoutX="10.0" layoutY="10.0" promptText="Full name" />
<TextField promptText="Full name" VBox.vgrow="NEVER" />
<TextField promptText="Current address" VBox.vgrow="NEVER" />
<TextField promptText="XXXXX-XXXXXXX-X" VBox.vgrow="NEVER" />
<TextField promptText="XXXX-XXXXXXX" VBox.vgrow="NEVER" />
<Button mnemonicParsing="false" prefWidth="70.0" text="Create" />
</children>
</VBox>
<Label layoutX="50.0" layoutY="80.0" text="Update a customer account">
<font>
<Font name="Arial Narrow Bold" size="17.0" />
</font>
</Label>
</children></AnchorPane>
<AnchorPane fx:id="anchorPaneDelete" layoutY="30.0" prefHeight="620.0" prefWidth="850.0" visible="false" />
<AnchorPane fx:id="anchorPaneLedger" layoutY="30.0" prefHeight="620.0" prefWidth="850.0" visible="false" />
<AnchorPane fx:id="anchorPaneAddItem" layoutY="30.0" prefHeight="620.0" prefWidth="850.0" visible="false" />
<AnchorPane fx:id="anchorPaneInventory" layoutY="30.0" prefHeight="620.0" prefWidth="850.0" visible="false" />
<AnchorPane fx:id="anchorPaneSalesReport" layoutY="30.0" prefHeight="620.0" prefWidth="850.0" visible="false" />
<AnchorPane fx:id="anchorPaneProfitReport" layoutY="30.0" prefHeight="620.0" prefWidth="850.0" visible="false" />
<AnchorPane fx:id="anchorPanerRcvable" layoutY="30.0" prefHeight="620.0" prefWidth="850.0" visible="false" />
<VBox layoutX="300.0" layoutY="230.0" AnchorPane.bottomAnchor="199.0" AnchorPane.leftAnchor="300.0" AnchorPane.rightAnchor="301.0" AnchorPane.topAnchor="200.0">
<children>
<StackPane fx:id="pane_main" minHeight="200.0" minWidth="200.0" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS">
<children>
<Group>
<children>
<VBox spacing="10.0">
<children>
<HBox prefHeight="30.0" prefWidth="330.0" spacing="30.0">
<children>
<Label alignment="BASELINE_RIGHT" prefWidth="80.0" text="Search Name" />
<TextField minWidth="130.0" prefWidth="130.0" promptText="Enter name" />
</children>
</HBox>
<Label alignment="BASELINE_RIGHT" prefWidth="80.0" text="Details:" />
<Separator minWidth="165.0" prefHeight="10.0" prefWidth="330.0" />
<HBox spacing="30.0">
<children>
<VBox spacing="30.0">
<children>
<Label alignment="BASELINE_RIGHT" prefWidth="80.0" text="Full Name" VBox.vgrow="NEVER" />
<Label alignment="BASELINE_RIGHT" layoutX="10.0" layoutY="10.0" prefWidth="80.0" text="Address" VBox.vgrow="NEVER" />
<Label alignment="BASELINE_RIGHT" layoutX="10.0" layoutY="10.0" prefWidth="80.0" text="CNIC" VBox.vgrow="NEVER" />
<Label alignment="BASELINE_RIGHT" layoutX="20.0" layoutY="20.0" prefWidth="80.0" text="Mobile #" VBox.vgrow="NEVER" />
</children>
</VBox>
<VBox layoutX="100.0" spacing="20.0">
<children>
<TextField minWidth="130.0" prefWidth="130.0" promptText="Full name" VBox.vgrow="NEVER" />
<TextField minWidth="130.0" prefWidth="130.0" promptText="Current address" VBox.vgrow="NEVER" />
<TextField minWidth="130.0" prefWidth="130.0" promptText="XXXXX-XXXXXXX-X" VBox.vgrow="NEVER" />
<TextField minWidth="130.0" prefWidth="130.0" promptText="XXXX-XXXXXXX" VBox.vgrow="NEVER" />
<Button minWidth="70.0" mnemonicParsing="false" prefWidth="70.0" text="Create" VBox.vgrow="NEVER" />
</children>
</VBox>
</children>
</HBox>
<Label text="Update a customer account" VBox.vgrow="NEVER">
<font>
<Font name="Arial Narrow Bold" size="17.0" />
</font>
</Label>
</children>
</VBox>
</children>
</Group>
</children>
</StackPane>
</children>
</VBox>
</children>
</AnchorPane>
我很快就把它组合起来了。在你的代码中有许多锚定,中间的形式元素在不同的位置,我认为这使得一切变得更困难。相反,我使用了一个网格窗格:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?import javafx.scene.text.*?>
<VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<MenuBar>
<menus>
<Menu text="Account">
<items>
<MenuItem fx:id="menuItemCreate" text="Create" />
<MenuItem fx:id="menuItemUpdate" text="Update" />
<MenuItem fx:id="menuItemDelete" text="Delete" />
<MenuItem fx:id="menuItemLedger" text="Ledger" />
</items>
</Menu>
<Menu text="In Stock">
<items>
<MenuItem fx:id="menuItemAddItem" text="Add items" />
<MenuItem fx:id="menuItemInventory" text="Inventory" />
</items>
</Menu>
<Menu text="Reports">
<items>
<MenuItem fx:id="menuItemSalesReport" text="Sales report" />
<MenuItem fx:id="menuItemProfitReport" text="Profit report" />
<MenuItem fx:id="menuItemRcvables" text="Receivables" />
</items>
</Menu>
</menus>
</MenuBar>
<BorderPane VBox.vgrow="ALWAYS">
<top>
<Label text="Create a new customer account" BorderPane.alignment="CENTER">
<font>
<Font name="Arial Narrow Bold" size="17.0" />
</font>
<BorderPane.margin>
<Insets />
</BorderPane.margin>
</Label>
</top>
<center>
<GridPane alignment="TOP_CENTER" hgap="10.0" vgap="5.0">
<columnConstraints>
<ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" percentWidth="0.0" />
<ColumnConstraints hgrow="SOMETIMES" percentWidth="0.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<Label text="Label">
<GridPane.margin>
<Insets />
</GridPane.margin>
</Label>
<Label text="Label" GridPane.rowIndex="1" />
<Label text="Label" GridPane.rowIndex="2" />
<Label text="Label" GridPane.rowIndex="3" />
<TextField GridPane.columnIndex="1" />
<TextField GridPane.columnIndex="1" GridPane.rowIndex="1" />
<TextField GridPane.columnIndex="1" GridPane.rowIndex="2" />
<TextField GridPane.columnIndex="1" GridPane.rowIndex="3" />
</children>
<BorderPane.margin>
<Insets top="15.0" />
</BorderPane.margin>
</GridPane>
</center>
<VBox.margin>
<Insets top="15.0" />
</VBox.margin>
</BorderPane>
</children>
</VBox>
如果您希望它与顶部和/或底部重新大小,您可以调整边距。
注意:正如我在代码中看到的,有很多不可见的对象。我不知道他们是故意在那里还是只是死代码。在我的例子中,我只创建了可见的东西。
你应该把所有你喜欢的东西放在一个组的中间。然后将您的组放入StackPane中。这样,您的组始终保持在StackPane的中心。根据需要定义StackPane的大小,或者将其绑定到AnchorPane父节点,如示例所示:
在fxml中应该是这样的:
<AnchorPane>
<children>
<StackPane AnchorPane.bottomAnchor="0.0" AnchorPane.left...>
<children>
<Group StackPane.alignment="CENTER">
<children>
...
</children>
</Group>
</children>
</StackPane>
</children>
</AnchorPane>
那应该能解决你的问题。
我的应用程序的主要GUI由一个JDesktopPane组成,它位于框架内容窗格的中心,使用BorderLayout。我希望在屏幕的右上角放置一个组件,它仍然允许用户将空间中的JinternalFrame拖动到该组件的左下角。 将构件设置为BorderLayout的北部或东部似乎会填充整个空间。我想BorderLayout可能不是我想要实现的最好的布局管理器?对更好的方法有什么建议吗?
本文向大家介绍javafx AnchorPane,包括了javafx AnchorPane的使用技巧和注意事项,需要的朋友参考一下 示例 AnchorPane 是一种布局,允许将内容放置在距离其侧面特定距离的位置。 有4种设置方法和4种获取距离的方法AnchorPane。这些方法的第一个参数是child Node。设置器的第二个参数是Double要使用的值。该值可以null指示给定边没有约束。 s
问题内容: 我的应用程序的主要GUI由JDesktopPane组成,该JDesktopPane在框架的内容窗格的CENTER处使用BorderLayout。我希望在屏幕的右上方放置一个组件,该组件仍允许用户将JInternalFrames拖动到该组件的左侧和底部。 将组件设置为BorderLayout的NORTH或EAST似乎会填满整个空间。我以为BorderLayout可能不是我要完成的最佳布局
问题内容: 在编写自己的类时,是否总是有必要重写? 如果我不这样做,它将自动检查所有字段是否相同?还是只是检查两个变量是否指向同一个对象? 问题答案: 如果正在编写将要以某种方式比较其对象的类,则应重写和方法。 不提供显式方法将导致从超类继承该方法的行为,并且在超类为类的情况下,它将成为Java API规范中针对该类设定的行为。 提供方法的一般约定可以在该类的文档中找到,特别是and 方法的文档。
问题内容: 导入总是放在文件的顶部,紧随任何模块注释和文档字符串之后,以及模块全局变量和常量之前。 但是,如果我要导入的类/方法/函数仅在极少数情况下使用,那么确定在需要时进行导入肯定会更有效吗? 这不是吗? 比这更有效? 问题答案: 模块导入非常快,但不是即时的。这意味着: 将导入放在模块顶部很好,因为这是微不足道的成本,只需要支付一次即可。 将导入放在函数中将导致对该函数的调用花费更长时间。
问题内容: SQLVIEW是一个全局逻辑表,该表可能会持久化也可能不会持久化。但这仍然是一张桌子。因此,VIEW是否应始终遵循第一范式(1NF)?也就是说,没有重复的行,仅是标量类型,没有从上到下或从左到右的顺序,等等。较高的范式怎么办? 对我来说,我的应用程序“使用”存储的proc的结果,我的VIEWs被SQL查询“使用”,并且这两种用法是互斥的(即,我不使用SQL查询存储的proc的结果集,而