From 2bb0c8a9bbf33926f4eef7e9f7ce7db938431436 Mon Sep 17 00:00:00 2001 From: Nils Dittberner Date: Thu, 19 Nov 2015 22:13:28 +0100 Subject: [PATCH] Supercoolen Listener fuer Keyeingaben in die Comboboxen eingebaut. --- .../mi/projmi6/controller/DiagnoseController.java | 123 +++++++++------------ .../controller/PatientTablesController.java | 2 + .../controller/StationsHistorieController.java | 29 ++--- .../controller/UntersuchungenController.java | 24 ++-- .../mi/projmi6/view/SelectKeyComboBoxListener.java | 87 +++++++++++++++ 5 files changed, 171 insertions(+), 94 deletions(-) create mode 100644 src/main/java/de/uniluebeck/mi/projmi6/view/SelectKeyComboBoxListener.java diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/DiagnoseController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/DiagnoseController.java index 97aab52..29c9bbd 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/DiagnoseController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/DiagnoseController.java @@ -5,7 +5,11 @@ package de.uniluebeck.mi.projmi6.controller; */ import de.uniluebeck.mi.projmi6.db.DBHandler; -import de.uniluebeck.mi.projmi6.model.*; +import de.uniluebeck.mi.projmi6.model.DiagArt; +import de.uniluebeck.mi.projmi6.model.Diagnose; +import de.uniluebeck.mi.projmi6.model.Icd10Code; +import de.uniluebeck.mi.projmi6.model.Mitarbeiter; +import de.uniluebeck.mi.projmi6.view.SelectKeyComboBoxListener; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.FXCollections; @@ -13,14 +17,43 @@ import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.*; -import javafx.event.ActionEvent; import javafx.scene.layout.GridPane; public class DiagnoseController { + SimpleObjectProperty state = new SimpleObjectProperty<>(State.VIEW); + @FXML + Button btnDiagAbort, btnDiagEdit; private MainController mainController; + private SimpleObjectProperty> diagnosen = new SimpleObjectProperty<>(); + @FXML + private ListView diagnoseList; + @FXML + private GridPane fields; + @FXML + private ComboBox diagDiagnoseArzt; + @FXML + private Label diagCreator; + @FXML + private Button btnDiagCancel; + @FXML + private TextArea diagFreitext; + @FXML + private Button btnDiagSave; + @FXML + private Label diagCreateTime; + @FXML + private ComboBox diagDiagnoseArt; + @FXML + private Label diagChanger; + @FXML + private ComboBox diagDiagnose; + @FXML + private Label diagChangeTime; + @FXML + private Button btnDiagCreate; - public DiagnoseController(MainController mainController){ + public DiagnoseController(MainController mainController) { this.mainController = mainController; } @@ -28,24 +61,14 @@ public class DiagnoseController { return diagnosen.get(); } - public SimpleObjectProperty> diagnosenProperty() { - return diagnosen; - } - public void setDiagnosen(ObservableList diagnosen) { this.diagnosen.set(diagnosen); } - private SimpleObjectProperty> diagnosen = new SimpleObjectProperty<>(); - - - - public enum State { - CREATE, EDIT, VIEW + public SimpleObjectProperty> diagnosenProperty() { + return diagnosen; } - SimpleObjectProperty state = new SimpleObjectProperty<>(State.VIEW); - public State getState() { return state.get(); } @@ -54,14 +77,13 @@ public class DiagnoseController { return state; } - - @FXML - private ListView diagnoseList; - @FXML - public void initialize(){ + public void initialize() { diagDiagnose.itemsProperty().bind(mainController.getStammdaten().icd10CodesProperty()); + + new SelectKeyComboBoxListener(diagDiagnose); + diagDiagnoseArt.setItems(FXCollections.observableArrayList(DiagArt.values())); diagDiagnoseArzt.itemsProperty().bind(mainController.getStammdaten().mitarbeiterProperty()); @@ -73,9 +95,9 @@ public class DiagnoseController { diagnoseList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); diagnoseList.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { - if(newValue==null){ + if (newValue == null) { clearFields(); - }else{ + } else { copyDiagnoseDataIntoFields(newValue); } }); @@ -83,8 +105,7 @@ public class DiagnoseController { } - - private void initButtons(){ + private void initButtons() { btnDiagCreate.disableProperty().bind(mainController.fallProperty().isNull()); btnDiagEdit.disableProperty().bind(diagnoseList.getSelectionModel().selectedItemProperty().isNull()); @@ -102,62 +123,22 @@ public class DiagnoseController { } @FXML - Button btnDiagAbort, btnDiagEdit; - - - @FXML - private void clickedEdit(){ + private void clickedEdit() { state.set(State.EDIT); } @FXML - private void clickedAbort(){ + private void clickedAbort() { state.set(State.VIEW); Diagnose diagnose = diagnoseList.getSelectionModel().getSelectedItem(); - if(diagnose==null){ + if (diagnose == null) { clearFields(); - }else{ + } else { copyDiagnoseDataIntoFields(diagnose); } } @FXML - private GridPane fields; - - @FXML - private ComboBox diagDiagnoseArzt; - - @FXML - private Label diagCreator; - - @FXML - private Button btnDiagCancel; - - @FXML - private TextArea diagFreitext; - - @FXML - private Button btnDiagSave; - - @FXML - private Label diagCreateTime; - - @FXML - private ComboBox diagDiagnoseArt; - - @FXML - private Label diagChanger; - - @FXML - private ComboBox diagDiagnose; - - @FXML - private Label diagChangeTime; - - @FXML - private Button btnDiagCreate; - - @FXML void clickedDiagCreate(ActionEvent event) { this.state.set(State.CREATE); } @@ -185,8 +166,6 @@ public class DiagnoseController { mainController.refreshCaseData(); } - - private void copyDiagnoseDataIntoFields(Diagnose diagnose){ diagDiagnoseArzt.setValue(diagnose.getArzt()); @@ -224,4 +203,8 @@ public class DiagnoseController { diagChanger.setText(""); diagChangeTime.setText(""); } + + public enum State { + CREATE, EDIT, VIEW + } } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientTablesController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientTablesController.java index cc683d9..a96a150 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientTablesController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientTablesController.java @@ -8,6 +8,7 @@ import de.uniluebeck.mi.projmi6.db.DBHandler; import de.uniluebeck.mi.projmi6.model.Patient; import de.uniluebeck.mi.projmi6.model.Station; import de.uniluebeck.mi.projmi6.model.StationsUebersichtsItem; +import de.uniluebeck.mi.projmi6.view.SelectKeyComboBoxListener; import javafx.beans.binding.Bindings; import javafx.beans.binding.ObjectBinding; import javafx.collections.FXCollections; @@ -123,6 +124,7 @@ public class PatientTablesController { tblStationOverview.disableProperty().bind(cmbStationenFilter.valueProperty().isNull()); cmbStationenFilter.itemsProperty().bind(mainController.getStammdaten().stationenProperty()); + new SelectKeyComboBoxListener(cmbStationenFilter); patientObjectBinding = Bindings.createObjectBinding(() -> { diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/StationsHistorieController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/StationsHistorieController.java index 83f7715..eeb8658 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/StationsHistorieController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/StationsHistorieController.java @@ -4,6 +4,7 @@ import de.uniluebeck.mi.projmi6.db.DBHandler; import de.uniluebeck.mi.projmi6.model.Station; import de.uniluebeck.mi.projmi6.model.StationsHistorie; import de.uniluebeck.mi.projmi6.view.DateTimePicker; +import de.uniluebeck.mi.projmi6.view.SelectKeyComboBoxListener; import javafx.beans.binding.Bindings; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.SimpleObjectProperty; @@ -35,6 +36,8 @@ public class StationsHistorieController { GridPane fields; @FXML Button btnStatHistEdit; + @FXML + Button btnStatHistDelete; /** * The station history that is shown in the edit window, or null if a new station history should be created. */ @@ -58,9 +61,10 @@ public class StationsHistorieController { private ComboBox cmbAbteilung; private SimpleObjectProperty> stationsHistorie = new SimpleObjectProperty<>(); + @FXML + private Button btnStatHistCreate; - - public StationsHistorieController(MainController mainController){ + public StationsHistorieController(MainController mainController) { this.mainController = mainController; } @@ -78,9 +82,6 @@ public class StationsHistorieController { } @FXML - private Button btnStatHistCreate; - - @FXML private void initialize() { initColumns(); @@ -137,6 +138,8 @@ public class StationsHistorieController { cmbAbteilung.getItems().add(0, any); cmbAbteilung.getSelectionModel().select(0); + new SelectKeyComboBoxListener(cmbAbteilung); + tblStationsHistorie.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { setStationsHistorieSelected(newValue); }); @@ -153,6 +156,7 @@ public class StationsHistorieController { cmbStation.setItems(stationenFiltered); + new SelectKeyComboBoxListener(cmbStation); } @FXML @@ -171,7 +175,7 @@ public class StationsHistorieController { e.printStackTrace(); } mainController.refreshCaseData(); - }else{ + } else { copyFieldDataIntoStationsHistorie(stationsHistorieSelected); try { DBHandler.setStationsHistorie(stationsHistorieSelected, true); @@ -190,16 +194,16 @@ public class StationsHistorieController { } @FXML - private void clickedCreateAufenthalt(){ + private void clickedCreateAufenthalt() { this.state.set(State.CREATE); setStationsHistorieSelected(null); } @FXML - private void clickedDelete(){ + private void clickedDelete() { StationsHistorie selectedItem = tblStationsHistorie.getSelectionModel().getSelectedItem(); - if(!LocalDateTime.now().isBefore(selectedItem.getAufnahmeDatum())){ + if (!LocalDateTime.now().isBefore(selectedItem.getAufnahmeDatum())) { Alert alert = new Alert(Alert.AlertType.WARNING); alert.setTitle("Stationsaufenthalt kann nicht entfernt werden!"); alert.setHeaderText(null); @@ -210,9 +214,9 @@ public class StationsHistorieController { return; } - try{ + try { DBHandler.delStationsHistorie(selectedItem); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } @@ -221,9 +225,6 @@ public class StationsHistorieController { } - @FXML - Button btnStatHistDelete; - public ObservableList getStationsHistorie() { return stationsHistorie.get(); } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/UntersuchungenController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/UntersuchungenController.java index d5cdb30..bb5ee64 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/UntersuchungenController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/UntersuchungenController.java @@ -4,10 +4,12 @@ package de.uniluebeck.mi.projmi6.controller; * Created by 626947 on 12.11.15. */ -import de.uniluebeck.mi.projmi6.Main; import de.uniluebeck.mi.projmi6.db.DBHandler; -import de.uniluebeck.mi.projmi6.model.*; +import de.uniluebeck.mi.projmi6.model.Mitarbeiter; +import de.uniluebeck.mi.projmi6.model.OpsCode; +import de.uniluebeck.mi.projmi6.model.Untersuchung; import de.uniluebeck.mi.projmi6.view.DateTimePicker; +import de.uniluebeck.mi.projmi6.view.SelectKeyComboBoxListener; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.ObservableList; import javafx.event.ActionEvent; @@ -61,28 +63,30 @@ public class UntersuchungenController { @FXML private ComboBox untsArzt; + private SimpleObjectProperty> untersuchungen = new SimpleObjectProperty<>(); - public ObservableList getUntersuchungen() { - return untersuchungen.get(); + public UntersuchungenController(MainController mainController) { + this.mainController = mainController; } - public SimpleObjectProperty> untersuchungenProperty() { - return untersuchungen; + public ObservableList getUntersuchungen() { + return untersuchungen.get(); } public void setUntersuchungen(ObservableList untersuchungen) { this.untersuchungen.set(untersuchungen); } - private SimpleObjectProperty> untersuchungen = new SimpleObjectProperty<>(); - - public UntersuchungenController (MainController mainController){ - this.mainController = mainController; + public SimpleObjectProperty> untersuchungenProperty() { + return untersuchungen; } @FXML public void initialize(){ untsOpsCode.itemsProperty().bind(mainController.getStammdaten().opsCodesProperty()); + + new SelectKeyComboBoxListener(untsOpsCode); + untsList.itemsProperty().bind(untersuchungen); untsArzt.setItems(mainController.getStammdaten().getMitarbeiter()); diff --git a/src/main/java/de/uniluebeck/mi/projmi6/view/SelectKeyComboBoxListener.java b/src/main/java/de/uniluebeck/mi/projmi6/view/SelectKeyComboBoxListener.java new file mode 100644 index 0000000..d9f2306 --- /dev/null +++ b/src/main/java/de/uniluebeck/mi/projmi6/view/SelectKeyComboBoxListener.java @@ -0,0 +1,87 @@ +package de.uniluebeck.mi.projmi6.view; + +import com.sun.javafx.scene.control.skin.ComboBoxListViewSkin; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.ObservableList; +import javafx.event.EventHandler; +import javafx.scene.control.ComboBox; +import javafx.scene.control.ListView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; + +/** + * Created by nils on 19.11.2015. + *

+ * Geklaut von hier + */ +public class SelectKeyComboBoxListener implements EventHandler { + + private ComboBox comboBox; + private StringBuilder sb = new StringBuilder(); + + public SelectKeyComboBoxListener(ComboBox comboBox) { + this.comboBox = comboBox; + this.comboBox.setOnKeyReleased(SelectKeyComboBoxListener.this); + + this.comboBox.addEventFilter(KeyEvent.KEY_RELEASED, new EventHandler() { + @Override + public void handle(KeyEvent event) { + if (event.getCode() == KeyCode.ESCAPE && sb.length() > 0) { + sb.delete(0, sb.length()); + } + } + }); + + // add a focus listener such that if not in focus, reset the filtered typed keys + this.comboBox.focusedProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Object oldValue, Object newValue) { + if (newValue instanceof Boolean && !((Boolean) newValue).booleanValue()) + sb.delete(0, sb.length()); + else { + ListView lv = ((ComboBoxListViewSkin) SelectKeyComboBoxListener.this.comboBox.getSkin()).getListView(); + lv.scrollTo(lv.getSelectionModel().getSelectedIndex()); + } + } + }); + + this.comboBox.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent event) { + ListView lv = ((ComboBoxListViewSkin) SelectKeyComboBoxListener.this.comboBox.getSkin()).getListView(); + lv.scrollTo(lv.getSelectionModel().getSelectedIndex()); + } + }); + } + + @Override + public void handle(KeyEvent event) { + if (event.getCode() == KeyCode.DOWN || event.getCode() == KeyCode.UP || event.getCode() == KeyCode.TAB) { + return; + } else if (event.getCode() == KeyCode.BACK_SPACE && sb.length() > 0) { + sb.deleteCharAt(sb.length() - 1); + } else { + sb.append(event.getText()); + } + + if (sb.length() == 0) + return; + + boolean found = false; + ObservableList items = comboBox.getItems(); + for (int i = 0; i < items.size(); i++) { + if (event.getCode() != KeyCode.BACK_SPACE && items.get(i).toString().toLowerCase().startsWith(sb.toString().toLowerCase())) { + ListView lv = ((ComboBoxListViewSkin) comboBox.getSkin()).getListView(); + lv.getSelectionModel().clearAndSelect(i); + lv.scrollTo(lv.getSelectionModel().getSelectedIndex()); + found = true; + break; + } + } + + if (!found && sb.length() > 0) + sb.deleteCharAt(sb.length() - 1); + } +} \ No newline at end of file