View Full Version : سوال: بستن فرم لاگین در JAVAFX
kingtak
پنج شنبه 24 اردیبهشت 1394, 00:22 صبح
سلام دوستان
من توی برنامم یک فرم لاگین دارم که بعد از لاگین شدن به فرم اصلی برنامه باید فرم لاگین بسته بشه.یعنی فقط فرم لاگین بسته بشه و فرم اصلی سر جاش بمونه.....کسی میتونه کمکم کنه؟
[younes]
پنج شنبه 24 اردیبهشت 1394, 06:29 صبح
بستن کامل نمیدونم اما میتونید با اسفاده از متد hide از کلاس stage پنهانش کنید. پس با فرض این که فرم لاگین نقطه ورود برنامتون باشه باید stage مربوطه در کلاس controller فرم لاگین قابل دسترسی باشه .
@Override
public void start(Stage stage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
Parent root = (Parent)loader.load();
FXMLDocumentController controller = (FXMLDocumentController)loader.getController();
controller.stg=stage;
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
و در کلاس کنترولر میتونید بعد از لاگین موفق , فرم لاگین رو hide کنید و به فرم اصلی برید.
public class FXMLDocumentController implements Initializable {
public Stage stg=null;
//..
//.. متد ها و فیلدهای دیگر
//..
//..
private void LoggedIn() {
this.stg.hide();
//...
//...
//... رفتن به فرم اصلی
//...
//...
//...
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
kingtak
پنج شنبه 24 اردیبهشت 1394, 09:46 صبح
آقا من این کار رو کردم ولی کار نکرد.....کدم رو میذارم تا ببینید:
public class LoginController implements Initializable {
@FXML
private TextField txt_username;
@FXML
private PasswordField txt_password;
@FXML
private Button btn_login;
@FXML
private Button btn_cancel;
Stage stage1 = null;
/**
* Initializes the controller class.
*/
@FXML
private void btn_login(ActionEvent event) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("Library.fxml"));
Stage page1Stage = new Stage();
page1Stage.setResizable(false);
page1Stage.setTitle("صفحه اصلی کتابخانه");
Scene scene = new Scene(root);
page1Stage.setScene(scene);
page1Stage.show();
closeLogin();
}
public void closeLogin() {
stage1 = (Stage) stage1.getScene().getWindow();
this.stage1.close();
}
@FXML
public void closeButtonAction() {
Platform.exit();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
مشکل اینجاست که
stage مربوطه در کلاس controller فرم لاگین قابل دسترس نیست.در اصل ما در اینجا یک نمونه از کلاس Stage ساختیم و همون نمونه رو بستیم و ربطی به stage کنترلر فرم لوگین نداره.
این کد اولین کلاس من هست که فرم استیج لاگین رو ایجاد میکنه و کنترل رو میده به کنترلر لاگین(درسته؟).:
public class MyLibrary extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("login.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setResizable(false);
stage.setTitle("Login to JavaFXLibrary");
stage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
kingtak
پنج شنبه 24 اردیبهشت 1394, 12:17 عصر
در نهایت مشکل حل شد:
متد closeLogin باید اینجوری باشه:
public void closeLogin() {
Stage stage1= (Stage)btn_login.getScene().getWindow();
stage1.close();
}
چون اینجا من به stage دسترسی ندارم ولی میتونم از کنترلها بپرسم ویندوشون کیه و بعد او پنجره رو ببندم.
ممنون از توجهتون.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.