2012-12-27 52 views
2

我想在控制器中調用視圖方法,但我不知道如何:)我尋找像例子,但我沒有找到它。我可以在這個代碼中做到嗎?我是否必須重新構建它? 我使用javafx和fxml技術(構建用戶界面)。在控制器中調用查看方法

我的視圖文件(它有gotoRegister()和gotoLogin()方法(我想調用它們))

public class FXMLExampleMVC extends Application{ 

    protected Parent root; 
    @Override 
    public void start(Stage stage) throws Exception { 
     gotoLogin(); 

     Scene scene = new Scene(root); 

     stage.setScene(scene); 
     stage.setTitle("JavaFX Welcome!"); 
     scene.getStylesheets().add(FXMLExampleMVC.class.getResource("cssforapp.css").toExternalForm()); 

     stage.show(); 
    } 

    public void gotoRegister() throws IOException{ 
     root = FXMLLoader.load(getClass().getResource("RegisterFXML.fxml")); 
    } 
    public void gotoLogin() throws IOException{ 
     root = FXMLLoader.load(getClass().getResource("Sample.fxml")); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

我的控制器(在這裏我要調用gotoRegister()方法)

public class SampleController { 

    public SampleModel model = new SampleModel(); 
    @FXML 
    protected Text actiontarget; 
    @FXML 
    protected PasswordField passwordField; 
    @FXML 
    protected TextField loginField; 

    @FXML protected void handleSubmitButtonAction(){ 
     if((loginField.getText().equals(model.returnLogin()))&&(passwordField.getText().equals(model.returnPass()))){ 
      actiontarget.setText("You have access !"); 
     } else { 
      actiontarget.setText("Wrong data !"); 
     } 

    } 
    @FXML protected void handleSubmitButtonRegister() throws IOException{ 
     // 
     //Here I want to invoke gotoRegister 
     // 
    } 
} 

我的問題:我可以調用gotoRegister嗎?或者,也許是其他方式來更改fxml文件(從控制器)?

+0

注意:設置字段'root'不會改變的內容你的場景(現在是Java工程)。你需要調用'scene.setRoot(root)'來實現。所以更好的選擇是將'scene'作爲一個字段存儲並直接用新的根目錄調用'setRoot()'方法。 –

+0

謝謝,我會用你的解決方案:) – telecom

回答

5

把這個代碼FXMLExampleMVC.java

private static FXMLExampleMVC instance; 
public FXMLExampleMVC() { 
      instance = this; 
} 
// static method to get instance of view 
public static FXMLExampleMVC getInstance() { 
     return instance; 
} 

,現在你可以調用控制您的視圖方法這樣

@FXML protected void handleSubmitButtonRegister() throws IOException{ 
     // 
     //Here I want to invoke gotoRegister 
     FXMLExampleMVC.getInstance().gotoRegister(); 
    } 
+0

它的工作原理,非常感謝! – telecom

+0

當gotoRegister()方法的返回類型不是void時,它不起作用。你能解釋一下嗎?謝謝。 – ihayet

相關問題