【发布时间】:2021-05-01 10:40:18
【问题描述】:
我对 JavaFX 很陌生。我尝试制作一个简单的 GUI,但结果并不正确。
它在 SceneBuilder 中的外观如下:
https://imgur.com/a/3aJefh4
在实际的应用程序中:
https://imgur.com/a/JpszR9m
如果我把它缩小,按钮就会消失。如果我把它调整大,那就没问题了。
对不起,如果我解释得不好......
Main.java
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Controller.java
package sample;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class Controller {
@FXML private Button logoutButton;
@FXML private AnchorPane scene;
Stage stage;
public void logout() {
stage = (Stage) scene.getScene().getWindow();
stage.close();
}
}
sample.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<GridPane alignment="center" hgap="10" maxHeight="-Infinity" maxWidth="-Infinity" vgap="10" xmlns="http://javafx.com/javafx/15.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<columnConstraints>
<ColumnConstraints />
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<AnchorPane fx:id="scene" prefHeight="300.0" prefWidth="500.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<Button fx:id="logoutButton" layoutX="224.0" layoutY="138.0" mnemonicParsing="false" onAction="#logout" text="Logout" />
</children>
</AnchorPane>
</children>
</GridPane>
【问题讨论】:
-
顺便说一句:当布局不符合您的预期时,不要硬编码尺寸 - 这里可能的罪魁祸首是场景/舞台的尺寸与硬编码的尺寸冲突fxml
-
您应该删除
AnchorPane并使用将节点保持在中心的容器(当您将对齐设置为中心时)而不是硬编码大小值,如果您要调整很多这样的大小作为VBox或HBox或BorderPane给你一些例子 -
你基本上需要学习如何使用Parent节点。在这种情况下,您唯一应该拥有的是
StackPane作为根节点,Button作为其子节点。从这里开始 -> docs.oracle.com/javafx/2/layout/jfxpub-layout.htm -
您预计会发生什么?您正在为按钮指定一个固定位置 (
layoutX="224.0" layoutY="138.0")。很明显,调整窗口大小时它不会重新定位。
标签: java user-interface javafx