- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
但是当我在运行时应用第二个场景时,场景不会随着舞台的高度和宽度进行调整。场景的高度和宽度保持不变。
有什么解决办法吗?
最佳答案
据我了解上面发布的问题。我认为舞台足够好,可以根据听众设置首选高度和宽度,以获得适用于窗口大小的更新请求。但它有一些限制,如果您最大化或最小化 javaFX 屏幕并尝试导航到其他屏幕,那么其他屏幕将具有相同的窗口大小,但场景内容将扭曲为默认的高度和宽度,例如登录和 javafx 中的家庭场景(所有场景都是用 fxml 创建的)。 Login.fxml 由其 Controller 初始化。正如您所提到的,场景是在构造函数中初始化的,因此它必须是相关 fxml 的 Controller (截至目前,FXML 与 Controller 紧密耦合)。您将在构造函数本身中设置场景大小(高度和宽度)。
1.) login.fxml 的 LoginController
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
class LoginController {
private Stage stage;
private Scene scene;
private Parent parent;
@FXML
private Button gotoHomeButton;
public LoginController() throws Exception {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/login.fxml"));
fxmlLoader.setController(this);
try {
parent = (Parent) fxmlLoader.load();
// set height and width here for this login scene
scene = new Scene(parent, 1000, 800);
} catch (IOException ex) {
System.out.println("Error displaying login window");
throw new RuntimeException(ex);
}
}
// create a launcher method for this. Here I am going to take like below--
public void launchLoginScene(Stage stage) {
this.stage = stage;
stage.setScene(scene);
stage.setResizable(true);
stage.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
setCurrentWidthToStage(number2);
}
});
stage.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
setCurrentHeightToStage(number2);
}
});
//Don't forget to add below code in every controller
stage.hide();
stage.show();
}
@FXML
public void authenticateUser(ActionEvent actionEvent) {
// write your logic to authenticate user
//
new HomeController().displayHomeScreen(stage);
}
private void setCurrentWidthToStage(Number number2) {
stage.setWidth((double) number2);
}
private void setCurrentHeightToStage(Number number2) {
stage.setHeight((double) number2);
}
}
2.) HomeController 相同 --
public class HomeController {
private Parent parent;
private Stage stage;
private Scene scene;
public HomeController (){
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/home.fxml"));
fxmlLoader.setController(this);
try {
parent = (Parent) fxmlLoader.load();
// set height and width here for this home scene
scene = new Scene(parent, 1000, 800);
} catch (IOException e) {
// manage the exception
}
}
public void displayHomeScreen(Stage stage){
this.stage = stage;
stage.setScene(scene);
// Must write
stage.hide()
stage.show();
}
}
3.) 主类
import javafx.application.Application;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
new LoginController().launchLoginScene(primaryStage);
}
public static void main(String[] args) {
launch(args);
}
}
只需尝试在每个 Controller 中将 Stage.hide() 放在 Stage.show() 之前。希望这对您有所帮助。
关于java - 在 javafx 中设置舞台和场景的高度和宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18998671/
如图所示,上面的红色框是一个 GridBox,下面是一个带有 Splitpane (ListView) 和 Gridpane (2 Buttons) 的 VBox。我想要实现的是在单击按钮“隐藏>>"
使用 msfconsole 并搜索 linux x64 有效负载。 我遇到过舞台 Actor 、舞台和单曲?它们都有“reverse_tcp”,可以将连接反转回攻击者。然而我尝试查找舞台 Actor
我正在寻找一种将 3 个 LineCharts 放入单个窗口的方法。我的意思是我想让它们并排放置,或者一个在另一个下面。 我一直在寻找实现它的方法,但找不到任何东西。我试图搜索如何将多个场景放入一个阶
我有一个有效的 Web 功能,它使用 html5 视频和 Canvas 来访问设备相机的媒体流,然后拍照并在 Canvas 中渲染图像。效果很好,但我想使用 konvajs stage 而不是 can
我在解决这个问题时遇到了困难,并且我找不到我遇到的这个问题的正确答案。我希望将一个场景/阶段用作打开另一个场景/阶段的按钮,并且两者都通过相同的方法调用。完整的方法如下: public void c
我在 JavaFX 上有一个简单的应用程序,它实际上由几个 Pane 和按钮组成。我不知道如何在舞台调整大小时移动按钮。所以,我希望左下角的按钮即使在调整窗口大小时也始终可见。 这里是节点概览: 这里
来自 Swing 并且是 JavaFX 的新手,我尝试对 Java FX Stages 和 Scenes 进行子类化。但是我很快就遇到了问题,比如初始化过程中找不到我的子类场景的 init 方法。 所
How to animate or move window using clutter_actor_animate? Here's my code and it didn't work. clutte
有没有办法从关联的类 Controller 中获取 FXML 加载文件的 Stage/Window 对象? 特别是,我有一个模态窗口 Controller ,我需要舞台来关闭它。 最佳答案 我找不到解
我将工作代码分为 2 个文件以避免困惑。以前确实有效,但是将所有场景都放在一个类中是非常不愉快的。 以前,当您单击 Sprite 时,它会将您从菜单带到游戏。然后我将游戏组和游戏场景的代码提取到游戏类
我希望能够将 HTML 文本转换为位图,以便在 AlivePDF 中使用。我的测试适用于 TextArea,或者组件是否在舞台上或可见。但我希望能够处理不一定位于屏幕上的文本块。有谁知道如何做到这一点
我有一个 swing 应用程序,我需要在其中运行并打开 JavaFX 场景/阶段。我必须在没有扩展应用程序的情况下运行它。我已经尝试了 Stackoverflow 上发布的大多数解决方案,但没有一个适
我正在寻找一种方法来缩小 Flash 文件的高度。我可以更改宽度,但高度似乎与其所在窗口的大小有关? http://www.bevelite.com.au/test 我正在使用 page-flip.c
我需要在选择组合框元素时重新绘制窗口。如何在 JAVA FX 2.2 中重绘窗口(舞台)? 下面是我的代码 functionComboBox.valueProperty().addListener(n
我是一名优秀的程序员,十分优秀!