zamknij okno fxml kodem, javafx
Muszę zamknąć bieżące okno fxml kodem w kontrolerze
Znam scenę.close() lub stage.hide () zrób to w fx
Jak zaimplementować to w fxml? Próbowałem
private void on_btnClose_clicked(ActionEvent actionEvent) {
Parent root = FXMLLoader.load(getClass().getResource("currentWindow.fxml"));
Scene scene = new Scene(root);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
}
Ale to nie działa!
Wszelka pomoc będzie bardzo mile widziana. Dzięki! 7 answers
- Podaj swój przycisk zamykania fx:id, jeśli jeszcze tego nie zrobiłeś:
<Button fx:id="closeButton" onAction="#closeButtonAction">
-
W klasie kontrolera:
@FXML private javafx.scene.control.Button closeButton; @FXML private void closeButtonAction(){ // get a handle to the stage Stage stage = (Stage) closeButton.getScene().getWindow(); // do what you have to do stage.close(); }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-28 09:55:25
Jeśli masz okno, które rozszerza javafx.application.Application;
możesz użyć następującej metody.
Platform.exit();
Przykład:
public class MainGUI extends Application {
.........
Button exitButton = new Button("Exit");
exitButton.setOnAction(new ExitButtonListener());
.........
public class ExitButtonListener implements EventHandler<ActionEvent> {
@Override
public void handle(ActionEvent arg0) {
Platform.exit();
}
}
Edit for the beauty of Java 8:
public class MainGUI extends Application {
.........
Button exitButton = new Button("Exit");
exitButton.setOnAction(actionEvent -> Platform.exit());
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-05 20:34:45
Zaimplementowałem to w następujący sposób po otrzymaniu NullPointerException
z zaakceptowanej odpowiedzi.
W moim FXML:
<Button onMouseClicked="#onMouseClickedCancelBtn" text="Cancel">
In my Controller
class:
@FXML public void onMouseClickedCancelBtn(InputEvent e) {
final Node source = (Node) e.getSource();
final Stage stage = (Stage) source.getScene().getWindow();
stage.close();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 05:18:13
Nie jestem pewien, czy to jest najlepszy sposób (lub czy to działa), ale możesz spróbować:
private void on_btnClose_clicked(ActionEvent actionEvent) {
Window window = getScene().getWindow();
if (window instanceof Stage){
((Stage) window).close();
}
}
(zakładając, że twój kontroler jest węzłem. W przeciwnym razie musisz najpierw pobrać węzeł (getScene() jest metodą węzła)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-27 17:56:51
Znalazłem fajne rozwiązanie, które nie wymaga wywołania zdarzenia:
@FXML
private Button cancelButton;
close(new Event(cancelButton, stage, null));
@FXML
private void close(Event event) {
((Node)(event.getSource())).getScene().getWindow().hide();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-25 09:42:05
Można to po prostu osiągnąć za pomocą,
@FXML
private void closeAction(ActionEvent evt){
System.exit(0);
}
Zrobi to za ciebie.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-29 13:19:09
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent we) {
Platform.setImplicitExit(false);
stage.close();
}
});
Jest odpowiednikiem hide
. Więc kiedy zamierzasz go otworzyć następnym razem, po prostu sprawdź, czy obiekt stage
jest zamknięty, czy nie. Jeśli jest wyłączony, wystarczy show()
tzn. (stage.show())
zadzwonić. W przeciwnym razie musisz zacząć scenę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-09 15:32:15