gpt4 book ai didi

java - 初级阶段改变场景大小

转载 作者:搜寻专家 更新时间:2023-11-01 03:24:32 26 4
gpt4 key购买 nike

我在场景生成器中设计了一个带有几个按钮的简单场景。没什么特别的:

scenebuilder

我已经把它放在初级阶段了,我觉得还不错:

resizable

但是现在,如果我将 primary stage 的 resizable 属性更改为 false,则场景会在右侧和底部增长:

resizable

为什么场景在右边和底部增长?在我看来,它没有什么特别之处:

@Override
public void start(Stage stage) throws Exception {
AnchorPane root = FXMLLoader.load(getClass().getResource("/fxml/start.fxml"));
Scene scene = new Scene(root);
stage.setResizable(false);
stage.setTitle("Game");
stage.setScene(scene);
stage.centerOnScreen();
stage.show();

}

FXML:

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

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

<AnchorPane fx:id="rootPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="310.0" prefWidth="320.0" xmlns:fx="http://javafx.com/fxml" fx:controller="bla.bla.bla.Controller">
<children>
<Button fx:id="btnNewGame" layoutX="10.0" layoutY="10.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="300.0" text="New Game" />
<Button fx:id="btnLoadGame" layoutX="10.0" layoutY="70.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="300.0" text="Load Game" />
<Button fx:id="btnEditor" layoutX="10.0" layoutY="130.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="300.0" text="Editor" />
<Button fx:id="btnProperties" layoutX="10.0" layoutY="190.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="300.0" text="Properties" />
<Button fx:id="btnExit" layoutX="10.0" layoutY="250.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="300.0" text="Exit" />
</children>
<stylesheets>
<URL value="@start.css" />
</stylesheets>
</AnchorPane>

还有CSS:

#rootPane{
-fx-background-color: #333333;
}

.button{
-fx-background-color: #555555;
-fx-text-fill: silver;
-fx-background-radius: 0;
-fx-border-radius: 0;
-fx-border-color: #444444;
}

提前致谢!

最佳答案

我的测试程序是这样的:

@Override
public void start(final Stage stage) throws Exception {

StackPane root = FXMLLoader.load(getClass().getResource("stage.fxml"));
final Scene scene = new Scene(root);
scene.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
System.out.println("width: "+number+" -> "+number2);
}
});
boolean resizable = true;
stage.setResizable(resizable);
stage.setTitle("Stage Resizable "+ resizable);
stage.setScene(scene);
stage.centerOnScreen();
stage.show();
}

例如,当 Stage#reziable 标志设置为 false 时,setWidth 会被调用两次。使用您的示例 fxml,我的输出如下:

width: 0 -> 320
width: 320 -> 330

然而,当 resizable 为真时,setWidth 只被调用一次:

width: 0 -> 320

我看不出这 10 个额外的像素是从哪里来的,这与场景内部无关(我切换到一个空的 StackPane 进行测试)。 我认为这是 JavaFX 中的一个错误,快速的 jira 搜索揭示了以下内容:https://javafx-jira.kenai.com/browse/RT-30647

因此,如果您希望解决该问题,我建议您对该问题投赞成票 ;)

关于java - 初级阶段改变场景大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18312563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com