summaryrefslogtreecommitdiff
path: root/Java-Kompendium/kap15/src/main/java
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2025-12-01 14:14:57 +0100
committerEugen Wissner <belka@caraus.de>2025-12-01 14:14:57 +0100
commit2da137aea85e4aab48d5df5389da609720f2acb9 (patch)
tree59a3df3f710f9e9b82dd0d49658c27c391018270 /Java-Kompendium/kap15/src/main/java
parenta680b83e47a283106dee9557c5c9ee5dc175551e (diff)
downloadbook-exercises-2da137aea85e4aab48d5df5389da609720f2acb9.tar.gz
Add chapters 9-17 for the java book
Diffstat (limited to 'Java-Kompendium/kap15/src/main/java')
-rw-r--r--Java-Kompendium/kap15/src/main/java/Mark.java36
-rw-r--r--Java-Kompendium/kap15/src/main/java/Marks.java127
-rw-r--r--Java-Kompendium/kap15/src/main/java/SaveAction.java50
-rw-r--r--Java-Kompendium/kap15/src/main/java/SearchAction.java44
4 files changed, 257 insertions, 0 deletions
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<Mark>();
+
+ try {
+ var handler = new SearchAction(this.connection, this.status, field);
+ table.setItems(handler.getMarks());
+
+ var subjectColumn = new TableColumn<Mark, String>("Fach");
+ subjectColumn.setCellValueFactory(
+ new PropertyValueFactory<>("subject" /* handler.getMarks().get(0).subjectProperty().getName() */)
+ );
+
+ var markColumn = new TableColumn<Mark, Integer>("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<ActionEvent> {
+ 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<ActionEvent> {
+ private Text status;
+ private TextField field;
+ private PreparedStatement statement;
+ private ObservableList<Mark> 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<Mark> getMarks() {
+ return this.marks;
+ }
+}