【问题标题】:How to close and iconify a JavaFx stage如何关闭和图标化 JavaFx 阶段
【发布时间】:2014-04-07 04:47:56
【问题描述】:

在我的 Java Fx 应用程序中,我创建了两个阶段。第一阶段是主控制器类中的默认值,HomeController。第二个 AddNewEmailController 是通过调用 AddNewEmailController 类中的方法 showNewComposeNewEmail() 创建的。

新阶段创建得很好,但我尝试调用的任何方法(例如关闭AddNewEmailController 阶段)都不能在AddNewEmailController 阶段上工作。

我怎样才能让这些方法起作用?

我还希望在 AddNewEmailController 阶段打开后无法访问 HomeController 阶段,就像弹出窗口一样。

我什至无法让AddNewEmailController 舞台iconify

提前谢谢大家。

HomeController 类:

public class HomeController implements Initializable {

// Initializes the controller class.
@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}
@FXML
public void windowClose() {
    Platform.exit();
}

@FXML
public void showNewComposeNewEmail() throws Exception {
    new AddNewEmailController().newnewcomposeNewEmailStage();
}
}

AddNewEmailController 类:

public class AddNewEmailController implements Initializable {

public void setScreenParent(ScreensController screenParent) {
    myController = screenParent;
}

// Initializes the controller class.
@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}

public Stage newComposeNewEmail;

public void newnewcomposeNewEmailStage() throws IOException {
    newComposeNewEmail = new Stage();
    newComposeNewEmail.initStyle(StageStyle.UNDECORATED);
    newComposeNewEmail.initStyle(StageStyle.TRANSPARENT);

    Parent newComposeNewEmailRoot = FXMLLoader.load(getClass().getResource("/wakiliproject/Forms/AddNew/NewEmail/NewEmail.fxml"));

    StageDraggable.stageDraggable(newComposeNewEmailRoot, newComposeNewEmail);

    Scene newComposeNewEmailScene = new Scene(newComposeNewEmailRoot, 590, 670);

    newComposeNewEmail.setScene(newComposeNewEmailScene);
    newComposeNewEmail.show();
}

@FXML
private void newComposeNewEmailClose() {
    newComposeNewEmail.close();
}

@FXML
private void newComposeNewEmailIconify() {
    newComposeNewEmail.setIconified(true);
}
}

更新:

NewEmail FXML:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="wakiliproject.Forms.AddNew.NewEmail.TryEMailController">
  <children>
    <Label layoutX="190.0" layoutY="61.0" onMouseClicked="#newComposeNewEmailStageIconify" text="Minimise Window" />
    <Label layoutX="300.0" layoutY="61.0" onMouseClicked="#newComposeNewEmailStageClose" text="Close Window" />
  </children>
</AnchorPane>

【问题讨论】:

  • 你怎么打电话给newComposeNewEmailClose()
  • @ItachiUchiha。谢谢你看我的问题。我使用 JavaFx SceneBuilder 将 newComposeNewEmailClose() 方法附加到 AddNewEmail FXML 文件的 Label\ Button
  • 嗯,应该可以,你能附上你的 FXML 吗?
  • @ItachiUchiha。我刚刚添加了 NewEmail FXML。希望你能帮忙

标签: java javafx


【解决方案1】:

在您的 fxml 中,您的 controller

fx:controller="wakiliproject.Forms.AddNew.NewEmail.TryEMailController"

在您的代码中,类名是

AddNewEmailController

请使它们相同并重新检查,您的方法将被调用。

为了使新阶段成为父级的子级,请使用

newStage.initModality(Modality.WINDOW_MODAL);
newStage.initOwner(PrimaryStage);

【讨论】:

  • 谢谢。这是很大的帮助。
猜你喜欢
  • 2014-04-21
  • 1970-01-01
  • 2012-04-30
  • 2014-12-24
  • 2018-09-29
  • 2017-11-10
  • 2015-06-11
  • 2012-08-25
相关资源
最近更新 更多