- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Fxml (SceneBuilder) 设计一个 Java 应用程序,我现在面临的问题是,我无法自动调整内容大小,ScrollPane 根据 GridPane (1,2) row 1,StackPane 根据到 GridPane 第 2 行以及根据 Pane 的按钮和文本字段。有什么属性(property)可以帮助我或任何替代解决方案吗?
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.StackPane?>
<AnchorPane id="ClientItemMainAnchorPane" fx:id="ClientItem_anchorPane1" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1">
<children>
<StackPane fx:id="ClientItem_stackPane1" prefHeight="600.0" prefWidth="800.0" AnchorPane.topAnchor="0.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
<children>
<GridPane fx:id="ClientItem_gridPane" >
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="517.0" minHeight="10.0" prefHeight="435.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="294.0" minHeight="10.0" prefHeight="165.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<ScrollPane fx:id="ClientItem_scrollPane" prefHeight="417.0" prefWidth="800.0">
<content>
<AnchorPane fx:id="ClientItem_AnchorPane2" prefHeight="396.0" prefWidth="736.0">
<children>
<TableView fx:id="ClientItem_tableView" layoutX="14.0" layoutY="14.0" prefHeight="382.0" prefWidth="768.0">
<columns>
<TableColumn fx:id="ClientItem_tableCol_ClientNo" prefWidth="66.0" text="Client No." />
<TableColumn fx:id="ClientItem_tableCol_Name" prefWidth="188.0" text="Name" />
<TableColumn fx:id="ClientItem_tableCol_Address" minWidth="0.0" prefWidth="220.0" text="Address" />
<TableColumn fx:id="ClientItem_tableCol_Phone" minWidth="0.0" prefWidth="108.0" text="Phone" />
<TableColumn fx:id="ClientItem_tableCol_Remaing" minWidth="0.0" prefWidth="95.0" text="Remaining" />
<TableColumn fx:id="ClientItem_tableCol_Type" prefWidth="87.0" text="Type" />
</columns>
</TableView>
</children>
</AnchorPane>
</content>
</ScrollPane>
<StackPane fx:id="ClientItem_StackPane2" prefHeight="150.0" prefWidth="200.0" GridPane.rowIndex="1">
<children>
<Pane fx:id="ClientItem_Pane" prefHeight="200.0" prefWidth="200.0">
<children>
<TextField fx:id="ClientItem_textField_ClientNo" layoutX="14.0" layoutY="42.0" prefHeight="25.0" prefWidth="69.0" />
<TextField fx:id="ClientItem_textField_Name" layoutX="80.0" layoutY="42.0" prefHeight="25.0" prefWidth="188.0" />
<TextField fx:id="ClientItem_textField_Remaining" layoutX="596.0" layoutY="42.0" prefHeight="25.0" prefWidth="95.0" />
<TextField fx:id="ClientItem_textField_Type" layoutX="691.0" layoutY="42.0" prefHeight="25.0" prefWidth="87.0" />
<TextField fx:id="ClientItem_textField_Address" layoutX="268.0" layoutY="42.0" prefHeight="25.0" prefWidth="220.0" />
<TextField fx:id="ClientItem_textField_Phone" layoutX="488.0" layoutY="42.0" prefHeight="25.0" prefWidth="108.0" />
<Label alignment="CENTER" layoutX="22.0" layoutY="14.0" text="Client No." />
<Label alignment="CENTER" contentDisplay="TOP" layoutX="158.0" layoutY="14.0" text="Name" />
<Label alignment="CENTER" layoutX="357.0" layoutY="14.0" text="Address" />
<Label alignment="CENTER" layoutX="525.0" layoutY="14.0" text="Phone" />
<Label alignment="CENTER" layoutX="615.0" layoutY="14.0" text="Remaining" />
<Label alignment="CENTER" layoutX="722.0" layoutY="14.0" text="Type" />
<Button fx:id="ClientItem_btn_Add" layoutX="307.0" layoutY="84.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="100.0" text="Add" />
<Button fx:id="ClientItem_btn_Delete" layoutX="425.0" layoutY="84.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="100.0" text="Delete" />
</children>
</Pane>
</children>
</StackPane>
</children>
</GridPane>
</children>
</StackPane>
</children>
</AnchorPane>
最佳答案
我不确定您是否有意将内容包装到多个 Pane 中,但这是不必要的。 Panes 不会自动调整其内容大小,而 AnchorPanes 仅在您调用 AnchorPane.setTopAnchor(Node)
时才会调整内容大小。 , AnchorPane.setRightAnchor(Node)
, AnchorPane.setBottomAnchor(Node)
,或AnchorPane.setLeftAnchor(Node)
.
首先是网格 Pane 。您可以设置 RowConstraints 的 VGrow 和 HGrow 属性和 ColumnConstraints分别根据 GridPane 的大小调整内容的大小。设置 RowConstraints 和 ColumnConstraints 的百分比高度和百分比宽度也将有助于将行和列保持在其首选比例。
在 ScrollPane 上,设置 fitToWidth和 fitToHeight属性以保持其子级调整大小以匹配 ScrollPane 的大小。
对于您的输入区域,HBox 比 Pane 更适合,这样您可以更轻松地调整文本字段和按钮的大小。将每个标签的图形设置为其相应的文本字段也将有助于将两者保持在一起。
这里是经过清理的 fxml 代码,以便为您提供更好的想法。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane fx:id="ClientItem_gridPane" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65"
xmlns:fx="http://javafx.com/fxml/1">
<columnConstraints>
<ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="1.7976931348623157E308" minHeight="10.0" percentHeight="73.0" prefHeight="435.0"
vgrow="ALWAYS" />
<RowConstraints fillHeight="false" maxHeight="1.7976931348623157E308" minHeight="10.0" percentHeight="10.0"
prefHeight="65.0" />
<RowConstraints fillHeight="false" maxHeight="1.7976931348623157E308" minHeight="10.0" percentHeight="17.0"
prefHeight="100.0" />
</rowConstraints>
<children>
<ScrollPane fx:id="ClientItem_scrollPane" fitToHeight="true" fitToWidth="true" prefHeight="417.0"
prefWidth="800.0" GridPane.halignment="CENTER" GridPane.hgrow="ALWAYS" GridPane.valignment="CENTER"
GridPane.vgrow="ALWAYS">
<content>
<TableView fx:id="ClientItem_tableView" prefHeight="409.0" prefWidth="778.0">
<columns>
<TableColumn fx:id="ClientItem_tableCol_ClientNo" prefWidth="103.0" text="Client No." />
<TableColumn fx:id="ClientItem_tableCol_Name" prefWidth="151.0" text="Name" />
<TableColumn fx:id="ClientItem_tableCol_Address" minWidth="0.0" prefWidth="220.0"
text="Address" />
<TableColumn fx:id="ClientItem_tableCol_Phone" minWidth="0.0" prefWidth="108.0" text="Phone" />
<TableColumn fx:id="ClientItem_tableCol_Remaing" minWidth="0.0" prefWidth="95.0"
text="Remaining" />
<TableColumn fx:id="ClientItem_tableCol_Type" prefWidth="102.0" text="Type" />
</columns>
</TableView>
</content>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</ScrollPane>
<HBox alignment="CENTER" prefHeight="77.0" prefWidth="800.0" GridPane.hgrow="ALWAYS" GridPane.rowIndex="1"
GridPane.vgrow="ALWAYS">
<children>
<Label alignment="CENTER" contentDisplay="BOTTOM" text="Client No.">
<graphic>
<TextField fx:id="ClientItem_textField_ClientNo" prefHeight="25.0" prefWidth="69.0" />
</graphic>
</Label>
<Label alignment="CENTER" contentDisplay="BOTTOM" text="Name">
<graphic>
<TextField fx:id="ClientItem_textField_Name" prefHeight="25.0" prefWidth="188.0" />
</graphic>
</Label>
<Label alignment="CENTER" contentDisplay="BOTTOM" text="Address">
<graphic>
<TextField fx:id="ClientItem_textField_Address" prefHeight="25.0" prefWidth="220.0" />
</graphic>
</Label>
<Label alignment="CENTER" contentDisplay="BOTTOM" text="Phone">
<graphic>
<TextField fx:id="ClientItem_textField_Phone" prefHeight="25.0" prefWidth="108.0" />
</graphic>
</Label>
<Label alignment="CENTER" contentDisplay="BOTTOM" text="Remaining">
<graphic>
<TextField fx:id="ClientItem_textField_Remaining" prefHeight="25.0" prefWidth="95.0" />
</graphic>
</Label>
<Label alignment="CENTER" contentDisplay="BOTTOM" text="Type">
<graphic>
<TextField fx:id="ClientItem_textField_Type" prefHeight="25.0" prefWidth="87.0" />
</graphic>
</Label>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="20.0" GridPane.hgrow="ALWAYS"
GridPane.rowIndex="2" GridPane.vgrow="ALWAYS">
<children>
<Button fx:id="ClientItem_btn_Add" mnemonicParsing="false" prefHeight="50.0" prefWidth="100.0"
text="Add" />
<Button fx:id="ClientItem_btn_Delete" mnemonicParsing="false" prefHeight="50.0" prefWidth="100.0"
text="Delete" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
</children>
</GridPane>
关于JavaFx,FXML,如何根据其 parent 自动调整内容大小: Button, StackPane,Field,Scrollpane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40356004/
我遇到过这个 html: 上面的html和这个有什么区别: 最佳答案 来自MDN page on the tag : 对于 type 的属性标签,可能的值是: 提交:按钮将表单数据提交给服务器
Button button= (Button) findViewbyID(R.id.button); 和 Button button = new Button(this); 有什么区别? 最佳答案 有
我是一名优秀的程序员,十分优秀!