调用

时间:2015-08-24 17:30:39

标签: java javafx initializer

我正在研究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值。

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

2 个答案:

答案 0 :(得分:0)

当您致电EventView时,您可能无法重复使用相同的e实例(initialize())。只有您用来调用EventView的{​​{1}}实例才具有createView()的预期值。

答案 1 :(得分:0)

使用' FXMLLoader'时,您可以创建控制器。要使用已创建的方法,您必须在加载fxml文件之前使用FXMLLoader的{​​{3}}方法,以使用您自己创建的控制器实例:

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