Maven & JavaFX für Werner
Jetzt wird gemalt
So, jetzt geht es los, nun verwenden wir JavaFX um unserem Progamm eine Oberfläche zu verpassen. Es
bleibt nur noch eine Voraussetzung zu erfüllen, wir müssen NetBeans sagen, dass unsere Projekte
gefälligst Java 8 Projekte sind. (Gilt für beide Projekte, egal für welches du dich entscheidest.)
Dazu öffnest du eins der Projekte im NetBeans, wählst das Projekt in der linken Spalte aus, und mit dem
Rechtsklick bekommst du ein Kontextmenü. Dort wird "Properties" ausgewählt.
Dort wählt man dann unter "Build/Compile" die Java Platform aus. Hier natürlich JDK 1.8.
Nach dem Klick auf "OK", können wir jetzt mit dem Programmieren los legen. Dazu öffnen wir die
"App.java" aus dem NetBeans-Projekt. Hier fällt schon mal auf, dass die Klasse gar nicht Java-Like
formattiert ist. Das bekommen wir aber schnell hin. Den Textcursor ins Dokument setzen, Strg-a drücken
damit der gesamte Text ausgewählt wird, und dann Shift-Alt-f drücken. NetBeans formattiert uns den
Quellcode.
Wir leiten nun App von Application ab. Application ist in dieser Klasse aber noch nicht bekannt, daher
meckert NetBeans:
Wir gehen mit dem Textcursor auf das Wort "Application" und drücken dann Alt-Enter. NetBeans gibt uns
dann eine Liste von Application-Implementierungen. Wir wählen hier natürlich javafx.
NetBeans fügt uns den benötigten "import" ein. Meckert aber immer noch, weil "App" nun nicht alle
nötigen Funktionen implementiert. Das gleiche Spiel noch mal. Wir gehen mit dem Textcursor auf das
Wort "App", drücken Alt-Enter, und wählen "Implement all abstract methods".
Die Methode "start" ist der Einstieg für das JavaFX. Damit man dort auch landet, muss unsere
main-Methode ein "launch" aufrufen. In der start-Methode haben wir einen Stage übergeben bekommen,
das ist quasi unser Fenster. Dem Fenster können wir einen Titel hinzufügen, und das Fenster anzeigen
lassen:
package de.wh.javafx;
import javafx.application.Application;
import javafx.stage.Stage;
/**
* Hello world!
*
*/
public class App extends Application {
public static void main(String[] args) {
System.out.println("Hello World!");
launch();
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Hallo Werner");
primaryStage.show();
}
}
Lass das Programm mal laufen (egal ob aus der Shell (JDK 1.8 setzen!)) oder aus dem NetBeans heraus.
. etc/myenv.sh 8
cd Entwicklung/javafx-shell
mvn package
java -jar target/javafx-shell-2022.12.jar
Bis hier war das doch kein Hexenwerk. Jetzt fügen wir noch einen Canvas in unserem Fenster ein, damit
wir dort auch malen können.
package de.wh.javafx;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
/**
* Hello world!
*
*/
public class App extends Application {
public static void main(String[] args) {
System.out.println("Hello World!");
launch();
}
@Override
public void start(Stage primaryStage) throws Exception {
Pane root = new Pane();
Canvas canvas = new Canvas(900, 900);
root.getChildren().add(canvas);
Scene scene = new Scene(root, 900, 900);
primaryStage.setTitle("Hallo Werner");
primaryStage.setScene(scene);
primaryStage.show();
drawSomeThing(canvas.getGraphicsContext2D());
}
private void drawSomeThing(GraphicsContext gc) {
gc.beginPath();
gc.moveTo(100, 100);
gc.lineTo(500, 100);
gc.lineTo(500, 500);
gc.lineTo(100, 500);
gc.lineTo(100, 100);
gc.stroke();
gc.beginPath();
gc.moveTo(400, 400);
gc.lineTo(800, 400);
gc.lineTo(800, 800);
gc.lineTo(400, 800);
gc.lineTo(400, 400);
gc.setFill(Color.CORAL);
gc.fill();
}
}