就像我现在的代码一样,如果屏幕不够大,无法支持我设置的固定大小,应用程序的内容将被窗口切断。我想知道解决这个问题的最简单方法。与其更改每个UI元素,我希望有一种方法可以简单地让UI调整到窗口的任何大小,所以窗口应该能够从一个角落拉来调整大小,UI移动with it.
以下是舞台类:
public class Login {
public void show(Stage primaryStage) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Login.fxml"));
Parent root = loader.load();
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.setResizable(false);
primaryStage.show();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
字符串
下面是.fxml文件:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.image.Image?>
<AnchorPane prefHeight="960.0" prefWidth="540.0" xmlns="http://javafx.com/javafx/20.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.login.LoginController">
<children>
<ImageView fitHeight="261.0" fitWidth="210.0" layoutX="171.0" layoutY="302.0" pickOnBounds="true" preserveRatio="true">
<Image url="@ledger.png" />
</ImageView>
<Label layoutX="134.0" layoutY="132.0" text="EffortLoggerV2">
<font>
<Font size="42.0" />
</font>
</Label>
<Label layoutX="43.0" layoutY="768.0" text="Username">
<font>
<Font size="24.0" />
</font>
</Label>
<Label layoutX="43.0" layoutY="818.0" text="Password">
<font>
<Font size="24.0" />
</font>
</Label>
<TextField layoutX="164.0" layoutY="770.0" prefHeight="25.0" prefWidth="224.0" />
<TextField layoutX="164.0" layoutY="820.0" prefHeight="25.0" prefWidth="224.0" />
<Button fx:id="loginButton" layoutX="416.0" layoutY="770.0" mnemonicParsing="false" prefHeight="73.0" prefWidth="86.0" text="Sign In">
<font>
<Font size="18.0" />
</font>
</Button>
<Button fx:id="createAccountButton" layoutX="193.0" layoutY="889.0" mnemonicParsing="false" text="Create an Account">
<font>
<Font size="18.0" />
</font>
</Button>
</children>
</AnchorPane>
型
有没有简单的方法来做到这一点,或者这需要改变每个UI元素?
2条答案
按热度按时间neekobn81#
前言:
无法使用固定大小创建屏幕大小自适应布局。
把“固定的”和“自适应的”两个词结合在一起,你就能看出问题。
解决方案:
在每个元素上,包括 * 窗格:
1.在任何地方都使用计算大小作为最小大小。
1.在任何地方都使用计算大小作为首选大小。
1.使用maxValue作为所有位置的最大大小。
1.使用hGrow总是无处不在的地方,它并不只与上述工作。
1.将“标示”的多行设定为true。
6xfqseft2#
我不知道你到底想达到什么目的,但利用这里的想法,我提出了一个起点,我希望能有所帮助。你可能需要做一些关于JavaFX布局/父节点的教程。ImageView可能有点棘手。我希望这能帮助你朝着正确的方向前进。对于登录视图,在我看来,这是少数几种可以设置min的情况之一,和最大大小设置为相同的值,或者使用无法调整大小的屏幕。
FXML
字符串
正常
x1c 0d1x的数据
最大化
的