Java SE 8 Standard-Bibliothek  
Professionelle Bücher. Auch für Einsteiger.
 
Inhaltsverzeichnis


Vorwort
1 Neues in Java 8 und Java 7
2 Fortgeschrittene String-Verarbeitung
3 Threads und nebenläufige Programmierung
4 Datenstrukturen und Algorithmen
5 Raum und Zeit
6 Dateien, Verzeichnisse und Dateizugriffe
7 Datenströme
8 Die eXtensible Markup Language (XML)
9 Dateiformate
10 Grafische Oberflächen mit Swing
11 Grafikprogrammierung
12 JavaFX
13 Netzwerkprogrammierung
14 Verteilte Programmierung mit RMI
15 RESTful und SOAP-Web-Services
16 Technologien für die Infrastruktur
17 Typen, Reflection und Annotationen
18 Dynamische Übersetzung und Skriptsprachen
19 Logging und Monitoring
20 Sicherheitskonzepte
21 Datenbankmanagement mit JDBC
22 Java Native Interface (JNI)
23 Dienstprogramme für die Java-Umgebung
Stichwortverzeichnis

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java SE 8 Standard-Bibliothek von Christian Ullenboom
Das Handbuch für Java-Entwickler
Buch: Java SE 8 Standard-Bibliothek

Java SE 8 Standard-Bibliothek
Pfeil 11 Grafikprogrammierung
Pfeil 11.1 Grundlegendes zum Zeichnen
Pfeil 11.1.1 Die paint(Graphics)-Methode für das AWT-Frame
Pfeil 11.1.2 Die ereignisorientierte Programmierung ändert Fensterinhalte
Pfeil 11.1.3 Zeichnen von Inhalten auf ein JFrame
Pfeil 11.1.4 Auffordern zum Neuzeichnen mit repaint(…)
Pfeil 11.1.5 Java 2D-API
Pfeil 11.2 Einfache Zeichenmethoden
Pfeil 11.2.1 Linien
Pfeil 11.2.2 Rechtecke
Pfeil 11.2.3 Ovale und Kreisbögen
Pfeil 11.2.4 Polygone und Polylines
Pfeil 11.3 Zeichenketten schreiben und Fonts
Pfeil 11.3.1 Zeichenfolgen schreiben
Pfeil 11.3.2 Die Font-Klasse
Pfeil 11.3.3 Font-Metadaten durch FontMetrics *
Pfeil 11.4 Geometrische Objekte
Pfeil 11.4.1 Die Schnittstelle Shape
Pfeil 11.4.2 Pfade *
Pfeil 11.5 Das Innere und Äußere einer Form
Pfeil 11.5.1 Farben und die Paint-Schnittstelle
Pfeil 11.5.2 Farben mit der Klasse Color
Pfeil 11.5.3 Composite und XOR *
Pfeil 11.5.4 Dicke und Art der Linien von Formen bestimmen über Stroke *
Pfeil 11.6 Bilder
Pfeil 11.6.1 Eine Übersicht über die Bilder-Bibliotheken
Pfeil 11.6.2 Bilder mit ImageIO lesen
Pfeil 11.6.3 Ein Bild zeichnen
Pfeil 11.6.4 Splash-Screen *
Pfeil 11.6.5 Bilder skalieren *
Pfeil 11.6.6 Schreiben mit ImageIO
Pfeil 11.6.7 Asynchrones Laden mit getImage(…) und dem MediaTracker *
Pfeil 11.7 Weitere Eigenschaften von Graphics *
Pfeil 11.7.1 Eine Kopie von Graphics erstellen
Pfeil 11.7.2 Koordinatensystem verschieben
Pfeil 11.7.3 Beschnitt (Clipping)
Pfeil 11.7.4 Zeichenhinweise durch RenderingHints
Pfeil 11.7.5 Transformationen mit einem AffineTransform-Objekt
Pfeil 11.8 Drucken *
Pfeil 11.8.1 Drucken der Inhalte
Pfeil 11.8.2 Bekannte Drucker
Pfeil 11.9 Benutzerinteraktionen automatisieren, Robot und Screenshots *
Pfeil 11.9.1 Der Roboter
Pfeil 11.9.2 Automatisch in die Tasten hauen
Pfeil 11.9.3 Automatisierte Maus-Operationen
Pfeil 11.9.4 Methoden zur Zeitsteuerung
Pfeil 11.9.5 Bildschirmabzüge (Screenshots)
Pfeil 11.9.6 Funktionsweise und Beschränkungen
Pfeil 11.9.7 MouseInfo und PointerInfo
Pfeil 11.10 Zum Weiterlesen
 
Zum Seitenanfang

11.4Geometrische Objekte Zur vorigen ÜberschriftZur nächsten Überschrift

Die Java-Bibliothek repräsentiert geometrische Formen durch eine Schnittstelle Shape. Konkrete Formen sind etwa Linien, Polygone oder Kurven, die die Bibliothek durch konkrete Implementierungen der Schnittstelle realisiert. Für uns gibt es damit zwei Möglichkeiten, Zeichenoperationen zu tätigen: zum einen indem wir Objekte aufbauen und diese dann zeichnen lassen und zum anderen über die speziellen Zeichenmethoden von Graphics, wie die bekannten Methoden drawLine(…) und drawRect(…). Objekte bieten den Vorteil, dass sie sich in einer Datenstruktur sammeln lassen, und die Shape-Objekte warten auch noch mit einer ganzen Reihe interessanter Methoden auf.

Beginnen wir mit einem Programm, das eine Linie als Formobjekt zeichnet:

Listing 11.5com/tutego/insel/ui/g2d/First2D.java, First2DDemo

class First2D extends JPanel {

@Override protected void paintComponent( Graphics g ) {
Graphics2D g2 = (Graphics2D) g;

g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

g2.draw( new Line2D.Double( 10, 10, getWidth()10, getHeight()10 ) );
}

public static void main( String[] args ) {
JFrame f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 200, 120 );
f.add( new First2D() );
f.setVisible( true );
}
}

Die Klasse Line2D.Double definiert das Linienobjekt, das draw(Shape) zeichnet (und fill(Shape) füllen würde). Die Methode draw(Shape), die es nur auf dem Graphics2D-Objekt und nicht bei der Basisklasse Graphics gibt, nimmt ein beliebiges Shape-Objekt und zeichnet es nach den aktuellen Einstellungen wie Muster oder Farbe. Da normalerweise die Ausgabe nicht weichgezeichnet ist, wir dies aber wünschen, setzen wir einen setRenderingHint(…). Die Argumente und die Methoden werden später näher beschrieben.

Eine weiche Linie

Abbildung 11.8Eine weiche Linie

abstract class java.awt.Graphics2D
extends Graphics
  • abstract void draw(Shape s)
    Zeichnet die Form im aktuellen Graphics2D-Kontext. Die Attribute umfassen Clipping, Transformation, Zeichen, Zusammensetzung und Stift-(Stroke-)Attribute.

 
Zum Seitenanfang

11.4.1Die Schnittstelle Shape Zur vorigen ÜberschriftZur nächsten Überschrift

Die geometrischen Objekte, die die Schnittstelle java.awt.Shape implementieren, sind unter anderem:

  • Line2D: Einfache Linie von Start- bis Endkoordinaten

  • RectangularShape mit den Unterklassen Arc2D, Ellipse2D, Rectangle2D und RoundRectangle2D sind Objekte, die in einem Rechteck eingefasst sind.

  • Polygon: geschlossener Linienzug

  • QuadCurve2D,  CubicCurve2D: quadratische und kubische Kurven

Fast alle Klassen sind abstrakt, und innen liegende Unterklassen implementieren die äußere Klasse mit den Genauigkeiten float und double. Ein Beispiel für Line2D haben wir im oberen Programm First2DDemo schon aufgeführt; die öffentliche konkrete innere Klasse mit der Genauigkeit double heißt Line2D.Double.

Vererbungsbeziehungen der Unterklassen von Shape

Abbildung 11.9Vererbungsbeziehungen der Unterklassen von Shape

Die Schnittstelle java.awt.Shape deklariert Operationen, die die Unterklassen passend implementieren:

  • contains(…): Testet, ob ein Punkt bzw. Rechteck in der Form ist.

  • getBounds(), getBounds2D(): Liefert den kleinsten Rahmen, der die Form vollständig enthält.

  • getPathItererator(…): Liefert einen PathIterator, der die äußeren Pfade entlangläuft.

  • intersects(…): Testet, ob ein Rechteck diese Form schneidet.

getBounds() am Beispiel einiger Formen

Abbildung 11.10getBounds() am Beispiel einiger Formen

[»]Hinweis

Es gibt in der Java-Bibliothek zwar Klassen wie Point, Point2D.Float und Point2D.Double, die Point2D erweitern, aber dies sind keine Shape-Objekte, und sie können nicht gezeichnet werden. Die Typen repräsentieren x/y-Koordinaten und finden sich nur als Parametertyp, etwa zum Aufbau von Linien, Kurven oder Gradienten. Auch für Text gibt es keine spezielle Shape-Implementierung. Um Text zu zeichnen, wird weiterhin die Methode drawString(string, x, y) verwendet, allerdings sind die Koordinaten Graphis2D-taugliche Fließkommazahlen vom Typ float.

 
Zum Seitenanfang

11.4.2Pfade * Zur vorigen ÜberschriftZur nächsten Überschrift

Ein Pfad besteht aus zusammengesetzten Segmenten, die miteinander verbunden sind. Die Segmente bestehen nicht wie bei Polygonen ausschließlich aus Linien, sondern können auch quadratische oder kubische Kurven sein. Die Klasse java.awt.geom.GeneralPath erbt von Path2D (die wiederum von Path2D.Float erbt) und hängt Schritt für Schritt die Segmente mit den Methoden lineTo(…), curveTo(…), quadTo(…) an und den Umriss anderer Formen mit append(PathIterator, boolean). Da der Startpunkt automatisch bei (0,0) liegt, setzt moveTo(…) ihn zum Start – oder auch später – um.

[zB]Beispiel

Zeichnen einer Linie als Pfad mit der 2D-API:

@Override protected void paintComponent( Graphics g ) {
Graphics2D g2 = (Graphics2D) g;
GeneralPath p = new GeneralPath();
p.moveTo( 10f, 10f );
p.lineTo( 100f, 20f );
g2.setColor( Color.BLACK );
g2.draw( p );
}

Natürlich hätten wir in diesem Fall auch ein Line2D-Objekt nehmen können. Doch dieses Beispiel zeigt einfach, wie ein Pfad aufgebaut ist. Zunächst bewegen wir den Zeichenstift mit moveTo(float, float) auf eine Position, und anschließend zeichnen wir eine Linie mit lineTo(float, float). Ist der Pfad einmal gezogen, zeichnet draw(Shape) die Form, und fill(Shape) füllt das Objekt aus.

Um eine Kurve zu einem Punkt zu ziehen, nehmen wir quadTo(x1, x2, y2, y2) oder für Bézier-Kurven curveTo(x1, x2, y2, y2, y3, y3). Die Methoden erwarten Argumente vom Typ float oder double.

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java SE 8 Standard-Bibliothek Java SE 8 Standard-Bibliothek
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Java ist auch eine Insel
Java ist auch eine Insel


Zum Rheinwerk-Shop: Professionell entwickeln mit Java EE 8
Professionell entwickeln mit Java EE 8


Zum Rheinwerk-Shop: Besser coden
Besser coden


Zum Rheinwerk-Shop: Entwurfsmuster
Entwurfsmuster


Zum Rheinwerk-Shop: IT-Projektmanagement
IT-Projektmanagement


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2018. Original - https://www.rheinwerk-verlag.de/openbook/
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

 
 


29.09.2022 - Sitemap.xml