【发布时间】:2019-01-16 20:49:21
【问题描述】:
我有两个单独的控制器和 FXML 文件。在您控制主窗口的第一个控制器中,您可以在此处按下按钮并打开一个新窗口。
我想阻止用户打开任意数量的窗口。他应该只能打开一扇窗户并再次关闭它,然后才能打开下一扇窗户。
我说的是当你按下按钮时执行的代码。它完美地打开了我的窗口,但我仍然可以在后台打开更多窗口,这不是我想要的。
希望你能给我一些帮助。提前致谢
@FXML
private void addSongsToSelectedPlaylist() throws IOException {
if (tempPlaylistName!="Library"){
// WILL LOAD THE STAGE OF THE POPUP WINDOW AND PROVIDE THE CONSTRUCTOR THE PLAYLIST NAME
// AddSongController addSongController = new AddSongController();
// addSongController.enterSelectionMode(tempPlaylistName);
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("addSongToPlaylistPopUp.fxml"));
Parent root1 = (Parent) fxmlLoader.load();
Stage stage = new Stage();
stage.initModality(Modality.WINDOW_MODAL);
stage.getIcons().add(new Image("sample/images/Music-icon.png"));
stage.setResizable(false);
stage.setAlwaysOnTop(true);
stage.setTitle("Add songs to your playlist");
stage.setScene(new Scene(root1));
stage.showAndWait();
} catch (IOException e){
System.out.println(e.getCause());
}
【问题讨论】:
-
您需要对某个共享状态(可能是
Window本身)的引用来检查另一个窗口是否isShowing。如果是,请不要显示新的。只要showing属性为true(例如使用绑定),您甚至可以禁用该按钮。 -
另外,关于
if (tempPlaylistName != "Library"),请参阅How do I compare strings in Java?。 -
您也可以在新打开的窗口的初始化程序中关闭第一个窗口。您所需要的只是左开窗口的参考。为了方便用户,您可能需要建立某种 exitAndClose() 方法,该方法会询问并保存,以防该窗口中有什么有用的东西。
标签: java javafx controller fxml multiple-instances