From 2da137aea85e4aab48d5df5389da609720f2acb9 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Mon, 1 Dec 2025 14:14:57 +0100 Subject: Add chapters 9-17 for the java book --- Java-Kompendium/kap15/src/main/java/Mark.java | 36 ++++++ Java-Kompendium/kap15/src/main/java/Marks.java | 127 +++++++++++++++++++++ .../kap15/src/main/java/SaveAction.java | 50 ++++++++ .../kap15/src/main/java/SearchAction.java | 44 +++++++ 4 files changed, 257 insertions(+) create mode 100644 Java-Kompendium/kap15/src/main/java/Mark.java create mode 100644 Java-Kompendium/kap15/src/main/java/Marks.java create mode 100644 Java-Kompendium/kap15/src/main/java/SaveAction.java create mode 100644 Java-Kompendium/kap15/src/main/java/SearchAction.java (limited to 'Java-Kompendium/kap15/src/main/java') diff --git a/Java-Kompendium/kap15/src/main/java/Mark.java b/Java-Kompendium/kap15/src/main/java/Mark.java new file mode 100644 index 0000000..d5bf856 --- /dev/null +++ b/Java-Kompendium/kap15/src/main/java/Mark.java @@ -0,0 +1,36 @@ +import javafx.beans.property.StringProperty; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleStringProperty; + +public class Mark { + private StringProperty subject; + private IntegerProperty mark; + + public Mark(String subject, Integer mark) { + subjectProperty().set(subject); + markProperty().set(mark); + } + + public StringProperty subjectProperty() { + if (this.subject == null) { + this.subject = new SimpleStringProperty(this, "subject"); + } + return this.subject; + } + + public IntegerProperty markProperty() { + if (this.mark == null) { + this.mark = new SimpleIntegerProperty(this, "mark"); + } + return this.mark; + } + + public String getSubject() { + return this.subjectProperty().get(); + } + + public Integer getMark() { + return this.markProperty().get(); + } +} diff --git a/Java-Kompendium/kap15/src/main/java/Marks.java b/Java-Kompendium/kap15/src/main/java/Marks.java new file mode 100644 index 0000000..6ec6c06 --- /dev/null +++ b/Java-Kompendium/kap15/src/main/java/Marks.java @@ -0,0 +1,127 @@ +import javafx.application.Application; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.Separator; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.GridPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import java.sql.*; + +public class Marks extends Application { + private GridPane grid; + private Text status; + private Connection connection; + + @Override + public void start(Stage stage) { + this.grid = new GridPane(); + this.createStatus(); + this.createTable(); + this.createForm(); + this.createSearch(); + + this.grid.setVgap(5); + this.grid.setHgap(5); + this.grid.setAlignment(Pos.CENTER); + + var scene = new Scene(this.grid, 500, 400); + + stage.setScene(scene); + stage.setTitle("Noten von Schülern"); + stage.show(); + } + + private void createStatus() { + this.status = new Text(); + + this.grid.add(this.status, 0, 0, 2, 1); + } + + private void createSearch() { + var field = new TextField(); + var button = new Button("Suchen"); + var line = new Separator(); + var table = new TableView(); + + try { + var handler = new SearchAction(this.connection, this.status, field); + table.setItems(handler.getMarks()); + + var subjectColumn = new TableColumn("Fach"); + subjectColumn.setCellValueFactory( + new PropertyValueFactory<>("subject" /* handler.getMarks().get(0).subjectProperty().getName() */) + ); + + var markColumn = new TableColumn("Note"); + markColumn.setCellValueFactory( + new PropertyValueFactory<>("mark" /* handler.getMarks().get(0).markProperty().getName() */) + ); + table.getColumns().setAll(subjectColumn, markColumn); + + button.setOnAction(handler); + } catch (SQLException exception) { + this.status.setText(exception.getMessage()); + } + line.setMinSize(10, 10); + + this.grid.add(line, 0, 6, 2, 1); + this.grid.add(button, 0, 7); + this.grid.add(field, 1, 7); + this.grid.add(table, 0, 8, 2, 1); + } + + private void createForm() { + var nameField = new TextField(); + var nameLabel = new Label("Name"); + var englishField = new TextField(); + var englishLabel = new Label("Englisch"); + var germanField = new TextField(); + var germanLabel = new Label("Deutsch"); + var mathField = new TextField(); + var mathLabel = new Label("Mathematik"); + var saveButton = new Button("Speichern"); + + try { + var action = new SaveAction(this.connection, nameField, englishField, germanField, mathField, this.status); + saveButton.setOnAction(action); + } catch (SQLException exception) { + this.status.setText(exception.getMessage()); + } + + this.grid.add(nameLabel, 0, 1); + this.grid.add(nameField, 1, 1); + this.grid.add(englishLabel, 0, 2); + this.grid.add(englishField, 1, 2); + this.grid.add(germanLabel, 0, 3); + this.grid.add(germanField, 1, 3); + this.grid.add(mathLabel, 0, 4); + this.grid.add(mathField, 1, 4); + this.grid.add(saveButton, 1, 5); + } + + private void createTable() { + try { + var host = "jdbc:hsqldb:mem:mitarbeiter;shutdown=true"; + this.connection = DriverManager.getConnection(host); + var statement = connection.createStatement(); + + statement.executeUpdate(""" + CREATE TABLE IF NOT EXISTS marks ( + mark_id identity PRIMARY KEY, + name VARCHAR, + english integer, + german integer, + math integer + ) + """); + } catch (SQLException exception) { + this.status.setText(exception.getMessage()); + } + } +} diff --git a/Java-Kompendium/kap15/src/main/java/SaveAction.java b/Java-Kompendium/kap15/src/main/java/SaveAction.java new file mode 100644 index 0000000..a1c0e9b --- /dev/null +++ b/Java-Kompendium/kap15/src/main/java/SaveAction.java @@ -0,0 +1,50 @@ +import javafx.event.EventHandler; +import javafx.event.ActionEvent; +import javafx.scene.control.TextField; +import javafx.scene.text.Text; +import java.sql.*; + +public class SaveAction implements EventHandler { + private TextField name; + private TextField english; + private TextField german; + private TextField math; + private Text status; + private PreparedStatement statement; + + public SaveAction( + Connection connection, + TextField name, + TextField english, + TextField german, + TextField math, + Text status + ) throws SQLException { + this.statement = connection.prepareStatement( + "INSERT INTO marks (name, english, german, math) VALUES (?, ?, ?, ?)" + ); + this.name = name; + this.english = english; + this.german = german; + this.math = math; + this.status = status; + } + + public void handle(ActionEvent event) { + try { + this.statement.setString(1, this.name.getText()); + this.statement.setInt(2, Integer.parseInt(this.english.getText())); + this.statement.setInt(3, Integer.parseInt(this.german.getText())); + this.statement.setInt(4, Integer.parseInt(this.math.getText())); + + this.statement.execute(); + + this.name.setText(""); + this.english.setText(""); + this.german.setText(""); + this.math.setText(""); + } catch (SQLException exception) { + this.status.setText(exception.getMessage()); + } + } +} diff --git a/Java-Kompendium/kap15/src/main/java/SearchAction.java b/Java-Kompendium/kap15/src/main/java/SearchAction.java new file mode 100644 index 0000000..45aa84f --- /dev/null +++ b/Java-Kompendium/kap15/src/main/java/SearchAction.java @@ -0,0 +1,44 @@ +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.control.TextField; +import javafx.scene.text.Text; +import java.sql.*; +import javafx.collections.FXCollections; + +public class SearchAction implements EventHandler { + private Text status; + private TextField field; + private PreparedStatement statement; + private ObservableList marks = FXCollections.observableArrayList(); + + public SearchAction(Connection connection, Text status, TextField field) throws SQLException { + this.statement = connection.prepareStatement( + "SELECT english, german, math FROM marks WHERE name LIKE ?" + ); + this.status = status; + this.field = field; + } + + public void handle(ActionEvent action) { + try { + this.statement.setString(1, this.field.getText()); + this.statement.execute(); + + var results = this.statement.getResultSet(); + + this.marks.clear(); + if (results.next()) { + this.marks.add(new Mark("Englisch", results.getInt(1))); + this.marks.add(new Mark("Deutsch", results.getInt(2))); + this.marks.add(new Mark("Mathematik", results.getInt(3))); + } + } catch (Exception exception) { + this.status.setText(exception.getMessage()); + } + } + + public ObservableList getMarks() { + return this.marks; + } +} -- cgit v1.2.3