如果我想在JavaFx中以编程方式添加一行文本字段,我可以简单地使用gridpane add方法
这会在第1行添加一组文本字段.
for (int i = 0; i < Fields.size(); i++) {
gridpane.add(new TextField(), i, 1);
}
Run Code Online (Sandbox Code Playgroud)
同样,如何删除一行?我找不到合适的方法来在JavaFX中方便地删除行/列.
我想在网格窗格中具有相等(最大)宽度的按钮。
当我试图直接在 FXML 中设置它时 - 它完美地工作。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.*?>
<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="TestController">
<children>
<GridPane AnchorPane.leftAnchor="0" AnchorPane.rightAnchor="0" AnchorPane.bottomAnchor="0"
AnchorPane.topAnchor="0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" percentWidth="50.0"/>
<ColumnConstraints hgrow="SOMETIMES" percentWidth="50.0"/>
</columnConstraints>
<children>
<Button maxWidth="Infinity" text="Button1" GridPane.columnIndex="0"/>
<Button maxWidth="Infinity" text="Button2" GridPane.columnIndex="1"/>
</children>
</GridPane>
</children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)
但是当我想将整个网格分成一个自定义控件时,按钮停止填充可用宽度。
这是一个 FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import CustomGridPane?>
<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="TestController">
<children>
<CustomGridPane AnchorPane.leftAnchor="0" AnchorPane.rightAnchor="0" AnchorPane.bottomAnchor="0" AnchorPane.topAnchor="0">
</CustomGridPane>
</children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)
还有一个扩展:
public class CustomGridPane extends GridPane {
private Button button1 = new Button("button1"); …
Run Code Online (Sandbox Code Playgroud) 我是JavaFX的新手,正在尝试使用GridPane进行简单的按钮设计.
我无法弄清楚如何使按钮跨越多个列/行,而不会将其他按钮推开.我一直在使用HBox和VBox将其他按钮组合在一起.我在按钮上尝试过setRowSpan,但这似乎不起作用.
这是我的代码:
import javafx.stage.*;
import javafx.application.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
public class SimpleGUI extends Application {
public void start(Stage primaryStage) throws Exception {
GridPane root = new GridPane();
Scene scene = new Scene(root, 200, 200);
//Buttons
Button b1 = new Button("KNAPP 1");
Button b2 = new Button("KNAPP 2");
Button b3 = new Button("KNAPP 3");
Button b4 = new Button("KNAPP 4");
Button b5 = new Button("KNAPP 5");
Button b6 = new Button("KNAPP 6");
//Horizontal Box
HBox …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序,如果需要将更多数据添加到表单中,该程序将允许用户添加新的空文本字段。我无法理解如何为添加到 GridPane 的每个新字段设置坐标。例如,
btnClick.setOnAction(new EventHandler<ActionEvent>(){
public void handle(ActionEvent e)
{
TextField text = new TextField();
primaryPane.add(text, 5 , 6);
}});
Run Code Online (Sandbox Code Playgroud)
只会导致在位置 (5,6) 处添加一个新文本字段。如何更改代码以允许用户添加所需数量的字段,并且每个字段都显示在另一个字段之后。我知道我可以对确定数量的新字段使用循环,但是用户应该能够创建任意数量。预先感谢您的任何帮助。
内森
如果我添加-fx-border-radius
和-fx-border-width
CSS来一个简单的GridPane,在角落里的背景不会被“开刀”。
CSS:
.payload {
-fx-hgap: 20px;
-fx-padding: 40px;
-fx-background-color: #2969c0;
-fx-border-radius: 50px;
-fx-border-width: 5px;
-fx-border-color: black;
-fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.8), 10, 0, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
关于结果的图片:
我该如何解决 ?
我想在JavaFX中显示包含各种矩形的网格.重要的是此网格无法调整大小.
我选择了GridPane
布局.我动态添加javafx.scene.shape.Rectangle
它.这是我的网格看起来像2行和4列.
在调整大小时,我希望它保持相同的整体形状,也就是说每个Rectangle
具有相同的大小并且在我的Rectangle
s 之间保持水平和垂直间隙.
但是,这是我用4x4网格得到的:
问题是:
Rectangle
s 的其余列不同.这是我负责刷新显示的代码:
public void refreshConstraints() {
getRowConstraints().clear();
getColumnConstraints().clear();
for (int i = 0; i < nbRow; i++) {
RowConstraints rConstraint = new RowConstraints();
// ((nbRow - 1) * 10 / nbRow) = takes gap into account (10% of height)
rConstraint.setPercentHeight(100 / nbRow - ((nbRow - 1) * 10 / nbRow));
getRowConstraints().add(rConstraint);
}
for (int i = 0; i < nbColumn; i++) { …
Run Code Online (Sandbox Code Playgroud) 目前有2组网格。第一个网格集是一个 5x4 网格,其中包含地图图像。最重要的是,有一个网格,其中包含每个 5x4 网格框的所有小图块。
因此,我需要采用 5x4 网格图案的大图像,每个图块内有 16x16 迷你图块,并且每个迷你图块需要可在存在于大英亩土地中的底层图像之上进行绘制(或具有图像)。
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.String?>
<?import java.net.URL?>
<?import javafx.collections.FXCollections?>
<?import javafx.scene.canvas.Canvas?>
<?import javafx.scene.control.Accordion?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.StackPane?>
<BorderPane id="mainPane" fx:id="editorPane" prefHeight="500.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/null" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.michaelgatesdev.OldLeaf.gui.controllers.tabs.TabMapEditorController">
<stylesheets>
<URL value="@../../css/tabs/TabMapEditor.css"/>
<URL value="@../../css/Flat.css"/>
<URL value="@../../css/FlatColors.css"/>
</stylesheets>
<center>
<ScrollPane id="map-editor-grid-container" fx:id="gridContainer" fitToHeight="true" fitToWidth="true" nodeOrientation="LEFT_TO_RIGHT" styleClass="content-pane">
<content>
<StackPane fx:id="stackPane">
<children>
<GridPane id="map-editor-grid-acres" fx:id="gridAcres">
<columnConstraints>
<ColumnConstraints hgrow="ALWAYS" maxWidth="192.0" …
Run Code Online (Sandbox Code Playgroud) 嘿,我有一个gridpane和一个节点,我希望它能够占用整行.
但我似乎无法弄清楚如何使用GridPane.setColumnSpan(节点,列跨度);
继承我的代码
grid.getChildren().addAll(animalFields(animal));
grid.setHgap(10);
grid.addRow(2, status, neutered, chipped, vaccinated, reserved);
grid.addRow(3, statusCb,new HBox(neuteredYes, neuteredNo), new HBox(chippedYes, chippedNo), new HBox(vaccinatedYes, vaccinatedNo), new HBox(reservedYes, reservedNo));
grid.addRow(4, new Label("people interested"));
grid.addRow(6, sponsorsTable(((Adoption) animal.getAdoption()).getInterested()));
GridPane.setColumnSpan(sponsorsTable(((Adoption) animal.getAdoption()).getInterested()), 6);
grid.addRow(7, hBox2);
Run Code Online (Sandbox Code Playgroud)
这就是它现在的样子
这就是我想要的样子
感谢任何帮助.谢谢
我们需要一个具有以下要求的 3 列布局的解决方案:
假设我们有一个 440px 的水平空间和一个固定大小为 40px 的中间列。另外两列应该共享剩余的 400px,这样每列的宽度为 200px。
------------------------------------
| 200px | 40px | 200px |
------------------------------------
Run Code Online (Sandbox Code Playgroud)
如果整体大小发生变化,比如 500px,中间列的宽度应该不会发生变化,但其他列的宽度应该发生变化。
----------------------------------------
| 230px | 40px | 230px |
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
如果使用 GridPane 可以做到这一点,请告诉我如何操作。
如果使用 GridPane 无法做到这一点,我愿意接受其他建议。
我更喜欢一个简单的解决方案 a) 没有 FXML 的 Java 代码和 b) 只有 JavaFx,所以额外的库。