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 GroupIDplf4
, ArtifactIDmeier
(eigener Nachname in Kleinbuchstaben). Daraus ergibt sich ein Package-Nameplf4.meier
. -
Maven-Projekt konfigurieren:
-
POM-File kontrollieren bzw. ausbessern
-
Rechtsklick darauf, im Popup-Menü " + Add as Maven Project"
-
erster Lauf HelloApplication z. Download der JavaFX-Bibliotheken (Fortschrittsbalken unten sichtbar)
-
Source und Javadoc herunterladen (nun müsste in Zeile
… = new Scene(…)
width
undheight
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
oderPrintWriter
. (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, …)
-
Wichtige einfache Controls: TextField, Button, Label, CheckBox, RadioButton mit ToggleGroup, etc.
-
Wichtige erweiterte Controls: ComboBox, ListView (basieren beide auf ObservableList)
-
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
oderEventFilter
)
-
-
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, …).
Mitif (event.getSource() instanceof Button btn) { … }
kann typabhängig reagiert werden – z.B. mitString id = btn.getId();
(oderid = (String)btn.getUserData();
) kann für jeden Event-Auslöser spezifisch gearbeitet werden.
-
-
Events:
-
ActionEvent (z.B. Button, MenuItem, CheckBox, ComboBox, … mit
setOnAction(…)
) -
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)
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