簡體   English   中英

Javafx-如何訪問FXML“對象”

[英]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();

還是這是完全錯誤的方法?

我的問題:

  1. 在fxml文件中聲明所有字段是一個好主意嗎?
  2. 如何獲取對象以訪問值?
  3. 如果它是完全錯誤的方法,怎么辦? (我想使用scenebuilder)

編輯: 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
    }
}
Scene scene = stage.getScene();
Button btn = (Button) scene.lookup("#myBtnID");
TextField txt = (TextField ) scene.lookup("#myTxtID");

您正在尋找:

txt.getText();

btn.setOnAction( lambda here );

說明文件:

紐扣

文本域

編輯:以這種方式聲明ID

<TextField fx:id="myTxtID" ...  />

嘗試使用SceneBuilder 它將產生一個FXML文件和一個兼容的控制器。 這將為您提供一個良好的開端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM