我想在javaFX 2中創建一個應用程序,該應用程序以較小的登錄窗口打開,然後,當您輸入正確的數據時,它會將您帶到較大的主窗口。兩者都是在fxml中設計的,事件在Java代碼中處理。JavaFX全局場景變量意外地更改爲空
是的,我知道,它幾乎與樣本中的應用程序相同,我試圖做我想做的事情,它在那裏工作。
現在,當我在我的項目中做同樣的事情時,當我想要改變舞臺的價值時,我遇到了一個問題。
正如你可以在下面的代碼中看到的,我有全局變量,並且我在start方法中設置了primaryStage的值。就像測試一樣,我在啓動方法結束時將其打印出來,並設置值。
然後,當我點擊按鈕時嘗試使用它(方法buttonClick),stage變量的值爲null,因此我不能用它來調整窗口大小或其他任何東西。
我的問題是爲什麼階段變量值重設,儘管我不使用兩個打印之間的任何改變?
此代碼是我嘗試過的示例,我剛剛刪除了所有代碼,這些代碼對於理解我的應用程序如何工作並不重要。
public class App extends Application {
private Stage stage;
@FXML
private AnchorPane pane;
@Override
public void start(Stage primaryStage) {
try {
stage = primaryStage; // Set the value of primaryStage to stage
primaryStage.setScene(new Scene(openScene("Login"))); // Load Login window
primaryStage.show(); // Show the scene
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(stage);// <-- Here it has the value of primaryStage obviously
}
@FXML
void buttonClick(ActionEvent event) throws IOException {
// Note that even if I try to print here, the value of stage is still
// null, so the code doesn't affect it
// Also, this loads what I want, I just can't change the size.
try{
pane.getChildren().clear(); // Clear currently displayed content
pane.getChildren().add(openScene("MainScene")); // Display new content
System.out.println(stage); // <-- Here, output is null, but I don't know why
stage.setWidth(500); // This line throws error because stage = null
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
public Parent openScene(String name) throws IOException {
//Code from FXML login example
Parent parent = (Parent) FXMLLoader.load(PrijavnoOkno.class.getResource(name
+ ".fxml"), null, new JavaFXBuilderFactory());
return parent;
}
public static void main(String[] args) {
launch(args);
}
}
謝謝你的回答。我並沒有真正想到這一點。和這個類被稱爲PrijavnoOkno,然後我改變了應用(PrijavnoOkno意味着登錄窗口,如果你從slovene:D翻譯它)。但是我沒有想到讓實例能夠做到這一點,這可能是我在尋找的東西,當我回家的時候我必須對它進行測試。我會在一小時內彙報,再次感謝。 – 2012-08-13 14:15:29
工作,謝謝你的建議。我想我應該在進入編碼之前看過一些教程。我現在已經研究了一些關於控制器的例子,現在一切似乎都更加清晰。再次感謝您的回答。 (也對不起雙重職位) – 2012-08-13 16:14:37