覆盖方法初始化在调用时无法识别变量值更改

Overriden method initialize does not recognize variable value change when called

我正在处理 MVC 项目并遇到以下问题:

在名为 CentralLayout 的视图中是以下代码:

EventView e = new EventView();
gridSchedule.add(e.createView(5), 1, 1, 1, 5);

其中 createView 方法在以下接口中定义:

public interface Creatable {
public Node createView();
public Node createView(int eventDuration);

}

EventView 实现为:

public class EventView extends BaseViewController implements Initializable, Creatable {


private int PANE_HEIGHT = 10;
final int PANE_WIDTH = 99;

@FXML
private Label lblObjectOne;

@FXML
private Label lblObjectTwo;

@FXML
private Pane eventPane;

@Override
public Node createView() {
    return null;
}

@Override
public Node createView(int eventDuration) {
    PANE_HEIGHT = eventDuration * 20;
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("eventView.fxml"));
    Parent root = null;
    try {
        root = fxmlLoader.load();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return root;
}


@Override
public void initialize(URL location, ResourceBundle resources) {

System.out.println(PANE_HEIGHT);

    eventPane.setMaxHeight(PANE_HEIGHT);
    eventPane.setMaxWidth(PANE_WIDTH);

    lblObjectOne.setText("test");
    lblObjectTwo.setText("test");
}
}

注意:我在 SceneBuilder 中创建了 eventPane,其属性在 eventView.fxml 文件中定义。

问题是 eventPane 的最终绘制高度等于 10,而不是 100。在控制台中,值 10 打印为 PANE_HEIGHT 值。

谁能告诉我,当我第一次调用对象 上的 createView 方法时,为什么 PANE_HEIGHT 在调用 initialize 时没有改变e 并传递乘以 PANE_HEIGHT 变量的值?谢谢

调用 initialize() 时,您可能没有重复使用同一个 EventView 实例 (e)。只有您用来调用 createView()EventView 实例才会具有 PANE_HEIGHT.

的预期值

您在使用 'FXMLLoader' 时创建了一个 new 控制器。要使用已经创建的控制器实例,您必须在加载 fxml 文件之前使用 FXMLLoadersetController 方法以使用您自己创建的控制器实例:

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("eventView.fxml"));
Parent root = null;
fxmlLoader.setController(this);
try {
    root = fxmlLoader.load();