Lernstoff 2CHIF für PLF-4 am Di,2024-05-14

1. Schwerpunkte

--> wird noch "angereichert" !!! <--

Die in den letzten Beispielen verwendeten Konzepte, z.B.:

  • JavaFX-Projekt auf Laufwerk Z: erstellen mit GroupID plf4, ArtifactID meier (eigener Nachname in Kleinbuchstaben). Daraus ergibt sich ein Package-Name plf4.meier.

  • Maven-Projekt konfigurieren:

    1. POM-File kontrollieren bzw. ausbessern

    2. Rechtsklick darauf, im Popup-Menü " + Add as Maven Project"

    3. erster Lauf HelloApplication z. Download der JavaFX-Bibliotheken (Fortschrittsbalken unten sichtbar)

    4. Source und Javadoc herunterladen (nun müsste in Zeile …​ = new Scene(…​) width und height eingeblendet werden)

  • Serialisierung: Import Serializable, Schreiben mit ObjectOutputStream, Lesen mit ObjectInputStream

  • Sortieren von Listen mit liste.sort(new Comparator<Typ>()) (siehe List - sort)

  • Erzeugen gefilterte Listen aus bestehenden Listen

  • Rethrowen von Checked Exceptions als Unchecked Exc. mit Weitergabe des Exception-Objekts (wichtig z.B. in Lambda-Ausdrücken, wo in der zugrunde liegenden Interface-Def. oft keine Checked Exc. vorgesehen):
    try { throw new IOException("fake exception"); } catch (IOException ex) {
          throw new RuntimeException(ex); } // Exception-Objekt ex weitergeben!

  • LocalDate: Erzeugen: now(), of(…​), parse(…​), formatieren, Jahr etc. zurückliefern, etc.

  • Lesen und Schreiben von Text/CSV-Dateien mit BufferedReader, BufferedWriter oder PrintWriter. (Try with Resources ist PLICHT!)

  • FileChooser zum Öffnen (showOpenDialog(…​)) und Speichern (showSaveDialog(…​)) von Dateien

  • MVC (Model-View-Controller)

  • Layout: (z.B. BorderPane, GridPane, HBox, VBox, …​)

  • Menus: MenuBar, Menu, MenuItem

  • Wichtige einfache Controls: TextField, Button, Label, CheckBox, RadioButton mit ToggleGroup, etc.

  • Wichtige erweiterte Controls: ComboBox, ListView (basieren beide auf ObservableList)

  • DatePicker

  • Alert

  • Dialog<R>, wobei R der Rückgabetyp ist (z.B. Person)

    • mit Dialog - setResultConverter auf z.B. Person (immer wenn Rückgabetyp R nicht ButtonType),

    • Erzeugen ButtonType Instanzen, dann getDialogPane().getButtonTypes().addAll(btOK, btCancel);

    • Aufruf Dialog mit z.B.:
      Optional<Person> persOpt = dialog.showAndWait();
      if (persOpt.isPresent())   { person = persOpt.get(); …​ }

    • Abfangen des OK-Buttons (Beispiel in Dialog-Javadoc-Seite – Suche Strg+F darin z.B. nach Intercepting Button Actions oder EventFilter)

  • Vererbungshierarchie von Nodes siehe auch JavaFX Layouts, Containers, Nodes^

  • Setzen von EventFilter und EventHandler möglich auf alles, was von Node erbt (fast alles außer Scene, MenuItem, etc. – siehe darüber):

    • aNode.addEventFilter(…​) und analog: aNode.addEventHandler(…​)

    • Sowohl Filter als auch Handler sehen genau gleich aus:
      z.B. aNode.addEventFilter(MouseEvent.MOUSE_CLICKED, event -> { …​ });

    • Bei den meisten Events liefert event.getSource() das Objekt, auf das geklickt wurde (z.B. Button, CheckBox, …​).
      Mit if (event.getSource() instanceof Button btn) { …​ } kann typabhängig reagiert werden – z.B. mit String id = btn.getId(); (oder id = (String)btn.getUserData(); ) kann für jeden Event-Auslöser spezifisch gearbeitet werden.

  • Events:

    • ActionEvent (z.B. Button, MenuItem, CheckBox, ComboBox, …​ mit setOnAction(…​))

    • MouseEvent

    • WindowEvent: üblicherweise f. stage, z.B. :
      stage.addEventFilter(WindowEvent.WINDOW_CLOSE_REQUEST, event -> { event.consume(); })

  • ChangeListener (an Properties) v.a. für ListView SelectionModel (ListView - getSelectionModel mit MultipleSelectionModel und SingleSelectionModel)

  • ListView mit getSelectionModel() …​ in Arbeit!!

  • Switch zw. Views …​ in Arbeit!!

  • GESTRICHEN: Property-Binding (OPTIONAL, max. f. Bonus-Aufgaben)

2. Moodle-Folien etc.

3. Wichtige Tastenkürzel:

  • Anzeige Methoden-Parameterliste: Cursor auf Methodenname oder in Param-Klammer, dann Strg+P

  • Javadoc zu Klasse/Methode im Browser: Cursor auf Klasse/Methode, dann Shift+F1 (Voraussetzung: Javadoc per Maven heruntergeladen – siehe oben)

  • Refactor - Rename: Cursor auf Bezeichner, dann Shift+F6 (Klassen, Methoden, Variablen, …​)

4. Serialization

https://www.baeldung.com/java-serialization [Introduction to Java Serialization | Baeldung^] …​ 2024-05-08

https://www.tutorialspoint.com/java/java_serialization.htm [Java - Serialization^] …​ 2024-05-08

5. Events und Listeners

(z.B. EventHandler, ChangeListener, InvalidationListener, …​)

https://www.tutorialspoint.com/javafx/javafx_event_handling.htm [JavaFX - Event Handling^] …​ 2024-05-08 https://taylorial.com/gui/fxevents/ [taylorial.com^] …​ 2024-05-08

https://stackoverflow.com/questions/45117076/javafx-invalidationlistener-or-changelistener [java - JavaFX InvalidationListener or ChangeListener - Stack Overflow^] …​ 2024-05-08