Javafx 网格窗格..无法动态添加行..没有收缩
Javafx grid pane..cannot add rows dynamically..without getting shrink
我想将 ui 节点动态添加到 gridapanes 行而不收缩..而不是收缩 gridpane 应该启用滚动(网格窗格在滚动窗格中)..但它们都没有发生。 ..
我所尝试的只是创建一个事件日历,它能够将整个月的事件显示为顶行中的天数(因此至少有 30 列)。
控制器class
package sample;
import javafx.fxml.Initializable;
import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable {
public GridPane gridPane;
@Override
public void initialize(URL location, ResourceBundle resources) {
for (int i = 0; i <= 20; i++) {
VBox box = new VBox();
Label label = new Label(Integer.toString(i));
label.setMinHeight(50);
label.prefHeight(50);
label.setMaxHeight(50);
gridPane.setGridLinesVisible(true);
label.setStyle("-fx-background-color:yellow;");
box.getChildren().add(label);
box.setAlignment(Pos.CENTER);
gridPane.add(box, 0, i);
}
Label labe2 = new Label("HelloWorld");
labe2.setMinHeight(80);
gridPane.add(labe2, 0, 15);
}
}
真的需要帮助
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"
prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="sample.Controller">
<children>
<AnchorPane layoutX="39.0" layoutY="15.0" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0"
AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<ScrollPane fitToHeight="true" fitToWidth="true" pannable="true" prefHeight="239.0" prefWidth="331.0"
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
AnchorPane.topAnchor="0.0">
<content>
<GridPane fx:id="gridPane" prefHeight="239.0" prefWidth="331.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
</rowConstraints>
</GridPane>
</content>
</ScrollPane>
</children>
</AnchorPane>
</children>
</AnchorPane>
您的 GridPane
行的 minHeight
均为 10.0
。这意味着它们在使用 ScrollPane
.
之前总是会缩小到那个尺寸
将每行的 minHeight
更改为 -Infinity
,这基本上使其与您的 prefHeight
:
匹配
<RowConstraints minHeight="-Infinity" prefHeight="30.0" vgrow="SOMETIMES" />
或者,为了在您的控制器中以编程方式设置这些约束,请在添加 VBox
:
之后添加一个新的 RowConstraints
gridPane.getRowConstraints().add(new RowConstraints(30));
解决了这个问题..而不是在场景生成器中创建网格平移..只需使用代码创建网格并通过代码设置约束...尝试在代码的执行顺序中尽早创建约束。 .
我使用场景生成器创建的网格窗格没有效果
我想将 ui 节点动态添加到 gridapanes 行而不收缩..而不是收缩 gridpane 应该启用滚动(网格窗格在滚动窗格中)..但它们都没有发生。 ..
我所尝试的只是创建一个事件日历,它能够将整个月的事件显示为顶行中的天数(因此至少有 30 列)。
控制器class
package sample;
import javafx.fxml.Initializable;
import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable {
public GridPane gridPane;
@Override
public void initialize(URL location, ResourceBundle resources) {
for (int i = 0; i <= 20; i++) {
VBox box = new VBox();
Label label = new Label(Integer.toString(i));
label.setMinHeight(50);
label.prefHeight(50);
label.setMaxHeight(50);
gridPane.setGridLinesVisible(true);
label.setStyle("-fx-background-color:yellow;");
box.getChildren().add(label);
box.setAlignment(Pos.CENTER);
gridPane.add(box, 0, i);
}
Label labe2 = new Label("HelloWorld");
labe2.setMinHeight(80);
gridPane.add(labe2, 0, 15);
}
}
真的需要帮助
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"
prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="sample.Controller">
<children>
<AnchorPane layoutX="39.0" layoutY="15.0" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0"
AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<ScrollPane fitToHeight="true" fitToWidth="true" pannable="true" prefHeight="239.0" prefWidth="331.0"
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
AnchorPane.topAnchor="0.0">
<content>
<GridPane fx:id="gridPane" prefHeight="239.0" prefWidth="331.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
</rowConstraints>
</GridPane>
</content>
</ScrollPane>
</children>
</AnchorPane>
</children>
</AnchorPane>
您的 GridPane
行的 minHeight
均为 10.0
。这意味着它们在使用 ScrollPane
.
将每行的 minHeight
更改为 -Infinity
,这基本上使其与您的 prefHeight
:
<RowConstraints minHeight="-Infinity" prefHeight="30.0" vgrow="SOMETIMES" />
或者,为了在您的控制器中以编程方式设置这些约束,请在添加 VBox
:
RowConstraints
gridPane.getRowConstraints().add(new RowConstraints(30));
解决了这个问题..而不是在场景生成器中创建网格平移..只需使用代码创建网格并通过代码设置约束...尝试在代码的执行顺序中尽早创建约束。 .
我使用场景生成器创建的网格窗格没有效果