我目前正在尝试在单击按钮时制作窗口(场景)更改器。具体来说,是在用户登录时更改窗口。我想知道如何减少冗余代码,并将负责更改窗口的方法放在一个集中的位置。是否有特定的设计模式可遵循?
到目前为止,我有这个:
主程序.java
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = (Parent) FXMLLoader.load(getClass().getResource("Login.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add("Styles.css");
stage.setScene(scene);
stage.setTitle("App");
stage.setResizable(false);
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
登录控制器.java
public class LoginController implements Initializable {
@FXML
private TextField email;
@FXML
private PasswordField password;
@FXML
private Button buttonLogin;
private Stage stage;
@Override
public void initialize(URL url, ResourceBundle rb) {}
@FXML
private void login(ActionEvent event) throws Exception {
stage = (Stage) buttonLogin.getScene().getWindow();
Parent root = (Parent) FXMLLoader.load(getClass().getResource("Profile.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add("Styles.css");
stage.setScene(scene);
stage.centerOnScreen();
stage.show();
}
}
Thanks!
对于动态变化的阶段,您可以(我当前正在使用此方法)拥有一个 AnchorPane。假设您的根目录顶部有一个 AnchorPane。您可以使用此窗格更改场景。
首先,在控制器中声明 AnchorPane :
@FXML
AnchorPane dynamicPane;
然后,您应该提供一个方法(具体来说是一个 setter),它看起来像,
private void setDynamicPane(AnchorPane dynamicPane){
this.dynamicPane.getChildren().clear();
this.dynamicPane.getChildren().add(dynamicPane);
}
然后一切就完成了,现在您可以通过简单地在按钮的 ActionEvent 中调用它来更改场景,如下所示,
@FXML
private void yourButtonAction(ActionEvent evt){
setDynamicPane(FXMLLoader.load(getClass().getResources("path/to/your/file.fxml"));
}
就这样!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)