2015-08-24 81 views
1

我工作的一個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當初始化被稱爲沒有改變,當我第一次拜訪對象Ë的的CreateView的方法,並通過了成倍PANE_HEIGHT變量的值?謝謝。

回答

0

當您使用'FXMLLoader'時,您將創建一個新的控制器。要使用一個已經創建的,你必須使用FXMLLoadersetController方法加載FXML文件之前,使用你自己創建一個控制器實例:

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

哇,這是快。謝謝你的伴侶!另外我需要確保.fxml文件沒有設置fx:controller,因爲我遇到了「Controller value already already specified」。 – hideburn

0

當您撥打initialize()時,您可能不會重複使用相同的EventView實例(e)。只有您用於呼叫createView()EventView實例的預期值爲PANE_HEIGHT