然后调用下面的方法来显示和隐藏窗口/舞台。 第一次单击时,该窗口可见,然后再次单击时,该窗口应隐藏。每次单击按钮时,窗口应在可见和不可见状态之间切换。
在initialize方法中,我已将isMyHomeVisible
初始化为 false 。
但是,在我的情况下,在primaryStage上调用hide()
的行会抛出 NullPointerException 。不知道为什么会这样。
public void onMyHomeButtonClicked() {
if (!isMyHomeVisible) {
try {
root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
Scene scene = new Scene((Parent) root, 1400, 800);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
Stage primaryStage = new Stage();
primaryStage.setScene(scene);
primaryStage.setResizable(false);
primaryStage.setHeight(910);
primaryStage.setWidth(1335);
primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("MyHome.png")));
primaryStage.show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
isMyHomeVisible = true;
} else {
primaryStage.hide();
isMyHomeVisible = false;
}
}
不确定为什么会这样。在同一个控制器中,我还有另一种方法,可以使皮革按预期工作。以下是将皮革用作护身符的方法。
public void onSpaceTabButtonClicked() {
if (!isSpaceTabVisible) {
try {
root = FXMLLoader.load(getClass().getResource("SpaceTab.fxml"));
scene = new Scene((Parent) root, 1400, 800);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
scene.setFill(Color.TRANSPARENT);
primaryStage = new Stage();
primaryStage.setScene(scene);
primaryStage.setResizable(false);
primaryStage.setHeight(309);
primaryStage.setWidth(760);
primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("DX-logo1.png")));
primaryStage.initStyle(StageStyle.UNDECORATED);
primaryStage.initStyle(StageStyle.TRANSPARENT);
primaryStage.show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// to be able to move the new undecorated window
scene.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
xOffset = event.getSceneX();
yOffset = event.getSceneY();
}
});
scene.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
primaryStage.setX(event.getScreenX() - xOffset);
primaryStage.setY(event.getScreenY() - yOffset);
}
});
isSpaceTabVisible = true;
} else {
primaryStage.hide();
isSpaceTabVisible = false;
}
}