Lernstoff 2xHIF PLF Mai 2022
Folgende Konzepte und Komponenten sollten genutzt werden können:
1. JavaFX
1.1. Menüs + Dazugehöriges
-
Hinzufügen eines
MenItem
(samt EventHandler für ActionEvent) insMenu
-
Entfernen eines
MenuItem
ausMenu
-
Disablen(+Enablen) eines
MenuItem
1.2. TabPane
-
Erzeugen der
TabPane
-
Erzeugen eines
Tab
-
Setzen von
title
undcontent
einesTab
-
Hinzufügen (und Entfernen) eines
Tab
zurTabPane
-
Hinzufügen eines ListChangeListeners als Lambda-Ausdruck (siehe Bsp)
-
Auswerten des ListChangeListeners (Change-Objekte durchiterieren mit
while (chg.next()) { if (chg.wasRemoved()) { Tab removedTab = chg.getRemoved().get(0); … }}
)
1.3. VBox, HBox, BorderPane
-
Elemente hinzufügen zu HBox, VBox (children-List):
theBox.getChildren().add(..)
oder per Aufzählung mitaddAll(…)
-
Elemente (meist Panes) hinzufügen zu BorderPane:
theBdPane.setTop(..)
,.setCenter(..)
, … *
1.4. UserData, Id, StyleClass
-
die meisten UI-Elemente haben die Möglichkeit, ein beliebiges Objekt zu speichern:
uiObj.setUserData(someOtherObj)
und wieder abzufragen (Casten nötig, um Zugriff auf alle Methoden etc zu erhalten):
TheClass theClObj = (TheClass)uiObj.getUserData()
.
Damit kann z.B. ein Tab-Objekt eine Referenz und damit vollen Zugriff auf "sein" Duty-Objekt (z.B. ein WordWork-Objekt) erhalten. -
Jedes UI-Element kann eine Id erhalten, die u.a. für Definition von CSS-Eigenschaften für dieses Element genutzt werden können.
Man kann sogar mittelsNode myNode = myScene.lookup("#uiObjId")
das Element (falls es wie die meisten UI-Elemente vonNode
erbt) auffinden (geht leider für Menü-Elemente nicht, da diese nicht vonNode
erben).
Es gibt auchSet<Node> matchingNodes = myNode.lookupAll(".classSel")
(oder "#uiObjId" oder andere CSS-Selektoren). -
Jedes UI-Element kann auch beliebig viele "StyleClass"-Einträge (z.B. als CSS-classes) erhalten: mit
ObservableList<String> styleClasses = uiObj.getStyleClass()
erhält man die Liste.
In dieser kann mitadd(..)
,remove()
,contains()
weitergearbeitet werden.
1.5. Element-Größen, Styling, etc.
Jedes Element, das javafx.css.Styleable
implementiert (fast alle UI-Elemente) kann mit CSS-Mitteln gestylt werden. Entweder mit uiObj.setStyle("-f-xxx: theValue; …")
oder per CSS-Dateien. Dabei werden die aus CSS bekannten sowie einige JavaFX-spezifische Selektoren verwendet (siehe JavaFX 18 CSS Reference Guide).
Eine Basisklasse für den Großteil der UI-Elemente und aller Container ist javafx.scene.layout.Region
(siehe Region (JavaFX 18)).
Für Element-Größen gibt es jeweils 3 Werte: minWidth/minHeight, prefWidth/prefHeight, maxWidth/maxHeight bzw. die Kombination xxxSize(), wobei je nach Container unterschiedliches Verhalten implementiert ist. PrefSize wird von vielen angestrebt.
1.8. FileChooser
-
FileChooser für lesen und Schreiben von Dateien (Bilder, Textdateien)
-
Vorbereiten:
-
Start-Verzeichnis mit
fileChooser.setInitialDirectory(..)
-
vorgeschlagener Dateiname mit
fileChooser.setInitialFileName(..)
-
Vorbereiten Popu-Liste anzuzeigender Datei-Arten (hier
CSV-Files
undAll Files
) mit jeweils mehreren dazugehörigen Endungen (hier "*.csv", "\*.csvdata", …):
fileChooser.getExtensionFilters().addAll(
new ExtensionFilter("CSV-Files", "*.csv", "\*.csvdata", "*.txt"),
new ExtensionFilter("All Files", "*.*"));
-
2. Java ohne FX
2.3. Datei-Operationen
-
Klasse
java.io.File
als Repräsentation eines (vorhandenen oder noch nicht vorhandenen) Dateipfades mit Methoden wieaFile.exists()
,aFile.isDirectory()
, … siehe File (Java SE 17 & JDK 17) | Oracle -
Lesen von Binärdateien (Bilder) mit FileInputstream … siehe Dateien binär lesen
-
Lesen und Schreiben von Text-Dateien mit
-
FileReader … siehe Dateien textuell lesen
-
FileWriter … siehe Dateien textuell schreiben
-
BufferedReader (Hülle um FileReader, für zeilenweises Einlesen) … siehe Dateien textuell lesen
-
String.format(..) und Verwandtes Enums in einfacher Form Collections (mit Generic Element-Typ-Parametern):
Interfaces List⇒ArrayList, Set⇒HashSet, Map⇒HashMap, SortedSet⇒TreeSet Hilfsklassen Collections, Arrays
3. Konzepte in unserer Basis-App
-
Maps, denen Values Listen, Sets oder Maps sind (siehe Klasse Engine): Hinzufügen und Entfernen von Map-Einträgen; Lesen, Hinzufügen, Ändern, Entfernen von Elementen in die Substruktur (siehe wantedSet etc. in der "Engine")
-
Speichern von App-Settings in Properties-Files (wie für Wiederherstellen der Fenster-Position gezeigt)
Hier eine Liste, die teils aus den Import-Statements zusammengestellt ist:
-
Einfache UI-Controls
-
Label
-
TextField
-
TextArea
-
Button
-
Hyperlink
-
ImageView
-
MenuBar
-
Menu
-
MenuItem
-
-
Container und Elemente mit Container-Aspekt
-
BorderPane
-
GridPane
-
HBox
-
VBox
-
TabPane und Tab
-
-
Diverse weitere Klassen
-
javafx.application.Application
-
javafx.stage.Stage
-
javafx.scene.Scene
-
javafx.scene.control.Alert
-
-
File-Operationen
-
java.io.File
-
java.io.FileInputStream
-
java.io.IOException
-
java.io.FileNotFoundException
-
java.io.FileReader
-
java.io.FileWriter
-
java.net.URL
-
java.net.URI
-
java.net.MalformedURLException
-
javafx.stage.FileChooser
-
javafx.stage.FileChooser.ExtensionFilter
-
-
Datum und Zeit
-
LocalDate
-
LocalTime
-
LocalDateTime
-
DateTimeFormatter
-
-
Sonstiges
-
List
-
Set
-
Map
-
Exception
-
RuntimeException
-