From e74ddc99cad79a398b3d99d9cb82deac9d1e62ae Mon Sep 17 00:00:00 2001 From: Nathan McRae Date: Mon, 24 Feb 2025 20:56:24 -0800 Subject: [PATCH] Use enter or esc to select station or cancel dialog --- .../numbersstation/MainController.java | 5 ++- .../StationSelectionController.java | 34 ++++++++++++++----- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/main/java/name/nathanmcrae/numbersstation/MainController.java b/src/main/java/name/nathanmcrae/numbersstation/MainController.java index b47e510..2ad96be 100644 --- a/src/main/java/name/nathanmcrae/numbersstation/MainController.java +++ b/src/main/java/name/nathanmcrae/numbersstation/MainController.java @@ -111,7 +111,10 @@ public class MainController implements Initializable { selectStationStage.initModality(Modality.APPLICATION_MODAL); selectStationStage.setUserData(null); selectStationStage.setTitle("Numbers Station Selection"); - selectStationStage.setScene(new Scene(root)); + + Scene scene = new Scene(root); + scene.addEventFilter(KeyEvent.KEY_PRESSED, (e) -> controller.handleKeyPressed(e)); + selectStationStage.setScene(scene); selectStationStage.show(); selectStationStage.setOnHiding(event -> { String newStationName = (String)selectStationStage.getUserData(); diff --git a/src/main/java/name/nathanmcrae/numbersstation/StationSelectionController.java b/src/main/java/name/nathanmcrae/numbersstation/StationSelectionController.java index 0cee5be..780d2c3 100644 --- a/src/main/java/name/nathanmcrae/numbersstation/StationSelectionController.java +++ b/src/main/java/name/nathanmcrae/numbersstation/StationSelectionController.java @@ -13,6 +13,8 @@ import javafx.scene.control.ButtonType; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.control.TextInputDialog; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; import javafx.event.ActionEvent; import javafx.event.Event; import javafx.scene.Node; @@ -96,6 +98,17 @@ public class StationSelectionController { stage.close(); } + @FXML + public void handleKeyPressed(KeyEvent event) { + KeyCode code = event.getCode(); + if (code == KeyCode.ENTER) { + selectHighlightedStation(); + } else if (code == KeyCode.ESCAPE) { + Stage stage = (Stage) stationListView.getScene().getWindow(); + stage.close(); + } + } + @FXML private void handleRemoveButtonPress(ActionEvent event) { int selectedIndex = stationListView.getSelectionModel().getSelectedIndex(); @@ -115,15 +128,7 @@ public class StationSelectionController { @FXML private void handleSelectButtonPress(Event e) { - Node node = (Node) e.getSource(); - Stage stage = (Stage) node.getScene().getWindow(); - StationSettings selectedStation = stationListView.getSelectionModel().getSelectedItem(); - - if (selectedStation != null) { - stage.setUserData(selectedStation.getName()); - System.out.println("Selected Station: " + selectedStation.getName()); - } - stage.close(); + selectHighlightedStation(); } private void onStationListChanged(ListChangeListener.Change change) { @@ -155,4 +160,15 @@ public class StationSelectionController { settings.getStations().addAll(stationList); settings.save(); } + + private void selectHighlightedStation() { + Stage stage = (Stage) stationListView.getScene().getWindow(); + StationSettings selectedStation = stationListView.getSelectionModel().getSelectedItem(); + + if (selectedStation != null) { + stage.setUserData(selectedStation.getName()); + System.out.println("Selected Station: " + selectedStation.getName()); + } + stage.close(); + } }