1

我有一个拆分窗格,初始分隔位置设置为 0.2,问题是在运行应用程序后位置更改为 0.5,我读到这是由于stage.setMaximized(true);
我检查了这个问题,但答案暗示当前的拆分窗格和主舞台在同一个班级,但就我而言,我必须在控制器班级工作。

我试图Main.getStage().showingProperty().addListener(...)initialize()方法中显示属性的阶段添加一个侦听器,但它不起作用,它说阶段为空,我猜是因为 initialize() 之前运行Main.start()

那么我怎样才能让我的拆分窗格从一个固定的分隔位置开始呢?

谢谢!

编辑 :

我做了一个简单的例子来暴露我的问题:

主要的

@Override
public void start(Stage primaryStage) throws Exception {
  FXMLLoader loader=new FXMLLoader(getClass().getResource("views/test.fxml"));
  mainStage=primaryStage;
  mainStage.setScene(new Scene(loader.load()));
  mainStage.show();
  Controller_Test ct=loader.getController();
  System.out.println("Main:"+ct.sp.getDividerPositions()[0]);
  ct.getDividerPos();
}

Controller_Test

@FXML
public SplitPane sp;

@FXML
public void initialize() {
    System.out.println("Initialize:"+sp.getDividerPositions()[0]);
}

public void getDividerPos(){
    System.out.println("Method:"+sp.getDividerPositions()[0]);
}

现在我将拆分窗格分隔线设置为 1,这意味着第二个窗格不应显示,我运行应用程序,结果如下:

启动时的窗口

好的,这个分隔线是 1,所以只显示一个窗格,现在我将最大化窗口:

在此处输入图像描述

分频器位置明显改变。如果您阅读我之前提供的代码,您可以看到 3 个打印行作为检查点,这是它们在运行应用程序后的输出:

初始化:1.0
主要:0.9933110367892977
方法:0.9933110367892977

谢谢!

4

0 回答 0