Softwaretechnik (Medieninformatik): GUIs mit Swing Überblick

Werbung
Softwaretechnik (Medieninformatik): GUIs mit Swing
Überblick
1
2
3
4
5
6
Einführung
Einfache Swing Komponenten
Ereignisbehandlung und Adapterklassen
Zeichnen
Layout Manager
Komplexere Swing Komponenten
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
112
Softwaretechnik (Medieninformatik): GUIs mit Swing
Überblick: 4. Zeichnen
4.1
Der Java graphische Context
4.2
4.3
Subklasse von JPanel
Anwendung
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
113
1
4. Zeichnen
4.1 Der Java graphische Kontext
„
Basis Klassen für 2D-Darstellungen
‰
‰
‰
‰
‰
„
Graphics
Color
Font
FontMetrics
Polygon
Java2D API
‰
‰
‰
‰
‰
BasicStroke
GradientPaint
TexturePaint
GeneralPath
Arc2D, Ellipse2D, Line2D, Rectangle2D, RoundRectangle2D
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
114
4. Zeichnen
4.1 Der Java graphische Kontext
„
Koordinatensystem
+x
(0, 0)
x-Achse
(x, y)
+y
‰
‰
y-Achse
Ausgangspunkt: Linke obere Ecke
Einheit: Pixel
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
115
2
4. Zeichnen
4.1 Der Java graphische Kontext
„
Graphischer Kontext
‰
‰
‰
‰
‰
‰
‰
‰
Graphics Objekt
Methoden zum
„
Zeichnen
„
Font-Manipulation
„
Farbwahl, usw.
Zum Zeichnen wird oft die Methode paint(Graphics g) aufgerufen
paint() kann überschrieben werden
Im Innern kann dann g zum Zeichnen benutzt werden
Wird normalerweise indirekt über repaint() aufgerufen
Graphics ist eine abstrakte Klasse
Konkrete Klasse realisiert die Schnittstelle für die Zielplattform
(Windows, Unic, Mac)
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
116
Softwaretechnik (Medieninformatik): GUIs mit Swing
Überblick: 4. Zeichnen
4.1
Der Java graphische Context
4.2
Subklasse von JPanel
4.3
Anwendung
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
117
3
4. Zeichnen
4.2 Subklasse von JPanel
„
JPanel
‰
‰
‰
‰
Normalerweise ein Aggregat für andere Swing Komponenten
Kann auch
„
Zeichenoberflächen und
„
mausempfindliche Bereiche
definieren
Vermeidung von Konflikten zwischen direkter Verwendung von
Graphics und GUI-Komponenten
Klassen, die von JComponent abstammen, enthalten Methode
paintComponent()
„
Diese Methode sollten überschrieben werden, um innerhalb des
Panels zu zeichnen
„
Zuvor sollte die geerbte Methode aufgerufen werden
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
118
4. Zeichnen
4.2 Subklasse von JPanel
„
JPanel
‰
‰
‰
‰
JComponent unterstützt Transparenz und deren Nachfahren sollten
das auch tun
Gesteuert durch Methode setOpaque()
„
Parameter false: Komponente ist transparent
Richtige Handhabung in JComponent‘s Methode paintComponent()
„
Transparent: Hintergrund bleibt unverändert
„
Opaque: Hintergrund wird gelöscht
Daher muss paintComponent() unbedingt aufgerufen werden
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
119
4
4. Zeichnen
4.2 Subklasse von JPanel
„
Wann wird Komponente neu gezeichnet?
‰
Swing-Komponenten
„
Methode repaint(): Komponente soll sobald wie möglich neu
gezeichnet werden:
‰
‰
‰
‰
‰
Drei einzelen Methoden (in dieser Reihenfolge):
paintComponent – Hauptmethode zum Zeichnen
paintBorder – Zeichnet die Umrandung (falls es eine gibt). Nicht
überschreiben!
paintChildren – Veranlasst jede Komponente, die in der eigenen
enthalten ist, sich selbst zu zeichnen. Nicht überschreiben!
AWT-Komponenten
„
Methode repaint()
‰
‰
Methode update() von Component wird aufgerufen
ƒ
Löscht Hintergrund der Komponente
Ruft ihrerseits Methode paint()
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
120
4. Zeichnen
4.2 Subklasse von JPanel
„
CustomPanel
public class CustomPanel extends JPanel {
public final static int CIRCLE = 1, SQUARE = 2;
private int shape;
// use shape to draw an oval or rectangle
public void paintComponent( Graphics g ) {
super.paintComponent( g );
if ( shape == CIRCLE )
g.fillOval( 50, 10, 60, 60 );
else if ( shape == SQUARE )
g.fillRect( 50, 10, 60, 60 );
}
}
// set shape value and repaint CustomPanel
public void draw( int shapeToDraw ) {
shape = shapeToDraw;
repaint();
}
// end class CustomPanel
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
121
5
Softwaretechnik (Medieninformatik): GUIs mit Swing
Überblick: 4. Zeichnen
4.1
Der Java graphische Context
4.2
4.3
Subklasse von JPanel
Anwendung
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
122
4. Zeichnen
4.3 Anwendung
„
CustomPanelTest
public class CustomPanelTest extends JFrame {
private JPanel buttonPanel;
private CustomPanel myPanel;
private JButton circleButton, squareButton;
// set up GUI
public CustomPanelTest()
{
super( "CustomPanel Test" );
// create custom drawing area
myPanel = new CustomPanel();
myPanel.setBackground( Color.green );
// set up squareButton
squareButton = new JButton( "Square" );
...
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
123
6
4. Zeichnen
4.3 Anwendung
„
CustomPanelTest
...
squareButton.addActionListener(
// anonymous inner class to handle
// squareButton events
new ActionListener() {
// draw a square
public void actionPerformed( ActionEvent event ) {
myPanel.draw( CustomPanel.SQUARE );
}
} // end anonymous inner class
); // end call to addActionListener
...
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
124
4. Zeichnen
4.3 Anwendung
„
CustomPanelTest
...
circleButton = new JButton( "Circle" );
circleButton.addActionListener(
// anonymous inner class to handle
// circleButton events
new ActionListener() {
// draw a circle
public void actionPerformed( ActionEvent event ) {
myPanel.draw( CustomPanel.CIRCLE );
}
} // end anonymous inner class
); // end call to addActionListener
// set up panel containing buttons
buttonPanel = new JPanel();
buttonPanel.setLayout( new GridLayout( 1, 2 ) );
buttonPanel.add( circleButton );
buttonPanel.add( squareButton );
...
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
125
7
4. Zeichnen
4.3 Anwendung
„
CustomPanelTest
...
// set up panel containing buttons
buttonPanel = new JPanel();
buttonPanel.setLayout( new GridLayout( 1, 2 ) );
buttonPanel.add( circleButton );
buttonPanel.add( squareButton );
// attach button panel & custom drawing area to
// content pane
Container container = getContentPane();
container.add( myPanel, BorderLayout.CENTER );
container.add( buttonPanel, BorderLayout.SOUTH );
setSize( 300, 150 );
setVisible( true );
}
...
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
126
4. Zeichnen
4.3 Anwendung
„
CustomPanelTest
...
// execute application
public static void main( String args[] )
{
CustomPanelTest application = new CustomPanelTest();
application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE );
}
}
// end class CustomPanelTest
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
127
8
4. Zeichnen
4.3 Anwendung
„
Ergebnis
© Prof. Dr. Björn Dreher
Softwaretechnik (Medieninformatik)
128
9
Herunterladen