[英]Javafx - how to acces FXML “objects”
我的fxml文件中聲明了一些JavaFX組件。
以及當按下按鈕時如何獲取字段的值(用戶名,密碼)? (執行登錄)。
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
stage.setTitle("Login");
stage.setScene(new Scene(root,400,300));
stage.show();
還是這是完全錯誤的方法?
我的問題:
編輯: https ://hastebin.com/qexipogoma.xml <-我的FXML檔案和我的控制器
在fxml文件中聲明所有字段是一個好主意嗎?
這取決於您的需求。 在這種情況下,您不需要動態添加/刪除場景的任何部分。 成功登錄后,您可能會替換窗口/場景。 通過fxml創建此場景應該沒有任何問題。
如何獲得對象以訪問值?
將控制器與fxml一起使用,並通過此控制器訪問值。
<AnchorPane fx:controller="mypackage.LoginController" ...>
<children>
...
<TextField fx:id="username" ... />
...
<PasswordField fx:id="password" ... />
...
<Button onAction="#login" ... />
</children>
</AnchorPane>
package mypackage;
...
public class LoginController {
private boolean login = false;
@FXML
private TextField username;
@FXML
private PasswordField password;
@FXML
private void login() {
// regular close the login window
login = true;
password.getScene().getWindow().hide();
}
public String getUsername() {
return username.getText();
}
public String getPassword() {
return password.getText();
}
public boolean isLogin() {
return login;
}
public void resetLogin() {
// allow reuse of scene for invalid login data
login = false;
}
}
FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
Stage stage = new Stage(new Scene(loader.load()));
LoginController controller = loader.getController();
boolean loginSuccess = false;
stage.showAndWait();
if (controller.isLogin()) {
if (checkLogin(controller.getUsername(), controller.getPassword())) {
// handle login success
} else {
// handle invalid login
}
}
嘗試使用SceneBuilder 。 它將產生一個FXML文件和一個兼容的控制器。 這將為您提供一個良好的開端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.