# data[].attributes.body
Java bietet mehrere Methoden für die Grafik Programmierung:

AWT (Abstract Window Toolkit)

Swing

JavaFX

AWT ist die älteste Grafikbibliothek in Java und bietet grundlegende Funktionen für die Erstellung von GUIs. Die wichtigste Methode von AWT ist "canvas" (Leinwand), die eine leere Zeichenfläche erzeugt, auf der gezeichnet werden kann.

Swing ist eine erweiterte und flexiblere Bibliothek, die auf AWT basiert und plattformunabhängige GUI-Komponenten bietet. Swing beinhaltet die Methode "JPanel", die einen Container bietet, der wie eine Zeichenfläche verwendet werden kann.

JavaFX ist die neueste Bibliothek für die Erstellung von GUIs in Java und bietet moderne grafische Funktionen. Hier gibt es auch die Methode "canvas", die den Zeichenbereich ähnlich wie bei AWT erzeugt.

# data[].attributes.body
Eclipse ist eine kostenlose Entwicklungsumgebung für die Java Programmierung. In dieser IDE (Integrated Development Environment) können alle Einstellungen für Java vorgenommen werden und die notwendigen Resourcen können definiert werden. Das fertige Programm kann kompiliert und ausgeführt werden.

Neben Eclipse bietet auch Visual Studio Code die Möglichkeit Java zu programmieren, die Einstellungen erfordern jedoch mehr "Handarbeit".

# data[].attributes.attachment_link.title
The Community for Open Collaboration and Innovation | The Eclipse Foundation

# data[].attributes.attachment_link.description
The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …

# data[].attributes.body
In diesem Abschnitt geht es um einfache grafische Elemente:

- Zeichenstift auf Koordinaten setzen,
- Bewegen des Zeichenstiftes,
- einen Kreis zeichnen,
- ein Rechteck zeichnen.

Für die Definition der Zeichenfläche wird die Methode canvas (Leinwand) im body Bereich benutzt.

# data[].attributes.attachment_link.title
C, C++, Java, Python, PHP Online Compliers, Terminals and Editors

# data[].attributes.attachment_link.description
C, C++, Java, Python, PHP Online Compliers, Terminals and Editors for Software Developers - Edit, Compile, Execute and Share Programs Online to experience the best cloud computing where you can edit, compile, execute and share your varities of projects with the help of simple clicks.

# data[].attributes.body
Nach dem Start von Eclipse siehst du den oben gezeigten Startbildschirm. Von denin der oberen Leiste gezeigten Menüs wirst du vier Menüs wahrscheinlich am häufigsten benutzen:

File: Speichern, Laden, Ausdrucken oder neu Erstellen,

Edit und Source: Bearbeiten des Programmtextes,

Run: Ausführen des Programms,

Help: Hilfe auf Englisch

# data[].attributes.body
Klicke auf New und dann auf Java Project. Es öffnet sich das oben gezeigte Fenster.

Gib dann bei "Project name" deinen Projektnamen ein und klicke auf Finish.

# data[].attributes.body
Klicke dann auf File --> New --> Package. Gib im oben gezeigten Dialogfeld hinter Name den Namen des Pakets ein, z.B. paket1.

Wähle deinen Source Ordner mit Browse aus.

Klicke create package-inf.java an.

Jetzt siehst du einen weiteren Eintrag im Fenster.

# data[].attributes.body
Klicke auf New --> Class. Jetzt öffnet sich ein neues Dialogfeld. In diesem Feld sollten bereits der Ordner und das Paket eingetragen sein.

Klicke dann noch unter der Methode den ersten Eintrag "public static void main(String[] args)" an. und beende das Dialogfeld mit Finish.

# data[].attributes.body
Als Ergebnis siehst du jetzt das erste Programmierfenster in der Mitte. Das Programm könnte jetzt eigentlich schon laufen, tut aber noch nichts.

# data[].attributes.body
Als offizieller Geburtstag der Programmiersprache Java gilt der 23. Mai 1995.

Nach einschlägigen Berichten fing alles mit einer Mail des damals 25jährigen Programmierers Patrick Naughton an den SUN-Chef Scott McNealy an. Naughton hatte angekündigt, das Unternehmen zu verlassen, um zu Next Computer; Inc. zu gehen. Er war der Meinung, dass manches bei SUN nicht gut funktionierte, und die weitaus moderneren Technologien von Next reizten ihn sehr. McNealy, mit dem Naughton zusammen Eishockey spielte, forderte ihn auf, seine Kritik samt möglicher Lösungsvorschläge niederzuschreiben, ganz gleich, wie radikal sie auch sein mögen.

Naughtons Mail hatte seine Wirkung nicht verfehlt! In einer für SUN schwierigen Periode mit internen Diskussionen um den Kurs des Unternehmens und seiner Produkte rannte Naughton offene Türen ein. Seine Hauptkritikpunkte betrafen die nicht zeitgemäßen grafischen Oberflächen, die unübersehbare Anzahl an Programmierwerkzeugen, die hohen Kosten der Workstations und die komplizierte Anwendung der Programme. Kurz, er warf SUN vor, auf dem besten Wege zu sein, sich mehr und mehr von seinen potentiellen Kunden und Anwendern zu entfernen. Er forderte Hard- und Software, die nicht nur von Akademikern und hochspezialisierten Profis, sondern von normalen Menschen angewendet werden konnte.

Naughtons Klagen wurden erhört, und innerhalb weniger Tage wurde ein Projekt aufgesetzt, dessen Ziel es sein sollte, die nächsten großen Trends der Computer- und Softwareindustrie aufzuspüren.

Bis Mitte 1992 entwickelte Naughton mit seinen Kollegen ein Gerät, das etwa heutigen Tablets glich und mit einer tastaturlosen grafischen Oberfläche per drahtloser Datenübertragung zur Bedienung unterschiedlichster Geräte der Konsumelektronik verwendet werden konnte.

Das als »*7« (Star Seven) bezeichnete Gerät wurde im Herbst 1992 firmenintern präsentiert. Es wurde eine Firma zur Vermarktung gegründet. Das Projekt scheiterte jedoch. 2010 wurde von Apple das iPad präsentiert.

# data[].attributes.body
Um die notwendige Arbeitsumgebung in Visual Studio Code zu installieren suche nach "visual studio code java pack installer" und wähle dort "Java in Visual Studio Code". Dort findest du weiter unten den Link zum Installer und führe diesen aus: Install the coding pack for java.

# data[].attributes.headline
Erste Schritte mit Java in VisualStudioCode

# data[].attributes.subject
Erste Schritte mit Java in VisualStudioCode

# data[].attributes.body
Es gibt eine Reihe von Entwicklungsumgebungen für Java Programme:

Visual Studio Code

IntelliJ

Netbeans

eclipse

# data[].attributes.body
Auf der Startseite von JETBrains wird standardmäßig die kostenlose 30-Tage Version angeboten. Für die ersten Schritte reicht die kostenlose Community Edition aus. Diese findest du nach einem Klick auf "andere Versionen" ganz rechts (Pfeil).

# data[].attributes.body
Dieses ist ein einfaches Programm, das mit IntelliJ estellt worden ist.

Es wird die Variable "name" erstellt als String. Dann wird das Welcome kurz ausgegeben (für den Ausgabebefehl in IntelliJ nur sout und dann Return eingeben, dann erscheint der komplette Befehl). Danach findest du eine Funktion showGreeting, die je nach Uhrzeit die passende Begrüßung anzeigt.

# data[].attributes.body
Nach dem Start von IntelliJ wird ein erstes Java Projekt in die IntelliJ Oberfläche geladen.

# data[].attributes.body
Zunächst wird mit IntelliJ die Projektstruktur erstellt.

Dazu führst du folgende Schritte durch:

1. Starte IntelliJ

2. File --> New --> Project

3. Tippe ein "ersterRechner"

4. File --> New --> Package

5. Tippe ein "rechnen1"

6. File --> New --> Java Class

7. Tippe ein "Mathe1"

Jetzt solltest du die im Bild dargestellte Struktur in IntelliJ sehen.

# data[].attributes.body
Klicke jetzt die Klasse Mathe1 an und programmiere das Hauptprogramm main im Programmierfenster:

Hinter die geschweifte Klammer kommt als erstes der Befehl: "public static void main (String[] args)" und danach wieder eine geschweifte öffnende Klammer. Dieses ist praktisch ein Funktionsaufruf, der Argumente "String args" übergibt. Wir haben in diesem kleinen Programm nur eine Funktion nämlich "main".

Die Zahlenwerte werden zunächst als Integer (ganze Zahlen) definiert.

"int Ergebnis = 0" legt die Variable >Ergebnis< an (diese Vorgehensweise kennen wir bereits von JavaScript).

Die Eingabe der Zahlen erfolgt mit dem Befehl

String Eingabe1 = JOptionPane.showInputDialog("...") (bzw. Eingabe2). JoptionPane öffnet ein Fenster. Danach wird die eingegebene Zahl in einen Integerwert mit

int Zahl1 = Integer.parseInt (Eingabe1) (bzw. Zahl2, Eingabe2).

# data[].attributes.body
Der Operator "+, -, *, /" wird ebenfalls mit JOptionPane eingegeben.

Danach wird über ein if-Konstrukt die Rechenoperation ausgewählt:

if (Operator.equals("+") ) Ergebnis = Zahl1 + Zahl2;

(Entsprechend für die anderen Operatoren.)

# data[].attributes.body
Das Ergebnis wird dann über den Befehl

JOptionPane.showMessageDialog (null, "Ergebnis ist " + Ergebnis);

ausgegeben.

# data[].attributes.body
Der Rechner1 kann nur Integer Werte verarbeiten. Ändere die Eingabe zu Gleitkommazahlen mit dem Befehl Float. Außerdem binde eine Bedingung ein, die die Division durch 0 verhindert.

# data[].attributes.body
Der Zahlentyp wird durch die Anweisung "float" geändert, z.B.:

float Ergebnis = 0

Außerdem muss die Umwandlungsmethode bei der Eingabe geändert werden:

float Zahl1 = Float.parseFloat(Eingabe1)

float Zahl2 = Float.parseFloat(Eingabe2)

Die Methode parseFloat der Klasse Float sorgt dafür, das aus einem String eine Dezimalzahl wird.

# data[].attributes.body
Eine Division durch "0" beim Operator "/" wird über eine if-Abfrage abgefangen.

Durch

if(Operator.equals("/"))

wird die Abfage eingeleitet, gefolgt von einer zweiten Abfage

if (Zahl2 != 0)

Dann soll nämlich normal weiter gerechnet werden Zahl1/Zahl2, andererseits kommt die Ausgabe "Divion durch null".

# data[].attributes.body
Ein java Archiv hat die Dateiendung .jar. Es ist ausführbar und enthält alle Bibliotheken de Quellcodes.

Dieses kann mit IntelliJ erstellt werden:

1. Klicke im File-Menü auf "Project Structure" und wähle "Artefacts".

2. Klicke dann auf das "+"-Zeichen.

3. Gehe jetzt in der Menü-Zeile zu "Build" und wähle dort "Build Artefacts" und inkludiere die aktuellen Dateien.

4. Dann sollte im Ordner "out" ein Ordner "artefacts" vorhanden sein und sich dort eine .jar Datei befinden. Diese kann mit Doppelklick ausgeführt werden.

# data[].attributes.body
Das Bild zeigt das JavaScript File des Rechners. Durch den Vergleich mit dem erstellten Java Programm kannst du wesentliche Unterschiede in der Programmierung zwischen diesen beiden Programmiersprachen erkennen.

# data[].attributes.body
Erstelle ein Programm für ein Spiel, in dem eine geheime zufällige Zahl geraten werden soll. In dem Programm soll die Anzahl der Versuche begrenzt sein (z.B. 7). Der Zahlenbereich soll größer als 100 sein. Das Programm soll Hinweise für die Spielerin oder den Spieler geben, ob die benutzereingabe größer oder kleiner als die ratezahl ist.

# data[].attributes.body
Schreibe ein Programm für das Zahlen raten in Python. Schreibe das Programm mit dem Idle Editor von Python 10 bzw. in Visual Code Studio.

# data[].attributes.body
durchgang
aktiv
ratezahl
bentzereingabe

# data[].attributes.body
import random

ratezahl = random.randint(0, 128)

(Der Zahlenbereich kann verändert werden)

# data[].attributes.body
while aktiv == True   (führt die Schleife aus bis aktiv=False wird)

if benutzereingabe == ratezahl :
(vergleicht die benutzereingabe mit der ratezahl)

elif  benutzereingabe > ratezahl :
(ist eine Verzweigung unter der if-Anweisung)

else :
(ist die Verzweigung, wenn die vorherige Bedingung nicht erfüllt ist

Das Programm soll auch stoppen, wenn die maximale Anzahl der Versuche erreicht worden ist..

# data[].attributes.body
Erstelle mit JavaScript ein Programm für ein Spiel, in dem eine geheime zufällige Zahl geraten werden soll. In dem Programm soll die Anzahl der Versuche begrenzt sein (z.B. 7). Der Zahlenbereich soll größer als 100 sein. Das Programm soll Hinweise für die Spielerin oder den Spieler geben, ob die benutzereingabe größer oder kleiner als die ratezahl ist.

# data[].attributes.body
In Java stehen verschiedene Konstruktionen für Wiederholungsschleifen zur Verfügung:

Schleifen mit >while<

Schleifen mit >for<

# data[].attributes.body
Bei dieser Form werden die nachfolgenden Anweisungen so lange ausgeführt bis die Bedingung (Kapital < 1000000) erfüllt ist. Bei Erfüllung der Bedingung verlässt das Programm diese r Schleife zu den im Programm folgenden Anweisungen.

# data[].attributes.body
Dieses ist ein Beispiel für eine Wiederholungsschleife. Es geht um die Ansammlung eines bestimmten Geldbetrages, der verzinst wird.

Dazu wird im Anweisungsblock die Erhöhung des Geldbetrages durch Zinsen innerhalb einer Laufzeit programmiert:

Zinsen = Kapital * Prozent / 100

Kapital = Kapital * Zinsen

Durch die Anweisung

Laufzeit++

wird die Laufzeit um "1" erhöht, so dass die Zahlenwerte von Laufzeit, Zinsen und Kapital die Erhöhung des Geldbetrages mit der Laufzeit angeben.

Soll nun insgesamt ein bestimmter Betrag erwirtschaftet werden, kann dieses mit einer while-Schleife erreicht werden:

while (Bedingung nicht erfüllt) führe den Anweisungsblock aus:

while (Kapital < 1000000)

{

Anweisungsblock

}

# data[].attributes.body
Anschließend wird die Laufzeit bis zur Erfüllung der Bedingung ausgegeben:

if (Laufzeit > 0)

JOptionPane.showMessageDialog

(null, "Dein Geld muss " + Laufzeit + "Jahre auf der Bank braten");

else JOptionPane.showMessageDialog

(null, "Willkommen im Club der Millionäre!");

Die Laufzeit wird nur hochgezählt, wenn die Bedingung noch nicht erreicht worden ist.

# data[].attributes.body
Das Bild zeigt den Aufbau des Koordinatensystems, das JavaScript verwendet.
Der Ursprung (0, 0) ist oben links in der Ecke. Es gibt nur positive Zahlenwerte. Die x-Koordinaten wird nach rechts positiv gezählt, die y-Koordinate wird nach unten positiv gezählt. Der schwarze Punkt hat also die Koordinaten (4, 3).

# data[].attributes.body
AWT enthält die Klassen und Methoden

Canvas

Graphics und

Frame

Frame erzeugt z.B. ein Fenster, das als Container für andere GUI Komponenten dient:

Frame frame = new Frame();

frame.add(canvas);

frame.setSize(400, 400);

frame.setVisible(true);

# data[].attributes.body
Swing ist eine erweiterte und flexiblere Bibliothek, die auf AWT basiert und plattformunabhängige GUI-Komponenten bietet.

Swing bietet die Methoden und Klassen

JPanel: Ein Container, der wie eine Zeichenfläche verwendet werden kann.

JFrame: Ein Fenster, das als Hauptcontainer für Swing-Anwendungen dient.

Ein Beispiel für JFrame sind die folgenden Anweisungen:

JFrame frame = new JFrame();

frame.add(panel);

frame.setSize(400, 400);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

# data[].attributes.body
JavaFX ist die neueste Bibliothek für die Erstellung von GUIs in Java und bietet moderne grafische Funktionen.

Wichtige Klassen und Methoden von JavaFX sind:

Canvas: Ein Zeichenbereich ähnlich wie in AWT.

Stage: Der Hauptcontainer für JavaFX-Anwendungen.

Application: Die Hauptklasse für JavaFX-Anwendungen.

Das folgende Script ist ein Beispiel für "Application":

public class MyApp extends Application {

@Override

public void start(Stage stage) {

Canvas canvas = new Canvas(400, 400);

GraphicsContext gc = canvas.getGraphicsContext2D();

gc.strokeLine(10, 10, 200, 200);

StackPane root = new StackPane();

root.getChildren().add(canvas);

Scene scene = new Scene(root, 400, 400);

stage.setScene(scene);

stage.setTitle("JavaFX Graphics");

stage.show();

}

public static void main(String[] args) {

launch(args);

}

}

# data[].attributes.body
Oben findest du ein Java Programm für ein erstes Bild. Programmiere dieses mit IntelliJ und ändere danach die Parameter oder kommentiere entsprechende Befehle aus.

# data[].attributes.body
Verzweigungen sind in allen Programmiersprachen ein wesentliches Element zur Steuerung des Programmablaufs. Java bietet hier neben den etablierten Bedingungen zusätzliche Möglichkeiten:

- `if`: Wird verwendet, um einen Codeblock bedingt auszuführen.

- `if-else`: Fügt eine Alternative hinzu, falls die Bedingung nicht erfüllt ist.

- `if-else-if`: Kaskadiert mehrere Bedingungen.

- `switch`: Prüft eine Variable gegen mehrere konstante Werte.

- Ternärer Operator: Kurzform für einfache bedingte Zuweisungen.

# data[].attributes.body
Bei der switch Anweisung werden die Fälle mittels der Eingabe eines Zahlenwertes unterschieden. Das Programm verzweigt dann zu dem entsprechenden Anweisungsblock.

# data[].attributes.body
Der Programmcode für dieses Beispiel ist:

package noten2;

import javax.swing.*;

public class Zensur2 {

public static void main(String[] args) {

String Note = JOptionPane.showInputDialog

("Gib eine Note von 1 bis 6 ein:");

int Wert = Integer.parseInt (Note);

switch (Wert) {

case 1: Note = "sehr gut";

case 2: Note = "gut";

case 3: Note = "befriedigend";

case 4: Note = "ausreichend";

case 5: Note = "mangelhaft";

case 6: Note = "ungenügend";

}

JOptionPane.showMessageDialog(null, "Das ist " + Note);

}

}

# data[].attributes.body
Du kannst jetzt ein zweites Bild programmieren, dieses Mal farbig. Hierzu musst du die Funktion drawImage austauschen:

public void drawImage() {

Graphics Stift = getGraphics();

Dimension Groesse = getSize();

int Breite = Groesse.width;

int Hoehe = Groesse.height;

for (int i = 0; i < 60; i++) {

Stift.setColor (Farbe[(int)(Math.random()*FMax)]);

Stift.drawRect (i*4, i*3+10, Breite-i*8, Hoehe-i*6);

}

}

# data[].attributes.body
Der Programmcode für dieses Beispiel ist:

package beding1;

import javax.swing.*;

public class verzwei1

{

public static void main( String[] args)

{

String Name = JOptionPane.showInputDialog

("Hallo, wer bist du?");

String Antwort = JOptionPane.showInputDialog

(Name + " wie geht es dir?");

if (Antwort.equals("gut"))

//System.out.println("das freut mich!");

JOptionPane.showMessageDialog(null, "Das freut mich!");

if (Antwort.equals("schlecht"))

//System.out.println("Das tut mir leid!");

JOptionPane.showMessageDialog(null, "Das tut mir leid!");

}

}

Die alternative Ausgabemöglichkeit mit System.out ist als Kommentar enthalten.

# data[].attributes.body
Die Klasse Graphics aus dem vorigen Anschnitt gehört nicht zum Standard Wortschatz von Java. Wir nutzen jetzt die objektorientierte Programmierung (OOP) um Animationen zu programmieren.

Du lernst in diesem Abschnitt

wie du mit Image Bilder nutzt,

weitere grafische Hilfsmittel kennen,

wie du eine Figur erscheinen und sich bewegen lässt.

Das obige Bild zeigt einen ersten kleinen Film mit drei Knöpfen zur Steuerung.

# data[].attributes.body
Das Programm besteht aus dem Basisprogramm für das Fenster und den Kreis, die Methoden Erscheinen, Bewegen und Verschwinden werden angelegt:

package anima1;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class movie1 extends JFrame implements ActionListener

{

private JButton[] Knopf = new JButton[3];

private int x = 30, y = 60, Dicke = 200; //Dicke: Durchmesser des Kreises

private int Strecke;

private Graphics Grafik;

public movie1()

{

super("Movie1");

JPanel Platte = new JPanel();

Platte.setLayout(new FlowLayout());

Box Oben = Box.createHorizontalBox();

Oben.setPreferredSize(new Dimension(400,250));

Platte.add(Oben);

Knopf[0] = new JButton("Erscheinen");

Knopf[1] = new JButton("Bewegen");

Knopf[2] = new JButton("Verschwinden");

for (int i = 0; i < 3; i++)

{

Knopf[i].addActionListener(this);

Knopf[i].setFont(new Font("Arial", Font.PLAIN, 20));

Platte.add(Knopf[i]);

}

Platte.setBackground(Color.white);

setContentPane(Platte);

}

public void actionPerformed (ActionEvent Ereignis)

{

Object Quelle = Ereignis.getSource();

if (Quelle == Knopf[0]) showImage();

if (Quelle == Knopf[1]) moveImage();

if (Quelle == Knopf[2]) hideImage();

}

public static void main (String[] args)

{

movie1 Rahmen = new movie1();

Rahmen.setSize (450, 350);

Rahmen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Rahmen.setVisible(true);

}

}

Der Kreis bewegt sich aber noch nicht. Dieses geschieht im zweiten Schritt, indem die Methoden definiert werden.

# data[].attributes.body
Mit dieser Methode wird das Erscheinen des Bildes programmiert:

public void showImage()

{

Grafik = getGraphics();

Grafik.setColor(Color.red);

Grafik.fillOval(x,y,Dicke,Dicke);

Grafik.setColor(Color.black);

Grafik.drawOval(x,y,Dicke,Dicke);

}

# data[].attributes.body
Mit dieser Methode wird die Bewegung des Kreises programmiert:

public void moveImage()

{

Strecke = getWidth();

for (int i = x-1; i < Strecke-Dicke-x-1; i++)

{

Grafik.copyArea(i, y, Dicke + 2, Dicke + 2, 1, 0);

try {

Thread.sleep(10);

} catch (InterruptedException x) {

setTitle("Schlafstörung");

}

}

}

# data[].attributes.body
Mit dieser Methode wird das Ausblenden des Bildes programmiert:

public void hideImage()

{

repaint();

}