From 11aabb1a2bfc29c49532ae753c1f7cf4d16ff957 Mon Sep 17 00:00:00 2001 From: Selebrator Date: Tue, 4 Jun 2019 22:29:30 +0200 Subject: [PATCH 1/3] Prepare JavaFX with Gradle. start program with 'gradle run' --- build.gradle | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index e47c919..5ed3b31 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,16 @@ -apply plugin: 'java' -apply plugin: 'idea' +plugins { + id 'java' + id 'idea' + id 'application' + id 'org.openjfx.javafxplugin' version '0.0.7' +} compileJava.options.encoding = 'UTF-8' project.ext.junitVersion = '5.3.1' +mainClassName = '_9.HelloWorld' + sourceCompatibility = 1.8 repositories { @@ -16,12 +22,17 @@ dependencies { testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" } +javafx { + version = "12.0.1" + modules = [ 'javafx.controls' ] +} + test { useJUnitPlatform() } task abgabe(type: Zip) { - if(project.hasProperty("n")) { + if (project.hasProperty("n")) { includeEmptyDirs = false from(".") from("src/main/") { @@ -32,7 +43,7 @@ task abgabe(type: Zip) { } include "java/_$n/**/*" include "resources/$n/**/*" - if(!project.hasProperty("p")) { + if (!project.hasProperty("p")) { include "README.md" include "java/provided/*" include "java/provided/_$n/**/*" From 184a4f866444f5d332d7fcbad4d976e6e68150cf Mon Sep 17 00:00:00 2001 From: Selebrator Date: Tue, 4 Jun 2019 23:26:03 +0200 Subject: [PATCH 2/3] 9.1 initial commit --- build.gradle | 2 +- src/main/java/_9/_1/ColorMixer.java | 50 +++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/main/java/_9/_1/ColorMixer.java diff --git a/build.gradle b/build.gradle index 5ed3b31..0d565c6 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ compileJava.options.encoding = 'UTF-8' project.ext.junitVersion = '5.3.1' -mainClassName = '_9.HelloWorld' +mainClassName = '_9._1.ColorMixer' sourceCompatibility = 1.8 diff --git a/src/main/java/_9/_1/ColorMixer.java b/src/main/java/_9/_1/ColorMixer.java new file mode 100644 index 0000000..470c351 --- /dev/null +++ b/src/main/java/_9/_1/ColorMixer.java @@ -0,0 +1,50 @@ +package _9._1; + +import javafx.application.Application; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.Slider; +import javafx.scene.layout.*; +import javafx.scene.paint.Color; +import javafx.scene.paint.Paint; +import javafx.scene.shape.Rectangle; +import javafx.stage.Stage; + +public class ColorMixer extends Application { + + @Override + public void start(Stage stage) { + VBox vBox = new VBox(10); + vBox.setAlignment(Pos.TOP_CENTER); + vBox.setPadding(new Insets(10)); + + Rectangle rectangle = new Rectangle(200, 200); + + Slider red = colorSlider(Color.RED); + Slider green = colorSlider(Color.GREEN); + Slider blue = colorSlider(Color.BLUE); + red.valueProperty().addListener((observable, oldValue, newValue) -> rectangle.setFill(Color.rgb(newValue.intValue(), (int) green.getValue(), (int) blue.getValue()))); + green.valueProperty().addListener((observable, oldValue, newValue) -> rectangle.setFill(Color.rgb((int) red.getValue(), newValue.intValue(), (int) blue.getValue()))); + blue.valueProperty().addListener((observable, oldValue, newValue) -> rectangle.setFill(Color.rgb((int) red.getValue(), (int) green.getValue(), newValue.intValue()))); + + vBox.getChildren().addAll(rectangle, red, green, blue); + Scene scene = new Scene(new StackPane(vBox), 600, 360); + stage.setScene(scene); + stage.setTitle("Color-Mixer"); + stage.setResizable(false); + stage.show(); + } + + private Slider colorSlider(Paint fill) { + Slider slider = new Slider(0, 255, 0); + slider.setShowTickLabels(true); + slider.setShowTickMarks(true); + slider.setBackground(new Background(new BackgroundFill(fill, CornerRadii.EMPTY, Insets.EMPTY))); + return slider; + } + + public static void main(String[] args) { + launch(); + } +} \ No newline at end of file From 3f080299c62c0d7ba96cdf866edb70f145aa8b7a Mon Sep 17 00:00:00 2001 From: Selebrator Date: Wed, 5 Jun 2019 10:29:57 +0200 Subject: [PATCH 3/3] 9.2 initial commit --- build.gradle | 2 +- src/main/java/_9/_2/Lights.java | 90 +++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 src/main/java/_9/_2/Lights.java diff --git a/build.gradle b/build.gradle index 0d565c6..821408a 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ compileJava.options.encoding = 'UTF-8' project.ext.junitVersion = '5.3.1' -mainClassName = '_9._1.ColorMixer' +mainClassName = '_9._2.Lights' sourceCompatibility = 1.8 diff --git a/src/main/java/_9/_2/Lights.java b/src/main/java/_9/_2/Lights.java new file mode 100644 index 0000000..1759e0e --- /dev/null +++ b/src/main/java/_9/_2/Lights.java @@ -0,0 +1,90 @@ +package _9._2; + +import javafx.application.Application; +import javafx.collections.ObservableList; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.layout.GridPane; +import javafx.scene.paint.Color; +import javafx.scene.paint.Paint; +import javafx.scene.shape.Rectangle; +import javafx.stage.Stage; + +import java.util.Optional; + +public class Lights extends Application { + + private static final int DEFAULT_SIZE = 4; + private static final int GAP = 2; + private static final Paint ON = Color.YELLOW; + private static final Paint OFF = Color.WHITE; + + @Override + public void start(Stage primaryStage) throws Exception { + final int size = Optional.ofNullable(this.getParameters().getNamed().get("size")) + .map(Integer::parseInt).orElse(DEFAULT_SIZE); + GridPane grid = new GridPane(); + Scene scene = new Scene(grid, 600, 600); + scene.setFill(Color.BLACK); + grid.setHgap(GAP); + grid.setVgap(GAP); + for(int x = 0; x < size; x++) { + for(int y = 0; y < size; y++) { + Rectangle rec = new Rectangle(150, 150); + rec.heightProperty().bind(scene.heightProperty().subtract(size * GAP).divide(size)); + rec.widthProperty().bind(scene.widthProperty().subtract(size * GAP).divide(size)); + rec.setFill(OFF); + grid.add(rec, x, y); + } + } + for(int x = 0; x < size; x++) { + for(int y = 0; y < size; y++) { + Rectangle rec = getNodeByRowColumnIndex(x, y, grid); + assert rec != null; + Rectangle up = getNodeByRowColumnIndex(x, y - 1, grid); + Rectangle down = getNodeByRowColumnIndex(x, y + 1, grid); + Rectangle left = getNodeByRowColumnIndex(x - 1, y, grid); + Rectangle right = getNodeByRowColumnIndex(x + 1, y, grid); + rec.setOnMouseClicked(event -> { + toggle(rec); + toggle(up); + toggle(down); + toggle(left); + toggle(right); + }); + } + } + + primaryStage.setScene(scene); + primaryStage.setTitle("Lights"); + primaryStage.show(); + } + + private void toggle(Rectangle rec) { + if(rec == null) { + return; + } + Paint color = rec.getFill(); + if(color == ON) { + rec.setFill(OFF); + } else if(color == OFF) { + rec.setFill(ON); + } else { + throw new IllegalStateException(); + } + } + + public static T getNodeByRowColumnIndex(final int column, final int row, GridPane gridPane) { + ObservableList children = gridPane.getChildren(); + for(Node node : children) { + if(GridPane.getRowIndex(node) == row && GridPane.getColumnIndex(node) == column) { + return (T) node; + } + } + return null; + } + + public static void main(String[] args) { + launch(args); + } +}