当前位置: 首页 > 知识库问答 >
问题:

将FXML加载到AnchorPane时如何自动调整大小?

查锦程
2023-03-14

我在加载到锚机中的FXML布局方面遇到了问题。

我有一个Scene.fxml,上面有一个AnchorPane和一个按钮。按下按钮将nternal.fxml加载到AnchorPane中。Internal.fxml有一个文本字段,其中AnchorPane约束设置为左右。就这样。

虽然现在调整窗口大小时,文本字段不会调整大小。

为什么文本字段不调整自身大小?下面代码中的错误在哪里?

主要的java:

@Override
public final void start(final Stage firstStage) throws Exception {
    Parent mask = FXMLLoader.load(getClass()
                            .getResource("/fxml/Scene.fxml"));

    Scene scene = new Scene(mask);
    scene.getStylesheets().add("/styles/Styles.css");

    firstStage.setTitle("MyProgram");
    firstStage.setScene(scene);
    firstStage.show();

    Main.stage = firstStage;
}

场景fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<AnchorPane id="AnchorPane" fx:id="content" prefHeight="600.0" prefWidth="800.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="com.treasury.myprogram.controller.SceneController">
  <children>
    <Button layoutX="257.0" layoutY="227.0" mnemonicParsing="false" onAction="#loadInternal" text="Button" />
  </children>
</AnchorPane>

内部的fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<AnchorPane id="AnchorPane" maxHeight="-1.0" maxWidth="-1.0" minHeight="400.0" minWidth="600.0" prefHeight="-1.0" prefWidth="-1.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="com.treasury.myprogram.controller.InternalController">
  <children>
    <TextField layoutY="14.0" prefWidth="-1.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" />
  </children>
</AnchorPane>

场景Controller.java:

package com.treasury.myprogram.controller;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.layout.AnchorPane;

public class SceneController implements Initializable {
    @FXML
    private AnchorPane content;


    @FXML
    private void loadInternal() {
        try {
            AnchorPane internalPane = FXMLLoader.load(getClass().getResource("/fxml/Internal.fxml"));

            this.content.getChildren().setAll(internalPane);

        } catch (IOException ex) {
            System.out.println("Internal error: " + ex.getMessage());
        }
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
    }
}

编辑:

好的,首先非常感谢,现在代码正常了。嗯,有一半是这样的,但至少第一期已经没有了。我现在有一个只能工作一半的FXML。它有一个带有几个条目的网格窗格,下面有一个文本字段。它们都直接在锚烷上。现在,当我在JavaFX Scene Builder 1.1中处于构造模式时,一切看起来都很好,但当我加载此内部时。fxml进入场景。fxml只有文本字段适应父级大小,但网格窗格不适应。我很难找到原因。有什么问题吗?错误配置在哪里?

内部的fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<AnchorPane id="AnchorPane" maxHeight="-1.0" maxWidth="-1.0" minHeight="400.0" minWidth="600.0" prefHeight="-1.0" prefWidth="-1.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="com.treasury.myprogram.controller.InternalController">
  <children>
    <GridPane gridLinesVisible="true" prefHeight="-1.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="5.0">
      <children>
        <Label text="Program name:" GridPane.columnIndex="0" GridPane.rowIndex="0" />
        <Label text="Version:" GridPane.columnIndex="0" GridPane.rowIndex="1" />
        <Label text="Release date:" GridPane.columnIndex="0" GridPane.rowIndex="2" />
        <Label text="myprogram" GridPane.columnIndex="1" GridPane.rowIndex="0" />
        <Label text="1.0" GridPane.columnIndex="1" GridPane.rowIndex="1" />
        <Label text="28.02.2014" GridPane.columnIndex="1" GridPane.rowIndex="2" />
        <TextField prefWidth="200.0" GridPane.columnIndex="0" GridPane.rowIndex="3" />
        <TextField prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="3" />
      </children>
      <columnConstraints>
        <ColumnConstraints hgrow="SOMETIMES" maxWidth="294.0" minWidth="10.0" prefWidth="112.0" />
        <ColumnConstraints hgrow="SOMETIMES" maxWidth="502.0" minWidth="10.0" prefWidth="478.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>
    </GridPane>
    <TextField layoutY="125.0" prefWidth="590.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" />
  </children>
</AnchorPane>

共有2个答案

严烨
2023-03-14

尝试以下操作:

AnchorPane.setTopAnchor(<child node>,0.0);
AnchorPane.setBottomAnchor(<child node>,0.0);
AnchorPane.setLeftAnchor(<child node>,0.0);
AnchorPane.setRightAnchor(<child node>,0.0);
楚俊杰
2023-03-14

尝试使用边界窗格而不是锚定窗格,并将子fxml的对象设置为中心。还要检查父fxml是否可以在场景生成器中自动调整大小。

@FXML private BorderPane bPaneHomeChild;
FXMLLoader loader = new FXMLLoader(getClass.getResource("/fxml/Internal.fxml"));
Pane cmdPane = (Pane) loader.load();
bPaneHomeChild.setCenter(cmdPane);
 类似资料:
  • 我有这个按钮,当我想添加图像动态到我的锚窗格,但目前它没有工作的预期。我试图在JavaFX标签中加载一个图像,下面是我的代码。 FXMLDocumentController.java fxmlDocument.fxml 错误 null 我正在使用netbeans IDE

  • 我试图在FXML中设计一个用户界面,并部分使用场景生成器。我使用Anchorpane来放置场景中的所有内容。但是,当我将窗口调整到更大的大小时,按钮会从中间向左移动。我想确保它们留在页面的中心。如何做到这一点?谢谢。

  • 问题内容: 我使用以下代码来自动调整电子表格中的列大小: 问题是,如果大型电子表格的行数超过3000行,则需要花10分钟以上的时间来自动调整每一列的大小。但是,对于小型文档而言,它运行得非常快。有什么可以帮助实现自动化以更快地工作的吗? 问题答案: 对我有用的解决方案: 可以避免合并区域,所以我可以遍历其他单元格并最终自动调整为最大的单元格,如下所示: 其中1.14388是“ Serif”字体和2

  • 我正在做一个GUI,当你按下“下一步”按钮时,它会一个接一个地显示某个目录中的图像。

  • 问题内容: 我一直试图(徒劳地)建立一个页面,当我更改窗口大小时,其元素将重新调整大小。我可以在CSS中使用它来处理图像,但是没有问题,但是我似乎无法在文本上完成相同的操作,而且我不确定在CSS中是否有可能。而且我似乎找不到能完成此任务的jQuery脚本。 当用户调整窗口大小时,我实质上希望页面能够动态流畅地缩放,而无需用户调用页面缩放。通过css在我的img div上这可以正常工作,但对于文本则

  • 我有一个表,它只包含列ID和name。但是,这个表被嵌入到一个SplitPane中,让用户有机会轻松快速地更改大小。我希望桌子总是在整个宽度内填满。ID列的大小设置为70,并且只有Name列应该始终传播到表的剩余宽度。我使用FXML创建布局。有没有可能直接在FXML中设置这个?