*AVA*$+
+VEJMWGLI%R[IRHYRKIRYRH%TTPIXW
.%:+%
.%:+%
%YXSV'LVMWXMER9PPIRFSSQ
/SR^ITXMSRIPPI&IEVFIMXYRK'LVMWXMER1ÚRWXIV
%YJPEKIZSQ.YPM
,IVEYWKIFIV ,)6(8:IVPEKJÚV&MPHYRKWQIHMIR+QF,
&SHIRLIMQ
-RXIVRIX[[[LIVHX]SYHIEX [[[LIVHXFYWMRIWWHIEX
[[[LIVHXZLWHIEX
1MX+IRILQMKYRKHIV+EPMPIS4VIWW+QF,&SRR F]+EPMPIS4VIWW+QF,&SRR
8I\X %FFMPHYRKIR YRH 4VSKVEQQI [YVHIR QMX KVS½IV 7SVKJEPX IVEVFIMXIX :IVPEK ºFIVWIX^IV YRH %YXSVIR OÔR RIRNIHSGLJÚVIZIRXYIPPZIVFPMIFIRIJILPIVLEJXI%RKEFIR YRH HIVIR *SPKIR [IHIV IMRI NYVMWXMWGLI :IVERX[SVXYRK RSGL MVKIRHIMRI ,EJXYRK ÚFIVRILQIR (MI ZSVPMIKIRHI 4YFPMOEXMSRMWXYVLIFIVVIGLXPMGLKIWGLÚX^X
%PPI 6IGLXI ZSVFILEPXIR /IMR 8IMP HMIWIW 4VSHYOXIW HEVJ SLRI WGLVMJXPMGLI +IRILQMKYRK HIW :IVPEKIW MR MVKIRH IMRIV *SVQ HYVGL /STMIVIR 1MGVSJMPQ SHIV ERHIVI :IV JELVIR VITVSHY^MIVX SHIV MR IMRI JÚV 1EWGLMRIR MRWFI WSRHIVI (EXIRZIVEVFIMXYRKWERPEKIR ZIV[IRHFEVI 7TVE GLIÚFIVXVEKIR[IVHIR%YGLHMI6IGLXIHIV;MIHIVKEFI HYVGL:SVXVEK*YROYRH*IVRWILIRWMRHZSVFILEPXIR(MI MR HMIWIQ &YGL IV[ÂLRXIR 7SJX YRH ,EVH[EVIFI^IMGL RYRKIR WMRH MR HIR QIMWXIR *ÂPPIR EYGL IMRKIXVEKIRI 1EVOIR YRH YRXIVPMIKIR EPW WSPGLI HIR KIWIX^PMGLIR
&IWXMQQYRKIR
Kantonsschule am Brühl SG
In Kooperation mit dem HERDT-Verlag stellen wir Ihnen eine PDF inkl. Zusatzmedien für Ihre persönliche Weiterbildung zur Verfügung. In Verbindung mit dem Programm HERDT-Campus ALL YOU CAN READ stehen diese PDFs nur Lehrkräften und Schüler*Innen der oben genannten Lehranstalt zur Verfügung. Eine Nutzung oder Weitergabe für andere Zwecke ist ausdrücklich verboten und unterliegt dem Urheberrecht. Jeglicher Verstoß kann zivil- und strafrechtliche Konsequenzen nach sich ziehen.
Schulversion
1 Grafikprogrammierung mit dem AWT...4
1.1 Was Sie wissen sollten ... 4
1.2 Das Abstract-Window-Toolkit ... 5
1.3 Das Toolkit ... 6
1.4 Fenster unter grafischen Oberflächen ... 6
2 Zeichnen - die grafische Darstellung ...10
2.1 Grundlegendes zum Zeichnen ... 10
2.2 Einfache Zeichenfunktionen ... 16
2.3 Zeichenketten schreiben ... 21
2.4 Clipping-Operationen ... 27
3 Farben ...30
3.1 Einleitung ... 30
3.2 Farben einsetzen ... 31
3.3 Vordefinierte Farben ... 32
3.4 Farben aus Hexadezimalzahlen erzeugen ... 33
3.5 Einen helleren oder dunkleren Farbton wählen ... 34
3.6 Farbmodelle HSB und RGB ... 35
3.7 Die Farben des Systems... 35
4 Bilder anzeigen und Grafiken verwalten....38
4.1 Bilder und Grafiken einsetzen ... 38
4.2 Bilder in Applikationen und Applets laden ... 39
4.3 Grafiken zeichnen und zentrieren ... 40
4.4 Bilder im Speicher verwalten... 42
4.5 Bilder skalieren ... 45
4.6 Programm-Icon/Fenster-Icon setzen ... 47
4.7 Grafiken mit der Klasse ImageIO verwenden ... 48
4.8 Bilder im GIF-Format speichern ... 50
4.9 JPEG-Dateien mit dem Sun-Paket schreiben ... 52
4.10 Die Java-Klassenbibliothek JIMI ... 54
5 Java 2D...56
5.1 Einführung ... 56
5.2 Das erste 2D-Programm ... 57
5.3 Geometrische Objekte durch Shape gekennzeichnet... 58
5.4 Eigenschaften geometrischer Objekte... 60
5.5 Transformationen mit einem AffineTransform-Objekt ... 65
6 Grundlagen der Ereignisbehandlung...66
6.1 Es tut sich was - Ereignisse beim AWT... 66
6.2 Events auf verschiedenen Ebenen... 67
6.3 Ereignisquellen, -senken und Horcher (Listener)... 68
6.4 Varianten, das Fenster zu schließen ... 71
7 Grundlegende Komponenten ... 76
7.1 Das AWT und Swing... 76
7.2 Die Basis aller Komponenten: Component und JComponent ... 77
7.3 Proportionales Vergrößern eines Fensters .... 80
7.4 Hinzufügen von Komponenten... 82
7.5 Das Swing-Fenster JFrame ... 82
7.6 Informationstext über die Klasse JLabel ... 84
7.7 Die Klasse ImageIcon ... 87
7.8 Eine Schaltfläche (JButton)... 90
7.9 Tooltips ... 96
7.10 Der Container JPanel... 97
8 LayoutManager ... 98
8.1 Alles Auslegungssache: die Layoutmanager ... 98
8.2 FlowLayout ... 99
8.3 BorderLayout ... 100
8.4 GridLayout ... 102
8.5 Der GridBagLayout-Manager ... 104
8.6 Null-Layout... 108
8.7 Weitere Layoutmanager... 108
9 Anzeige- und Bedienelemente... 110
9.1 Horizontale und vertikale Schieberegler... 110
9.2 JSlider... 113
9.3 Ein Auswahlmenü - Choice, JComboBox... 114
9.4 Eines aus vielen - Kontrollfelder (JCheckBox) ... 119
9.5 Kontrollfeldgruppen, Optionsfelder und JRadioButton ... 120
9.6 Der Fortschrittsbalken JProgressBar ... 122
9.7 Rahmen (Borders) ... 124
10Symbolleisten und weitere Bedienelemente ... 126
10.1 Symbolleisten alias Toolbars ... 126
10.2 Menüs ... 127
10.3 Mnemonics und Shortcuts (Accelerator) ... 129
10.4 Popup-Menüs ... 134
10.5 Das Konzept des Model-View-Controllers.... 136
10.6 List-Boxen... 138
10.7 JSpinner ... 140
10.8 Texteingabefelder ... 141
10.9 Die Editor-Klasse JEditorPane... 147
11Baumstrukturen, Tabellen und Dialoge ... 150
11.1 Bäume mit JTree-Objekten ... 150
11.2 Tabellen mit JTable... 152
11.3 Ein eigenes Tabellen-Model... 153
11.4 DefaultTableModel... 157
11.5 Ein eigener Renderer für Tabellen...157
11.6 Zell-Editoren ...160
11.7 Gestaltung einer Tabelle...161
11.8 JRootPane, JLayeredPane und JDesktopPane ...164
11.9 Dialoge ...166
12Look&Feel ...172
12.1 Flexibles Java-Look&Feel...172
12.2 Swing-Beschriftungen einer anderen Sprache geben ...174
12.3 Die Zwischenablage (Clipboard)...174
12.4 Undo durchführen ...177
12.5 Ereignisverarbeitung auf unterster Ebene...179
12.6 AWT, Swing und die Threads ...180
12.7 Selbst definierte Cursor ...184
12.8 Mausrad-Unterstützung ...186
12.9 Benutzerinteraktionen automatisieren ...186
13Drucken ...190
13.1 Einführung ...190
13.2 Ein PrintJob ...191
13.3 Drucken der Inhalte ...192
13.4 Mit speziellen Druckern arbeiten...193
14Internationalisierung und Lokalisierung ...194
14.1 Zeitzonen und Sprachen der Länder ...194
14.2 Sprachen der Länder ...197
14.3 Einfache Übersetzung durch ResourceBundle-Objekte...200
15Applets ...202
15.1 Einleitung ...202
15.2 Applets und Applikationen - wer darf was?...202
15.3 Das erste Hallo-Applet...203
15.4 Die Zyklen eines Applets ...204
15.5 Parameter an das Applet übergeben ...204
15.6 Fehler in Applets finden...206
15.7 Browserabhängiges Verhalten...207
15.8 Datenaustausch zwischen Applets ...209
15.9 Musik in einem Applet und in Applikationen...211
15.10 Webstart...213
16Komponenten durch Bohnen ...214
16.1 Grundlagen der Komponententechnik ...214
16.2 Das JavaBeans Development Kit (BDK)...216
16.3 Die kleinste Bohne der Welt ...218
16.4 Jar-Archive für Komponenten ...218
16.5 Worauf JavaBeans basieren ...220
16.6 Eigenschaften...220
16.7 Ereignisse ...223
16.8 Weitere Eigenschaften ...226
16.9 Bean-Eigenschaften anpassen...229
16.10 Property-Editoren ...230
16.11 BeanInfo...230
16.12 Beliebte Fehler ...231
Stichwortverzeichnis ...232
Schulversion
1 Grafikprogrammierung mit dem AWT
,QGLHVHP.DSLWHOHUIDKUHQ6LH
Æ ZLH6LHPLWGHU6FKXOXQJVXQWHUODJHDUEHLWHQ Æ *UXQGOHJHQGHV]XU*UDILNSURJUDPPLHUXQJPLW-DYD
Æ ZLH6LHDXIJUDILVFKHQ%HQXW]HUREHUIOlFKHQ)HQVWHUHU]HXJHQXQGDQ]HLJHQ
9RUDXVVHW]XQJHQ
9 *UXQGODJHQ]X-DYD
1.1 Was Sie wissen sollten
Aufbau der Schulungsunterlage
; 'LH*OLHGHUXQJGHU8QWHUODJHHUOHLFKWHUWGDV)HVWOHJHQGHU/HUQVFKZHUSXQNWH
; $P$QIDQJMHGHV.DSLWHOVILQGHQ6LHGLH/HUQ]LHOHLPhEHUEOLFN
; 'LH 1RWL]IHOGHU LQ GHU 6FKXOXQJVXQWHUODJH JHEHQ ,KQHQ GLH 0|JOLFKNHLW HLJHQH $QPHUNXQJHQ XQG (U NHQQWQLVVHVRZLHSUDNWLVFKH$UEHLWVWHFKQLNHQ]XYHUPHUNHQ
Typografische Konventionen
,P7H[WHUNHQQHQ6LHEHVWLPPWH3URJUDPPHOHPHQWHDQGHU)RUPDWLHUXQJ6RZHUGHQEHLVSLHOVZHLVH0HQ
SXQNWHLPPHULQ*5266%8&+67$%(1JHVFKULHEHQ
*5266%8&+67$%(1 YHUZHLVHQDXI0HQVE]Z0HQSXQNWH]%'$7(,6&+/,(66(1
.XUVLYVFKULIW NHQQ]HLFKQHWDOOHYRP$QZHQGHU]XJHZLHVHQHQ1DPHQZLH'DWHLQDPHQ2UGQHU QDPHQHLJHQH6\PEROOHLVWHQHWFVRZLH+\SHUOLQNVXQG3IDGQDPHQ
Courier new NHQQ]HLFKQHW3URJUDPPWH[W
Beispieldateien
'LHLQGHQ.DSLWHOQJH]HLJWHQ%HLVSLHOHILQGHQ6LH DOV-DYD4XHOOWH[WGDWHLHQ DXIGHU +RPHSDJHGHV+(5'7 9HUODJVLP,QWHUQHWXQWHUKWWSZZZKHUGW\RXGH
Hinweise zur Installation der Software
,Q GHQ %HVFKUHLEXQJHQ GHU 6FKXOXQJVXQWHUODJH ZLUG YRQ GHU (UVWLQVWDOODWLRQ GHU 6RIWZDUH 6XQ -DYD 3ODW IRUP6WDQGDUG(GLWLRQ-6(-'. DXVJHJDQJHQKWWSMDYDVXQFRPMVHGRZQORDGMVS'LH
%HVFKUHLEXQJHQVLQGVRZHLWP|JOLFKEHWULHEVV\VWHPXQDEKlQJLJJHKDOWHQ$OV7H[WHGLWRUZXUGHGLH(QWZLFN OXQJVXPJHEXQJ(FOLSVHKWWSZZZHFOLSVHRUJYHUZHQGHWHEHQVRODVVHQVLFKGLH%HLVSLHOSURJUDPPHDEHU DXFK PLW HLQHP 7H[WHGLWRU ZLH EHLVSLHOVZHLVH 7H[W3DG EHDUEHLWHQ GHU DOV 6KDUHZDUH XQWHU KWWSZZZWH[WSDGFRPHUKlOWOLFKLVW
1.2 Das Abstract-Window-Toolkit
(LQH 3URJUDPPLHUVSUDFKH GLH ]XP =LHO KDW SODWWIRUPXQDEKlQJLJH 6RIWZDUHHQWZLFNOXQJ ]X XQWHUVWW]HQ PXVVDXFKHLQH%LEOLRWKHNDQELHWHQGDPLWVLFKJUDILVFKH2EHUIOlFKHQJHVWDOWHQODVVHQ'LH%LEOLRWKHNPXVVLP :HVHQWOLFKHQGUHL'LQJHDEGHFNHQ
; 6LH PXVV JUDILVFKH 3ULPLWLYRSHUDWLRQHQ N|QQHQ ZLH /LQLHQ XQG 3RO\JRQH ]HLFKQHQ RGHU )DUEHQ XQG
=HLFKHQVlW]H]XZHLVHQ
; 6LH PXVV JUDILVFKH ,QWHUDNWLRQVNRPSRQHQWHQ GLH VR JHQDQQWHQ :LGJHWV :LQGRZ (OHPHQWV ZLH )HQVWHU6FKDOWIOlFKHQ7H[WIHOGHU0HQVXQG&RQWDLQHUXQWHUVWW]HQ
; 6LHPXVVHLQ0RGHOO]XU%HKDQGOXQJGHU(UHLJQLVVHGHILQLHUHQ
'D -DYD3URJUDPPH SRUWDEHO VHLQ PVVHQ HQWVWHKW VFKQHOO GDV 3UREOHP GDVV HLQH WROOH .RPSRQHQWH YRQ HLQHUEHVWLPPWHQ3ODWWIRUPQLFKWXQWHUVWW]WZLUGXQGHLQDQGHUHV)HDWXUHZLHGHUXPYRQHLQHUDQGHUHQQLFKW 'LH%LEOLRWKHNNDQQGDKHUQXUGDVDXIQHKPHQZDVDXIMHGHQ)DOOYRQMHGHUJUDILVFKHQ2EHUIOlFKHXQWHUVWW]W ZLUG 'DV LVW OHLGHU QLFKW YLHO -DYD GHILQLHUW GD]X GDV$EVWUDFW:LQGRZ7RRONLW $:7 GDV NRQNUHWH 3ODWW IRUPHQZLH0LFURVRIW:LQGRZV$SSOHV0DF26RGHU8QL[PLW0RWLILPSOHPHQWLHUHQ6RZLUGMHGH.RPSRQHQ WH LQ -DYD DXI HLQH .RPSRQHQWH GHU 3ODWWIRUP DEJHELOGHW 'DKHU VHKHQ SRUWLHUWH $QZHQGXQJHQ DXI MHGHP 5HFKQHUVRDXVZLHGHU5HVWGHU3URJUDPPH'DGDV$:7MHGRFKVRHLQIDFKJHKDOWHQLVWGDVVHLQHSURIHV VLRQHOOH 2EHUIOlFKH QXU PLW 0KH ]X HUVWHOOHQ LVW VLQG IU GLH $ENU]XQJ $:7 QRFK HLQ SDDU KlPLVFKH 'HXWXQJHQLP8PODXI$ZIXO:LQGRZ7RRONLW$ZNZDUG:LQGRZ7RRONLWRGHU$QQR\LQJ:LQGRZ7RRONLW
Java Foundation Classes
1DFK GHU )UHLJDEH GHV HUVWHQ $:7V ZXUGH NODU GDVV GDV /HLVWXQJVDQJHERW NHLQHVZHJV IU GLH =XNXQIW UHLFKW'LH(QWZLFNOHUKDEHQVLFKGHPJHZLGPHWXQGLQWHUHVVDQWH(UZHLWHUXQJHQJHVFKDIIHQGLHXQWHUGHP 1DPHQ-DYD)RXQGDWLRQ&ODVVHV-)&LQ-DYDHLQJHIKUWZXUGHQ'LH.ODVVHQEHVWHKHQLP:HVHQWOLFKHQDXV ; 6ZLQJ*8,.RPSRQHQWHQ
8QWHU GLH 6ZLQJ6HW.RPSRQHQWHQ IDOOHQ JDQ] QHXH JUDILVFKH (OHPHQWH 'LHVH VLQG DQGHUV DOV GLH SODWWIRUPDEKlQJLJHQ3HHU.RPSRQHQWHQGHVKHUN|PPOLFKHQ$:7VYROOVWlQGLJLQ-DYDLPSOHPHQWLHUW
$OOHUGLQJV EDVLHUHQ HLQLJH 6ZLQJ.RPSRQHQWHQ ZLH HLQJFrame DXI HLQHU VFKZHUJHZLFKWLJHQ $:7 .RPSRQHQWH2KQHGLHVH$EKlQJLJNHLWHQNDQQEHLVSLHOVZHLVHGDV$XVVHKHQHQJOORRNDQGIHHONXU]
/2) RGHU / ) JHlQGHUW ZHUGHQ 'HU 1DPH 6ZLQJ ZDU HLQ 3URMHNWQDPH GLHVHU .RPSRQHQWHQ XQG REZRKO6ZLQJQXUHLQ7HLOGHU-)&LVWEOHLEWGHU1DPHIUGLH2EHUIOlFKHQHOHPHQWHEHVWHKHQ
; 3OXJJDEOH/RRN )HHO
'LHVJLEWXQVGLH0|JOLFKNHLWGDV$XVVHKHQGHU.RPSRQHQWHQ]XU/DXI]HLWDOVRRKQHGDV3URJUDPP QHX]XVWDUWHQ]XlQGHUQ$OOH.RPSRQHQWHQGHV6ZLQJ6HWVEHVLW]HQGLHVH)lKLJNHLWDXWRPDWLVFK
; $FFHVVLELOLW\hEHUVWW]XQJIU0HQVFKHQPLW%HKLQGHUXQJHQ
0LWGLHVHU$3,NDQQPLWQHXHQ,QWHUDNWLRQVWHFKQLNHQDXIGLH-)&XQG$:7.RPSRQHQWHQ]XJHJULIIHQ ZHUGHQ=XGLHVHQ7HFKQLNHQ]lKOHQXQWHUDQGHUHP/HVHJHUlWHIU%OLQGHHLQH/XSHIUGHQ%LOGVFKLUP XQGDXFK6SUDFKHUNHQQXQJ
; -DYD'$3,
'LH ')XQNWLRQVELEOLRWKHN LVW HLQH QHXH 7HFKQLN GLH EHU HLQH 2EMHNWEHVFKUHLEXQJ lKQOLFK ZLH 3RVWVFULSW2EMHNWHELOGHWXQGGLHVHDXIGHP%LOGVFKLUPGDUVWHOOW=XGHQ)lKLJNHLWHQGHU%LEOLRWKHNJH K|UW HV NRPSOH[H 2EMHNWH GXUFK 3IDGH ELOGHQ ]X N|QQHQ XQG GDUDXI %HZHJXQJV XQG 9HUVFKLHEH RSHUDWLRQHQDQ]XZHQGHQ
; 'UDJ 'URS
'DWHQ N|QQHQ PLWWHOV 'UDJ 'URS OHLFKW YRQ HLQHU $SSOLNDWLRQ ]XU DQGHUHQ EHUWUDJHQ ZHUGHQ 'DEHL SURILWLHUHQ-DYD3URJUDPPHDXFKGDYRQ'DWHQ]XQXW]HQGLHQLFKWDXV-DYD3URJUDPPHQVWDPPHQ
Schulversion
1.3 Das Toolkit
'LHDEVWUDNWH.ODVVHToolkitGHILQLHUWV\VWHPXQGELOGVFKLUPDEKlQJLJH,PSOHPHQWLHUXQJHQ(VJLEWIUMHGH 3ODWWIRUP HLQH ,PSOHPHQWLHUXQJ GHU DEVWUDNWHQ .ODVVVH XQWHU :LQGRZV ]XP %HLVSLHO GLH LQWHUQH .ODVVH WToolkit 'DVNRQNUHWH7RRONLW2EMHNWOLHIHUWGLH)DEULNIXQNWLRQgetDefaultToolkit()'LHLPSOHPHQWLHU WHQ 0HWKRGHQ OLHIHUQ GHP $:7 ]XP %HLVSLHO GLH 3HHU2EMHNWH GRFK IU XQV (QGDQZHQGHU LVW GDV ZHQLJ LQWHUHVVDQW6SDQQHQGHUVLQGHWZDGLH$XVPDHGHV%LOGVFKLUPV
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
System.out.println( d ); // java.awt.Dimension[width=1024,height=768]
'DV 7RRONLW NDQQ DXFK HLQHQ 6\VWHPKLQZHLV DOV %HHS VHQGHQ GDPLW GHU $QZHQGHU GLH 0HOGXQJ ]XVlW]OLFK DNXVWLVFKZDKUQLPPW=XQlFKVWLVWGHQNEDUGHQ$6&,,&RGHDXV]XJHEHQ'DGLH.RQVROHDOOHUGLQJVQLFKW DOOH$6&,,=HLFKHQYHUDUEHLWHQPXVVXQGVRPLWDXIGLHNHLQH$QWZRUW]XJHEHQKDWLVWGLHVH/|VXQJQLFKW LQ DOOHQ )lOOHQ YRQ (UIROJ JHNU|QW =XGHP PLVFKW VLFK KLHU GLH .RQVROHQDXVJDEH PLW 2SHUDWLRQHQ DXI GHQ
%HQXW]HUVFKQLWWVWHOOHQEHLGHVROOWHQHQWNRSSHOWZHUGHQ:DVJHVFKLHKW]XP%HLVSLHOZHQQGLH$XVJDEHDXI HLQDQGHUHV'LVSOD\XPJHOHLWHWZLUG"(LQH0HWKRGHGHV7RRONLWVKLOIWKLHUbeep()
import java.awt.*;
public class ToolkitBeep {
public static void main( String args[] ) {
Toolkit.getDefaultToolkit().beep();
System.exit( 0 );
} }
ToolkitBeep.java
abstract class java.awt.Toolkit ; static Toolkit getDefaultToolkit()
/LHIHUWGDVDNWXHOOH7RRONLW]XUFN
; abstract Dimension getScreenSize()
/LHIHUWHLQ'LPHQVLRQ2EMHNWPLWGHU*U|HGHV%LOGVFKLUPV
; abstract void beep()
*LEWHLQ%HHSDXV
(LQH JDQ] DQGHUH 0|JOLFKNHLW LVW HV 6RXQGGDWHLHQ DE]XVSLHOHQ 6R ODVVHQ VLFK GLH YHUVFKLHGHQVWHQ %HHSV ]XVDPPHQVWHOOHQ:LUZHUGHQGDVLP.DSLWHOQlKHUXQWHUVXFKHQ
1.4 Fenster unter grafischen Oberflächen
'HU $QIDQJ DOOHU 3URJUDPPH XQWHU HLQHU JUDILVFKHQ %HQXW]HUREHUIOlFKH LVW GDV )HQVWHU HQJOIUDPH :LU PVVHQXQVGDKHUHUVWPLWGHQ)HQVWHUQEHVFKlIWLJHQEHYRUZLUDXIGHQ,QKDOWQlKHUHLQJHKHQN|QQHQ'DV )HQVWHUGLHQWDXFKDOV*UXQGODJHYRQ'LDORJHQVSH]LHOOHQ)HQVWHUQGLHHQWZHGHUPRGDORGHUQLFKWPRGDODU EHLWHQN|QQHQ:REHLHLQPRGDOHU'LDORJHUVWEHGLHQWZHUGHQP|FKWHELVHVPLWGHP*HVDPWV\VWHPZHLWHU JHKHQNDQQ
8PLQHLQ)HQVWHUHWZDV]X]HLFKQHQPXVVYRUKHUJUXQGVlW]OLFKGLH(QWVFKHLGXQJIU6ZLQJRGHU$:7JHIlOOW ZHUGHQGHQQDEKlQJLJYRQGHU:DKOLVWGDV9HUIDKUHQ]XP=HLFKHQHWZDVDQGHUV
AWT-Fenster darstellen
8PXQWHUGHP$:7HLQ)HQVWHU]X|IIQHQPVVHQZLU]XQlFKVWGDVawt3DNHWHLQELQGHQ'DQQN|QQHQZLU HLQH.ODVVHFrameXQGGHUHQ0HWKRGHQQXW]HQ'DV/LVWLQJLVWVHKUNXU]
import java.awt.Frame;
public class HelloAwtFrame {
public static void main( String args[] ) {
Frame f = new Frame( "Das Fenster zur Welt" );
f.setSize( 300, 200 );
f.setVisible( true );
} }
HelloAwtFrame.java
1HEHQGHP6WDQGDUG.RQVWUXNWRUH[LVWLHUWHLQZHLWHUHUEHLGHPZLUGHQ1DPHQLQGHU7LWHOOHLVWHEHVWLPPHQ N|QQHQZLHLP%HLVSLHOJHVFKHKHQ'DV)HQVWHUNDQQQLFKWPLW;LQGHU7LWHOOHLVWHJHVFKORVVHQZHUGHQGD QRFKNHLQH(UHLJQLVEHKDQGOXQJLPSOHPHQWLHUWLVW
class java.awt.Frame
extends Window
implements MenuContainer ; Frame()
(U]HXJWHLQQHXHVFrame2EMHNWZHOFKHVDP$QIDQJXQVLFKWEDULVW
; Frame( String title )
(U]HXJWHLQQHXHVFrame2EMHNWPLWHLQHP)HQVWHU7LWHOZHOFKHVDP$QIDQJXQVLFKWEDULVW
Swing-Fenster darstellen
(LQ)HQVWHUXQWHU6ZLQJXQWHUVFKHLGHWVLFKYRP$QVDW]QLFKWYRP$:73HGDQWGLH.ODVVHKHLWJFrameVWDWW Frame
import javax.swing.JFrame;
public class HelloSwingFrame {
public static void main( String args[] ) {
JFrame f = new JFrame( "Das Fenster zur Welt" );
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 300, 200 );
f.setVisible( true ); } }
HelloSwingFrame.java
'LHSUDNWLVFKH)XQNWLRQsetDefaultCloseOperation()PLWGHP$UJXPHQWJFrame.EXIT_ON_CLOSEEHHQ GHWGLH$SSOLNDWLRQZHQQGHU%HQXW]HUGDV)HQVWHUVFKOLHW'DV$:7ELHWHWHLQHlKQOLFKH)XQNWLRQQLFKWDQ (EHQVRZLHGHUjava.awt.FrameEHVLW]WGHUjavax.swing.JFrameQHEHQGHPSDUDPHWULVLHUWHQ.RQVWUXNWRU HLQHQ6WDQGDUG.RQVWXNWRU
class javax.swing.JFrame
extends Frame
implements WindowConstants, Accessible, RootPaneContainer ; JFrame()
(U]HXJWHLQQHXHVJFrame2EMHNWZHOFKHVDP$QIDQJXQVLFKWEDULVW
; JFrame( String title )
(U]HXJWHLQQHXHVJFrame2EMHNWPLWHLQHP)HQVWHU7LWHOZHOFKHVDP$QIDQJXQVLFKWEDULVW 'HU7LWHOHLQHV$:7XQG6ZLQJ)HQVWHUVOlVVWVLFKVSlWHUPLWsetTitle()ZLHGHUlQGHUQ
Das erste Swing-Fenster
Schulversion
Sichtbarkeit des Fensters
1DFKGHU.RQVWUXNWLRQLVWGDV)HQVWHUYRUEHUHLWHWDEHUQRFKQLFKWVLFKWEDU(VZLUGHUVWQDFKGHP$XIUXIYRQ setVisible(true)VLFKWEDU'DVLFKGLHFrame.ODVVHGLUHNWYRQWindowDEOHLWHWHLQFrameLVWHLQWindow PLW 7LWHOOHLVWH XQGJFrame YRQFrame EHVLW]WFrame XQG DXFKJFrame NHLQH HLJHQHsetVisible() )XQNWLRQVRQGHUQHUEHQVLHYRQComponentZRYRQLQGLUHNWDXFKWindowZLHGHUDEJHOHLWHWLVW
abstract class java.awt.Component
implements ImageObserver, MenuContainer, Serializable ; void setVisible( boolean b )
; setVisible(true)]HLJWGDV)HQVWHUDQ/LHJWHVLP+LQWHUJUXQGVRZLUGHVZLHGHULQGHQ9RUGHU JUXQGJHKROW)UKHUZXUGHGLH0HWKRGHshow()YHUZHQGHW
:HLWHUH)XQNWLRQHQGLHIUJFrameXQGFrameLQWHUHVVDQWVLQGVWDPPHQYRQGHU2EHUNODVVHWindow class java.awt.Window
extends Container implements Accessible ; boolean isShowing()
trueZHQQVLFKGDV)HQVWHUDXIGHP%LOGVFKLUPEHILQGHW
; void toBack()
'DV )HQVWHU ZLUG DOV KLQWHUVWHV LQ GLH )HQVWHUUHLKHQIROJH HLQJHUHLKW (LQ DQGHUHV )HQVWHU ZLUG VRPLW VLFKWEDU
; void toFront()
3ODW]LHUWGDV)HQVWHUDOVYRUGHUVWHVLQGHU'DUVWHOOXQJDOOHU)HQVWHUDXIGHP6FKLUP
Größe und Position des Fensters verändern
0LWGHUDXVComponentJHHUEWHQ0HWKRGHsetSize()N|QQHQZLUGLH0DHGHV)HQVWHUVYHUlQGHUQ abstract class java.awt.Component
implements ImageObserver, MenuContainer, Serializable ; void setSize( int width, int height )
9HUlQGHUWGLH*U|HHLQHU.RPSRQHQWHHKHPDOVsize()
; void setSize( Dimension d )
9HUlQGHUWGLH*U|HHLQHU.RPSRQHQWHHQWVSULFKWsetSize(d.width, d.height)
Beispiel
'LH3RVLWLRQGHV)HQVWHUVfNDQQPLWsetLocation()JHlQGHUWZHUGHQ:HUGDV)HQVWHU]XP%HLVSLHOLQGHU 0LWWHGHV%LOGVFKLUPVSRVLWLRQLHUHQP|FKWHPXVVQXUYRUKHUGLH*U|HGHV%LOGVFKLUPVHUIUDJHQ'LHVIXQNWLR QLHUWPLWgetScreenSize()HLQHU)XQNWLRQGHV7RRONLWV
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
f.setLocation( (d.width – getSize().width ) / 2, (d.height- getSize().height) / 2 );
abstract class java.awt.Component
implements ImageObserver, MenuContainer, Serializable ; void setLocation( int x, int y )
6HW]WGLH.RPSRQHQWHDQGLH3RVLWLRQxyHKHPDOVmove()
; void setLocation( Point p )
6HW]WGLH.RPSRQHQWHDQGLHJHZQVFKWH3RVLWLRQ
; Point getLocation()
/LHIHUWGLH3RVLWLRQGHU.RPSRQHQWHDOVPoint2EMHNW
Beispiel
$XFKGDV9HUJU|HUQHLQHV)HQVWHUVfVRGDVVHVGLHPD[LPDOH$XVGHKQXQJDQQLPPWLVWPLWHLQHU)XQNWLRQ P|JOLFK %HWUDFKWHQ ZLU GLH IROJHQGHQ =HLOHQ GLH KLQWHU HLQHsetVisible(true)0HWKRGH ]XP %HLVSLHO LP .RQVWUXNWRUJHVHW]WZHUGHQ
f.setLocation( 0, 0 );
f.resize( Toolkit.getDefaultToolkit().getScreenSize() );
6ROOGHU)UDPHQLFKWLQGHU*U|HYHUlQGHUEDUVHLQVRVHW]HQZLUHLQIDFKsetResizable(false)
Frame frame = new Frame( "Du kriegst mich nicht klein." );
frame.setResizable( false );
Hauptprogramm von Frame/JFrame ableiten
:LUN|QQHQXQVHUHQHXH.ODVVHDXFKGLUHNWYRQFrameE]ZJFrameDEOHLWHQ'DQQLVWHVXQVJHVWDWWHWGLH )XQNWLRQHQ GHU .ODVVHQ GLUHNW DXI]XUXIHQ ]XP %HLVSLHOsetSize() ,P +DXSWSURJUDPP HU]HXJHQ ZLU EHU GHQ HLJHQHQ .RQVWUXNWRU GDQQ GDV )HQVWHU GHQQ GHU HLJHQH .RQVWUXNWRU UXIW MD EHU GLHsuper())XQNWLRQ DXWRPDWLVFKGHQ.RQVWUXNWRUGHU2EHUNODVVHDOVRYRQFrameE]ZJFrameDXI
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class SubWin extends JFrame {
public SubWin( int x, int y ) {
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setVisible( true );
setSize( x, y );
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setLocation( (d.width – getSize().width ) / 2, (d.height – getSize().height) / 2 );
}
public static void main( String args[] ) {
SubWin win = new SubWin( 200, 100 );
} }
SubWin.java
'DV 3URJUDPP HU]HXJW HLQ ([HPSODU YRQSubWin GDV ZLHGHUXP HLQJFrame LVW :LUG HLQSubWin HU]HXJW ZLUG GHU .RVWUXNWRU DEJHDUEHLWHW GHU GDV )HQVWHU DXI GLH LP .RQVWUXNWRU EHUJHEHQH *U|H PLWWLJ DXI GLH
%HQXWHUREHUIOlFKHVHW]W'DV)HQVWHUZLUGDXWRPDWLVFKDQJH]HLJW
Fenster- und Dialog-Dekoration
)U EHVWLPPWH $QZHQGXQJHQ LVW HV JQVWLJ EHL )HQVWHUQ XQG 'LDORJHQ GLH 6WDQGDUGGLDORJHOHPHQWH DXV ]XVFKDOWHQHWZD GDQQZHQQGHU%HQXW]HUGDV)HQVWHUQLFKWYHUNOHLQHUQVROO6HLWGHP6'.KDEHQGLH (QWZLFNOHUGHQ.ODVVHQFrameXQGDialogHLQH0HWKRGHsetUndecorated()PLWJHJHEHQEHUGLHVLFKGLH 7LWHOOHLVWH GDV 6\VWHPPHQ XQG GHU 5DKPHQ DEVFKDOWHQ ODVVHQ 'D 6ZLQJ DXI GHQ $:7.RPSRQHQWHQ EDVLHUWJLOWGDVDXFKIU6ZLQJ)HQVWHUXQG'LDORJH
class java.awt.Frame extends Window implements MenuContainer class java.awt.Dialog extends Window
; void setUndecorated( boolean undecorated ) 6HW]WO|VFKWGLH'HNRUDWLRQ
; boolean isUndecorated() (UIUDJWGLH'HNRUDWLRQ
Schulversion
2 Zeichnen - die grafische Darstellung
,QGLHVHP.DSLWHOHUIDKUHQ6LH
Æ ZLH6LHPLWKLOIHGHV$:7]HLFKQHQN|QQHQ
Æ ZLH6LH7H[WDXVJHEHQXQGYHUVFKLHGHQH6FKULIWDUWHQHLQVHW]HQ Æ ZLH6LHPLW&OLSSLQJ%HUHLFKHQDUEHLWHQ
9RUDXVVHW]XQJHQ
9 )HQVWHUSURJUDPPLHUXQJ
2.1 Grundlegendes zum Zeichnen
1DFKGHPZLUHLQ)HQVWHU|IIQHQN|QQHQZROOHQZLUHWZDVLQGHQ)HQVWHULQKDOWVFKUHLEHQ'DVLFKKLHUGLH :HJH]ZLVFKHQ$:7XQG6ZLQJWUHQQHQZROOHQZLUGHQ:HJPLW6ZLQJZHLWHUEHVFKUHLWHQ
Die paint()-Methode für das AWT-Frame
$OV HLQOHLWHQGHV %HLVSLHO VROO XQV JHQJHQ HLQHQ 7H[W ]X SODW]LHUHQ 'DIU EHUVFKUHLEHQ ZLU GLH )XQNWLRQ paint()GHU.ODVVHFrameXQGVHW]HQGRUWDOOHVUHLQZDVJH]HLFKQHWZHUGHQVROOHWZD/LQLHQ7H[WHRGHU JHIOOWH3RO\JRQH'HUJHZQVFKWH,QKDOWZLUGLPPHUGDQQJH]HLFKQHWZHQQGDV)HQVWHUQHXDXIJHEDXWZLUG RGHU ZLU YRQ DXHQrepaint()DXIUXIHQ GHQQ JHQDX LQ GHP )DOO ZLUG GDV *UDILNV\VWHPpaint() DXIUXIHQ XQGGDV=HLFKQHQDQVWRHQ
import java.awt.*;
import java.awt.event.*;
public class Biene extends Frame {
public Biene() {
setSize( 500, 100 );
addWindowListener( new WindowAdapter() { public void windowClosing ( WindowEvent e) { System.exit(0); }
});
}
public void paint( Graphics g ) {
g.drawString( "\"Maja, wo bist du?\" (Mittermeier)", 100, 60 );
}
public static void main( String args[] ) {
new Biene().setVisible( true );
} }
Biene.java
Ein Fenster mit gezeichnetem Inhalt
Der Grafikkontext Graphics
(LQ VSH]LHOOHU :HUW ZLUG LQ GHUpaint()0HWKRGH EHUJHEHQ GHU *UDILNNRQWH[W HLQ 2EMHNW YRP 7\S GraphicsGraphic EHVLW]W YHUVFKLHGHQH 0HWKRGHQ ]XP =HLFKQHQ HWZD YRQ /LQLHQ .UHLVHQ 2YDOHQ 5HFKWHFNHQ=HLFKHQIROJHQRGHU%LOGHUQ'DVJUDILVFKH6\VWHPEHUJLEWXQVHUHP3URJUDPPEHUpaint()HLQ JOWLJHVGraphics2EMHNW XQG ZLU N|QQHQ DXI GLHVH :HLVH DXI GHU JUDILVFKHQ 2EHUIOlFKH ]HLFKQHQ 'LHV IXQNWLRQLHUW DXFK GDQQ ZHQQ GLH =HLFKHQIOlFKH QLFKW GLUHNW VLFKWEDU LVW ZLH EHL +LQWHUJUXQGJUDILNHQ 'DV Graphics2EMHNWIKUW%XFKEHUPHKUHUH'LQJH
; 'LH.RPSRQHQWHDXIGHU]X]HLFKQHQLVWKLHUHUVWHLQPDOGDVURKH)HQVWHU
; .RRUGLQDWHQ GHV %LOGEHUHLFKV XQG GHV &OLSSLQJ%HUHLFKV 'LH =HLFKHQRSHUDWLRQHQ DXHUKDOE GHV
&OLSSLQJ%HUHLFKV ZHUGHQ QLFKW DQJH]HLJW 'DKHU ZLUG HLQ &OLSSLQJ%HUHLFK DXFK %HVFKQLWW%HUHLFK JHQDQQW
; 'HUDNWXHOOH=HLFKHQVDW]java.awt.FontXQGGLHDNWXHOOH)DUEHjava.awt.Color
; 'LH3L[HORSHUDWLRQ;25RGHU3DLQW
; 'LH)XQNWLRQPLWGHUGLH)DUEHYHUNQSIWZLUG
; 7UDQVODWLRQDOVRHLQH9HUVFKLHEXQJYRP1XOOSXQNW
:LU N|QQHQ QXU LQ GHUpaint()0HWKRGH DXI GDVGraphics 2EMHNW ]XJUHLIHQ 'LHVH ZLHGHUXP ZLUG LPPHU GDQQDXIJHUXIHQZHQQGLH.RPSRQHQWHQHXJH]HLFKQHWZHUGHQPXVV'LHVQXW]HQZLUGDIUXPHLQHQ7H[W ]XVFKUHLEHQ
/HLFKW LVW ]X HQWQHKPHQ GDVVdrawString(String text, int x, int y) HLQHQ 7H[W LQ GHQ =HLFKHQ EHUHLFKGHV*UDILNNRQWH[WVVFKUHLEW,P)ROJHQGHQZHUGHQZLUQRFKZHLWHUH)XQNWLRQHQNHQQHQOHUQHQ +LQZHLV(WZDVXQJHZ|KQOLFKLVWGDVVGHU1XOOSXQNWQLFKWREHQOLQNVLQGHQVLFKWEDUHQ%HUHLFKIlOOWVRQGHUQ GDVV GLH 7LWHOOHLVWH GHQ 1XOOSXQNW EHUGHFNW 8P DQ GLH +|KH GHU 7LWHOOHLVWH ]X NRPPHQ XQG GLH =HLFKHQ RSHUDWLRQHQVR]XYHUVFKLHEHQGDVVVLHLQGHQVLFKWEDUHQ%HUHLFKIDOOHQZLUGHLQjava.awt.Insets2EMHNW EHQ|WLJW,VWfHLQFrame2EMHNWOLHIHUWf.getInserts().topGLH+|KHGHU7LWHOOHLVWH
Zeichen von Inhalten mit JFrame
*UXQGVlW]OLFKOLHHVLFKDXFKYRQJFrameHLQHQ8QWHUNODVVHELOGHQXQGpaint()EHUVFKUHLEHQDEHUGDVLVW QLFKWGHUEOLFKH:HJ6WDWWGHVVHQZlKOHQZLUHLQHQDQGHUHQ$QVDW]GHUVRJDUDXFKXQWHU$:7HLQHJXWH /|VXQJLVW:LUELOGHQHLQH HLJHQH.RPSRQHQWHHLQH8QWHUNODVVHYRQJPanelXQWHU$:7PanelZDVZLU DEHUQLFKWPHKUZHLWHUYHUIROJHQZROOHQXQGVHW]WHQGLHVHDXIGDV)HQVWHU:HQQQXQGDV)HQVWHUQHXJH ]HLFKQHW ZLUG ZLUG DXFK GLH .RPSRQHQWHJPanel QHX JH]HLFKQHW XQG UXIW GLHpaint())XQNWLRQ DXI
$OOHUGLQJVEHUVFKUHLEHQ8QWHUNODVVHQYRQ6ZLQJLP5HJHOIDOOpaint()QLFKWVRQGHUQHLQHDQGHUH)XQNWLRQ paintComponent()'DVOLHJWGDUDQGDVV6ZLQJLQpaint()]XP%HLVSLHOQRFK5DKPHQ]HLFKQHWXQGVLFK XP HLQH 3XIIHUXQJ GHV %LOGVFKLUPLQKDOWHV ]XU 2SWLPLHUXQJ NPPHUW 6R UXIWpaint() GLH GUHL )XQNWLRQHQ paintComponent()paintBorder() XQGpaintChildren() DXI XQG EHL :LHGHUGDUVWHOOXQJ NPPHUW VLFK HLQRepaintManagerXPHLQH]JLJH'DUVWHOOXQJPLW+LOIHGHUJHSXIIHUWHQ,QKDOWHZDVEHLQRUPDOHQ6ZLQJ ,QWHUDNWLRQVNRPSRQHQWHQZLH6FKDOWIOlFKHQZLFKWLJLVW
'DPLW LVW GLH 'DUVWHOOXQJ YRQ ,QKDOWHQ LQ HLQHPJFrame HLQIDFK :LU LPSRUWLHUHQ GUHL .ODVVHQJPanel XQG JFrameDXVjavax.swingXQGGraphicsDXVjava.awt'DQQELOGHQZLUHLQH8QWHUNODVVHYRQJPanelXQG
EHUVFKUHLEHQpaintComponent() Notizen
Schulversion
import java.awt.Graphics;
import javax.swing.*;
class DrawFirstLine extends JPanel {
protected void paintComponent( Graphics g ) {
super.paintComponent( g );
g.drawLine( 10, 10, 100, 50 );
}
DrawFirstLine.java
paintComponent()EHVLW]WLVWLQGHU2EHUNODVVHGLH6LFKWEDUNHLWprotectedZDVZLUEHLEHKDOWHQVROOWHQ'LH )XQNWLRQZLUGQLFKWYRQDXHQDXIJHUXIHQXQGGDKHUPXVVHLQH8QWHUNODVVHGLH6LFKWEDUNHLWQLFKW]Xpublic HUZHLWHUQ'HU$XIUXIYRQsuper.paintComponent()LVWLPPHUGDQQDQJHEUDFKWZHQQGLH2EHUNODVVHLKUH ,QKDOWH]HLFKQHQVROO%HLYROOVWlQGLJHLJHQHP,QKDOWLVWGDVQLFKWQ|WLJ
'HUOHW]WH6FKULWWLVWHLQ7HVWSURJUDPPZHOFKHVHLQ([HPSODUGHVVSH]LDOLVLHUWHQJPanelVELOGHWXQGDXIGHQ JFrameVHW]W
public static void main( String args[] ) {
JFrame f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize ( 100, 100 );
f.add( new DrawFirstLine() );
f.setVisible( true );
} }
'DV +LQ]XIJHQ YRQ .RPSRQHQWHQ DXI GDVJFrame XQWHUVWW]W HUVW -DYD PLWadd() 9RUKHU KLH HV f.getContentPane().add()'LH/|VXQJPLWGHPJPanelPXVVDXFKQLFKWGLH+|KHGHU7LWHOOHLVWHEHUFN VLFKWLJHQGLH.RPSRQHQWHJPanelGLHDXIGDV)HQVWHUJHVHW]WZLUGLVWNRUUHNWXQWHUGHU7LWHOOHLVWHXQGQLFKW XQWHULKU
Auffordern zum Neuzeichnen mit repaint()
'LH0HWKRGHrepaint()NDQQYRQDXHQDXIJHUXIHQZHUGHQXPHLQ1HX]HLFKQHQ]XHU]ZLQJHQ:HQQGLH .RPSRQHQWH HLQH 6ZLQJ.RPSRQHQWH LVW VR ZLH XQVHUH 8QWHUNODVVH YRQJPanel GDQQ ZLUG GLHpaint() 0HWKRGHGHU.RPSRQHQWHDXIJHUXIHQ,P)DOOHLQHU$:7.RPSRQHQWHZLH)UDPHZLUGupdate()DXIJHUX IHQZDVMDDXWRPDWLVFKpaint()DXIUXIW
abstract class java.awt.Component
implements ImageObserver, MenuContainer, Serializable
; void repaint()
(UEHWHWVRIRUWLJHV1HX]HLFKQHQ
; void repaint( long tm )
(UEHWHW1HX]HLFKQHQLQmillis0LOOLVHNXQGHQ
; void repaint( int x, int y, int width, int height ) (UEHWHW1HX]HLFKQHQGHU.RPSRQHQWHLPDQJHJHEHQHQ%HUHLFK
; void repaint( long tm, int x, int y, int width, int height )
(UEHWHW1HX]HLFKQHQGHU.RPSRQHQWHQDFKtm0LOOLVHNXQGHQLPDQJHJHEHQHQ%HUHLFK
Fensterinhalte ändern und die ereignisorientierte Programmierung
'HU (LQVWLHJ LQ GLH :HOW GHU *UDILNSURJUDPPLHUXQJ PDJ HWZDV VHOWVDP HUVFKHLQHQ GD LQ GHU SUR]HGXUDOHQ QLFKWHUHLJQLVJHVWHXHUWHQ:HOWZLHGHU&GLH3URJUDPPLHUXQJDQGHUVYHUOLHI(VJDEHLQSDDU)XQNWLRQHQ XQGPLWGHQHQOLHVLFKGLUHNWVLFKWEDUDXIGHP%LOGVFKLUPRSHULHUHQ(LQ%HLVSLHODXVGHU&=HLW
10 COLOR 0,1 :REM SELECT BACKGROUND COLOR 20 COLOR 1,3 :REM SELECT FOREGROUND COLOR 30 COLOR 4,1 :REM SELECT BORDER COLOR 40 GRAPHIC 1,1 :REM SELECT BIT MAP MODE 60 CIRCLE 1,160,100,40,40 :REM DRAW A CIRCLE
70 COLOR 1,6 :REM CHANGE FOREGROUND COLOR 80 BOX 1,20,60,100,140,0,1 :REM DRAW A BLOCK
90 COLOR 1,9 :REM CHANGE FOREGROUND COLOR 100 BOX 1,220,62,300,140,0,0 :REM DRAW A BOX
110 COLOR 1,9 :REM CHANGE FOREGROUND COLOR 120 DRAW 1,20,180 TO 300,180 :REM DRAW A LINE
130 DRAW 1,250,0 TO 30,0 TO 40,40 TO 250,0:REM DRAW A TRIANGLE 140 COLOR 1,15 :REM CHANGE FOREGROUND COLOR 150 DRAW 1,160,160 :REM DRAW A POINT
160 PAINT 1,150,97 :REM PAINT IN CIRCLE
170 COLOR 1,5 :REM CHANGE FOREGROUND COLOR 180 PAINT 1,50,25 :REM PAINT IN TRIANGLE 190 COLOR 1,7 :REM CHANGE FOREGROUND COLOR 200 PAINT 1,225,125 :REM PAINT IN EMPTY BOX 210 COLOR 1,11 :REM CHANGE FOREGROUND COLOR 220 CHAR 1,11,24,"GRAPHIC EXAMPLE" :REM DISPLAY TEXT
230 FOR I=1 TO 5000:NEXT:GRAPHIC 0,1:COLOR 1,2
'LHVH+HUDQJHKHQVZHLVHIXQNWLRQLHUWLQ-DYDXQGDXFKYLHOHQPRGHUQHQ6\VWHPHQQLFKWPHKU6LHKDWPLW 2EMHNWRULHQWLHUXQJDXFKQLFKWYLHO]XWXQ
,Q-DYDIKUWHLQ(UHLJQLV]XP$XIUXIGHUpaint())XQNWLRQ'LHVHV(UHLJQLVUHSDLQW(UHLJQLVNDQQDXVJHO|VW ZHUGHQ ZHQQ GHU %LOGVFKLUP ]XP HUVWHQ 0DO JH]HLFKQHW ZLUG DEHU DXFK ZHQQ 7HLOH GHV %LOGVFKLUPV YHU GHFNWZHUGHQ)DOOVGDVUHSDLQW(UHLJQLVNRPPWVSULQJWGDV-DYD6\VWHPLQGLHpaint()0HWKRGHLQGHUGHU
%LOGVFKLUPDXIJHEDXWZHUGHQNDQQ1XUGRUWILQGHQGLH=HLFKHQRSHUDWLRQHQVWDWW:HQQZLUQXQVHOEVWHWZDV ]HLFKQHQZROOHQGDQQNDQQGDVQXULQGHUpaint())XQNWLRQJHVFKHKHQEH]LHKXQJVZHLVHLQ0HWKRGHQGLH YRQpaint()DXIJHUXIHQZHUGHQ$EHUZHQQZLUVHOEVWHWZDV]HLFKQHQZROOHQZLHOlVVWVLFKpaint()GDQQ SDUDPHWULVLHUHQ"
8P PLW GLHVHP 3UREOHP XP]XJHKHQ PVVHQ ZLU GHUpaint())XQNWLRQ ,QIRUPDWLRQ PLWJHEHQ 'LHVH NDQQ paint() QXU DXV GHQ 2EMHNWDWWULEXWHQ EH]LHKHQ 'DKHU LPSOHPHQWLHUHQ ZLU HLQH 8QWHUNODVVH HLQHU .RPSR QHQWHGLHHLQHpaint())XQNWLRQEHVLW]W$QVFKOLHHQGN|QQHQZLU2EMHNW]XVWlQGHlQGHUQVRGDVVpaint() QHXH:HUWHEHNRPPWXQGVRPLWJHZQVFKWH,QKDOWH]HLFKQHQNDQQ
(LQ %HLVSLHO VROO GLHV GHXWOLFK PDFKHQ :LU ELOGHQ HLQH 8QWHUNODVVH YRQWindow XQG VHW]HQ GDQQ 2EMHNW ]XVWlQGH 'DPLW ZLU VHOEVW GDV 1HX]HLFKQHQ DQUHJHQ N|QQHQ QXW]HQ ZLU GLH 0HWKRGHrepaint() 6LH HU ]HXJWHLQ1HX]HLFKQHQ(YHQWZHOFKHVYRQGHU(UHLJQLVYHUDUEHLWXQJDEJHDUEHLWHWZLUGXQG]XP1HX]HLFKQHQ GHV%LOGVFKLUPVIKUW
Notizen
Schulversion
import java.awt.*;
import javax.swing.JOptionPane;
class DrawingWindow extends Window {
String title = "";
DrawingWindow( Frame f ) {
super( f );
setSize( Toolkit.getDefaultToolkit().getScreenSize() );
setVisible( true );
}
public void paint( Graphics g ) {
g.drawString( title, 100, 400 );
} }
public class PaintIndirect {
public static void main( String args[] ) throws Exception {
DrawingWindow w = new DrawingWindow( new Frame() );
w.title = "Bei den US-Militäraktionen in Afghanistan sind über 800 " + "Zivilisten durch militärischen Fehlgriffe umgekommen.";
w.repaint();
JOptionPane.showMessageDialog( w, "Die Quelle?" );
w.title = "New York Times und die nichtstaatliche Organisation Global Exchange.";
w.repaint();
w.title = JOptionPane.showInputDialog( w, "Antwort" );
w.repaint();
JOptionPane.showMessageDialog( w, "Nun ist aber Schluss!" );
System.exit( 0 );
} }
PaintIndirect.java
%OHLEW DOV /HW]WHV GLH )UDJH ZLH VLFK VR HWZDV ZLH &)HDOLQJ QDFKELOGHQ OlVVW 'LH ]X ]HLFKQHQGHQ (OHPHQWHZLH/LQH.UHLVN|QQHQ2EMHNWHVHLQGLHLQHLQH'DWHQVWUXNWXUHLQJHUHLKWZHUGHQ1HKPHQZLUDQ HVH[LVWLHUWIUMHGH]X]HLFKQHQGH3ULPLWLYHHLQH.ODVVH'DQQNDQQHLQHDOOJHPHLQH=HLFKHQNODVVH0HWKRGHQ ZLHline() DQELHWHQ GLH GDQQ HLQ =HLFKHQREMHNW HUVWHOOWHQ XQG LQ GLH 'DWHQVWUXNWXU HLQUHLKHQ ,Q GHU paint())XQNWLRQ ZLUG HLQIDFK GLH 'DWHQVWUXNWXU DEJHODXIHQ 2KQH KLHU HLQH YROOVWlQGLJH ,PSOHPHQWLHUXQJ DQ]XELHWHQN|QQWHHLQ.ODVVHIROJHQGHQ$XIEDXKDEHQ
import java.awt.Graphics;
import java.util.*;
public class PrimitivZeichner {
private Collection<Primitiv> elements = new ArrayList<Primitiv>();
private interface Primitiv {
void paint( Graphics g );
}
private class Line implements Primitiv {
private int x1, y1, x2, y2;
public Line( int x1, int y1, int x2, int y2 ) {
this.x1 = x1; this.y1 = y1;
this.x2 = x2; this.y2 = y2;
}
public void paint( Graphics g ) {
g.drawLine( x1, y1, x2, y2 );
} }
public void line( int x1, int y1, int x2, int y2 ) {
elements.add( new Line(x1, y1, x2, y2) );
}
public void paint( Graphics g ) {
for ( Iterator iter = elements.iterator(); iter.hasNext(); ) ((Primitiv)iter.next()).paint( g );
} }
PrimitivZeichner.java
9RQDXHQOlVVWVLFKHLQ([HPSODUYRQPrimitivZeichnerHUVWHOOHQXQGQXW]HQ
PrimitivZeichner z = new PrimitivZeichner();
z.line( 12, 34, 23, 344 );
z.line( 18, 454, 423, 4 );
'LHline()$XIUXIH]HLFKQHQ]ZDUQRFKQLFKWEHUHLWHQGDV=HLFKQHQDOOHUGLQJVYRUGDGLH2SHUDWLRQHQLQGLH /LVWH ]X ]HLFKQHQGHU 2EMHNWH HLQJHUHLKW ZHUGHQ 'HUpaint())XQNWLRQ HLQHU .RPSRQHQWH PXVV QXQ GLH 5HIHUHQ] DXI GHQPrimitivZeichner ]XJlQJOLFK JHPDFKW ZHUGHQ XQG GDQQ NDQQ VLH paint() YRP PrimitivZeichnerDXIUXIHQ'DVPrimitivZeichner2EMHNWQXW]WGDQQHLQHQJHJHEHQHQ*UDSKLFV.RQWH[W (LQHQ6FKULWWZHLWHUJHGDFKWLVWPrimitivZeichnerVHOEVWHLQH.RPSRQHQWHZLHHWZDWindow'DQQPXVV DQpaint()QLFKWVPHKUJHlQGHUWZHUGHQGHQQVLHZLUGMHW]WYRP)HQVWHUEHKDQGOHUDQJHUXIHQ
Notizen
Schulversion
2.2 Einfache Zeichenfunktionen
'LHJUDILVFKHQ2EMHNWHZHUGHQLQHLQHP.RRUGLQDWHQV\VWHPSODW]LHUWZHOFKHVVHLQH8UVSUXQJVNRRUGLQDWHQ DOVRVWDQGDUGPlLJOLQNVREHQGHILQLHUW'LH$QJDEHLVWDEVROXW]XP)HQVWHUUDKPHQ:lKOHQZLUGLH .RRUGLQDWHDXIGHU\$FKVHNOHLQVRNDQQHVYRUNRPPHQGDVVZLUQLFKWVPHKUVHKHQGHQQGDV2EMHNWZDQ GHUWLQGLH%LOGVFKLUPOHLVWH0LWGHU'$3,NDQQGLHVHU8UVSUXQJYHUVFKREHQZHUGHQ
*HOHJHQWOLFK YHUPLVFKW VLFK GLH 8PJDQJVVSUDFKH PLW GHU 6SUDFKH GHU 0DWKHPDWLN XQG &RPSXWHUJUDILN VR GDVVZLUQRFKHLQPDOGLHZLFKWLJVWHQ%HJULIIHDXI]lKOHQ
Punkte
(LQ3XQNWLVWLQ$EKlQJLJNHLWGHU'LPHQVLRQHQGXUFK]ZHLRGHUPHKUHUH.RRUGLQDWHQJHNHQQ]HLFKQHW'DHU VRNHQQHQZLULKQDXVGHU0DWKHPDWLNNHLQH$XVGHKQXQJKDWGUIHQZLULKQHLJHQWOLFKJDUQLFKWVHKHQ,Q -DYDJLEWHVNHLQH)XQNWLRQPLWGHU3XQNWHJH]HLFKQHWZHUGHQN|QQHQ'LHVHN|QQHQQXUGXUFKHLQHQ/LQLHQ EHIHKOHU]HXJWZHUGHQ
Pixel
'DV:RUW3L[HOLVWHLQH$ENU]XQJIU3LFWXUH(OHPHQW(LQ3L[HOEHVFKUHLEWHLQHQSK\VLNDOLVFKHQ3XQNWDXI GHP%LOGVFKLUPXQGLVWGDKHUQLFKW]XYHUZHFKVHOQPLWHLQHP3XQNWREZRKOXPJDQJVVSUDFKOLFKNHLQHIHVWH 7UHQQXQJ H[LVWLHUW 3L[HO EHVLW]HQ ZLH 3XQNWH .RRUGLQDWHQ :LUG HLQ JUDILVFKHV 2EMHNW JH]HLFKQHW VR ZHUGHQ GLH HQWVSUHFKHQGHQ 3XQNWH DXI GHP %LOGVFKLUP JHVHW]W 'LH $Q]DKO GHU 3L[HO DXI GHP 0RQLWRU LVW EHVFKUlQNWXQWHUHLQHU$XIO|VXQJYRQ3XQNWHQVLQGGLHVDOVR3L[HOGLH HLQ]HOQ]X VHW]HQVLQG(LQHQ3L[HO]XVHW]HQKHLWDEHUQLFKWVDQGHUHVDOVLKPHLQHDQGHUH)DUEH]XJHEHQ
Linien
$XFKEHL/LQLHQ PVVHQZLUXQVYRQGHU9RUVWHOOXQJWUHQQHQGLHXQVGLHDQDO\WLVFKH*HRPHWULHYHUPLWWHOW 'HQQGRUWLVWHLQH/LQLHDOVNU]HVWH9HUELQGXQJ]ZLVFKHQ]ZHL3XQNWHQGHILQLHUWVRVDJWHV(XNOLG'DVLH HLQGLPHQVLRQDOVLQGEHVLW]HQVLHHLQH/lQJHDXVXQHQGOLFKYLHOHQ3XQNWHQDEHUNHLQH%UHLWH$XIGHP%LOG VFKLUPEHVWHKWHLQH/LQLHQXUDXVHQGOLFKYLHOHQ3XQNWHQXQGZHQQHLQH/LQLHJH]HLFKQHWZLUGGDQQZHUGHQ 3L[HOJHVHW]WGLHQDKHDQGHUZLUNOLFKHQ/LQLHVLQG'LH3XQNWHPVVHQSDVVHQGLQHLQ5DVWHUJHVHW]WZHUGHQ XQG VR SDVVLHUW HV GDVV GLH /LQLH LQ 6WFNH ]HUEURFKHQ ZLUG 'LHVHV 3UREOHP JLEW HV EHL DOOHQ JUDILVFKHQ 2SHUDWLRQHQGDYRQ)OLHNRPPDZHUWHQHLQH$EELOGXQJDXI*DQ]]DKOHQLQXQVHUHP)DOODEVROXWH.RRUGLQD WHQ GHV %LOGVFKLUPV JHPDFKW ZHUGHQ PXVV (LQH EHVVHUH 'DUVWHOOXQJ GHU /LQLHQ XQG .XUYHQ LVW GXUFK
$QWLDOLDVLQJ]XHUUHLFKHQ'LHVLVWHLQH$UW:HLFK]HLFKQXQJPLWQLFKWQXUHLQHU)DUEHVRQGHUQPLW$EVWXIXQ JHQVRGDVVGLH4XDOLWlWDXIGHP%LOGVFKLUPZHVHQWOLFKEHVVHULVW$XFKEHL=HLFKHQVlW]HQLVWGDGXUFKHLQH JXWH9HUEHVVHUXQJGHU/HVEDUNHLWDXIGHP%LOGVFKLUP]XHU]LHOHQ'LH)lKLJNHLW]XP:HLFK]HLFKQHQJLEWHVLQ GHU-)&'$3,VHLW-DYD
abstract class java.awt.Graphics
; abstract void drawLine( int x1, int y1, int x2, int y2 )
=HLFKQHWHLQH/LQLH]ZLVFKHQGHQ.RRUGLQDWHQ[\XQG[\LQGHU9RUGHUJUXQGIDUEH
Beispiel: Setze einen Punkt an die Stelle (x,y) g.drawLine( x, y, x, y );
Rechtecke
,P)ROJHQGHQZROOHQZLUQXUGLHpaint()0HWKRGHPLWHWZDV/HEHQIOOHQ=XQlFKVWZHUIHQZLUHLQHQ%OLFN DXIGLH)XQNWLRQHQGLHXQV5HFKWHFNH]HLFKQHQODVVHQ'LH5FNJDEHZHUWHVLQGLPPHUvoid(VLVWQLFKWVR GDVVGLH)XQNWLRQHQGXUFKHLQHQ:DKUKHLWVZHUWPLWWHLOHQREHLQWDWVlFKOLFKHU=HLFKHQEHUHLFKJHIOOWZHUGHQ NRQQWH/LHJHQGLH.RRUGLQDWHQGHV]X]HLFKQHQGHQ2EMHNWVQLFKWLP6LFKWIHQVWHUVRJHVFKLHKWHLQIDFKJDU QLFKWV'LH=HLFKHQIXQNWLRQLVWQLFKWLQGHU/DJHGLHVLQLUJHQGHLQHU)RUPGHP$XIUXIHUPLW]XWHLOHQ
abstract class java.awt.Graphics
; void drawRect( int x, int y, int width, int height )
=HLFKQHWHLQ5HFKWHFNLQGHU9RUGHUJUXQGIDUEH'DV5HFKWHFNLVWwidth3L[HOEUHLWXQGheight 3L[HOKRFK
; void abstract fillRect( int x, int y, int width, int height )
=HLFKQHWHLQJHIOOWHV5HFKWHFNLQGHU9RUGHUJUXQGIDUEH'DV5HFKWHFNLVWwidth3L[HOEUHLWXQG height3L[HOKRFK
; void abstract drawRoundRect( int x, y, int width, height, int arcWidth, arcHeight )
=HLFKQHWHLQDEJHUXQGHWHV5HFKWHFNLQGHU9RUGHUJUXQGIDUEH'DV5HFKWHFNLVWwidth3L[HOEUHLW XQGheight 3L[HO KRFKarcWidth JLEW GHQ KRUL]RQWDOHQ XQGarcHeight GHQ YHUWLNDOHQ 'XUFK PHVVHUGHU.UHLVE|JHQGHU5lQGHUDQ
; void abstract fillRoundRect( int x, y, int width, height, int arcWidth, arcHeight ) :LHdrawRoundRect()QXUJHIOOW
; void draw3DRect( int x, int y, int width, int height, boolean raised )
=HLFKQHW HLQ GUHLGLPHQVLRQDO DQJHGHXWHWHV 5HFKWHFN LQ GHU 9RUGHUJUXQGIDUEH 'HU 3DUDPHWHUraised JLEWDQREGDV5HFKWHFNHUK|KWRGHUYHUWLHIWZLUNHQVROO'LH)DUEHQIUGHQ(IIHNWZHUGHQDXVGHQ 9RUGHUJUXQGIDUEHQJHZRQQHQ
; void fill3DRect( int x, int y, int width, int height, boolean raised ) :LHdraw3Drect()QXUJHIOOW
+LQZHLV 'LH %UHLWHQ GHU 5HFKWHFNH EHL GHQ 0HWKRGHQdrawRect() XQGfillRect()XQWHUVFKHLGHQ VLFK drawRect(0, 0, 10, 10)]HLFKQHWHLQ[EUHLWHV5HFKWHFNXQGfillRect(0, 0, 10, 10)]HLFKQHW HLQ[EUHLWHV5HFKWHFN
Ovale und Kreisbögen
'LHGraphics.ODVVHVWHOOWYLHU0HWKRGHQ]XP=HLFKQHQYRQ2YDOHQXQG.UHLVE|JHQEHUHLW*HIOOWHXQGQLFKW JHIOOWH(OOLSVHQVLQGLPPHULQHLQ5HFKWHFNHLQJHSDVVW
abstract class java.awt.Graphics
; abstract drawOval( int x, int y, intwidth, int height )
=HLFKQHWHLQ2YDOLQGHU9RUGHUJUXQGIDUEHZHOFKHVGLH$XVPDHHLQHV5HFKWHFNVKDW'DV2YDOKDW HLQH*U|HYRQwidth3L[HOLQGHU%UHLWHXQGheight3L[HOLQGHU+|KH
; abstract fillOval( int x, int y, int width, int height ) :LHdrawOval()QXUJHIOOW
; abstract void drawArc( int x, int y, int width, int height, int startAngle, int arcAngle )
=HLFKQHW HLQHQ .UHLVERJHQ 1XOO *UDG OLHJW LQ GHU 8KU3RVLWLRQ %HL HLQHP $XIUXI PLW GHQ :LQNHO DUJXPHQWHQZLUGHLQ.UHLVERJHQJH]HLFKQHWEHLGHP*UDGLPXQWHUHQUHFKWHQ%HUHLFKQLFKW JH]HLFKQHWVLQG
; abstract void fillArc( int x, int y, int width, int height, int startAngle, int arcAngle )
:LHdrawArc()QXUJHIOOW
Eine Kreis- und Ellipsen-Klasse
%HLGHU0HWKRGHdrawOval()PVVHQZLULPPHUGDUDQGHQNHQGDVVGLH(OOLSVHRGHULP6SH]LDOIDOOGHU.UHLV LQHLQ5HFKWHFNPLW6WDUWNRRUGLQDWHQXQGPLW%UHLWHXQG+|KHJH]HLFKQHWZLUG'LHVLVWQLFKWLPPHUGLHQDWU OLFKH 9RUVWHOOXQJ YRQ HLQHU (OOLSVH EH]LHKXQJVZHLVH HLQHV .UHLVHV (LQHQ .UHLV EH]LHKXQJVZHLVH HLQH (OOLSVH XPGHQ0LWWHOSXQNWxyPLWGHQ5DGLHQrxXQGry]HLFKQHW
g.drawOval( x – rx, y – ry, rx + rx, ry + ry );
Schulversion
Polygone und Polylines
(LQH 3RO\OLQH EHVWHKW DXV HLQHU 0HQJH YRQ /LQLHQ GLH HLQHQ /LQLHQ]XJ EHVFKUHLEHQ 'LHVHU /LQLHQ]XJ PXVV QLFKWJHVFKORVVHQVHLQ,VWHUHVDOOHUGLQJVVRVSUHFKHQZLUYRQHLQHP3RO\JRQ,Q-DYDJLEWHVYHUVFKLHGHQH 0|JOLFKNHLWHQ3RO\JRQHXQG3RO\OLQHV]X]HLFKQHQ=XQlFKVW]XP%HLVSLHOEHUHLQ.RRUGLQDWHQIHOG
abstract class java.awt.Graphics
; abstract void drawPolyline( int xPoints[], int yPoints[], int nPoints )
=HLFKQHWHLQHQ/LQLHQ]XJGXUFKGLHJHJHEHQHQ.RRUGLQDWHQLQGHU9RUGHUJUXQGIDUEH'LH)LJXULVWQLFKW DXWRPDWLVFKJHVFKORVVHQZHQQQLFKWGLH6WDUWXQG(QGNRRUGLQDWHQJOHLFKVLQG0LWnPointNRQWURO OLHUHQZLUGLH$Q]DKOGHUJH]HLFKQHWHQ/LQLHQ
; abstract void drawPolygon( int xPoints[], int yPoints[], int nPoints )
=HLFKQHW ZLHdrawPolyline() HLQHQ /LQLHQ]XJ VFKOLHW GLHVHQ DEHU LPPHU JOHLFK LQGHP GLH HUVWH .RRUGLQDWHPLWGHU.RRUGLQDWHnPointsYHUEXQGHQZLUG
; abstract void fillPolygon( int xPoints[], int yPoints[], int nPoints )
)OOWGDV3RO\JRQDXV'DHLQH3RO\OLQHRIIHQLVWNDQQVLHQLFKWJHIOOWZHUGHQ6RPLWJLEWHVGLH)XQN WLRQfillPolyline()QLFKW
Die Polygon-Klasse
1HEHQGHU0|JOLFKNHLWGLH/LQLHQ]JHGXUFK.RRUGLQDWHQIHOGHU]XEHVFKUHLEHQJLEWHVLQ-DYDGLH3RO\JRQ .ODVVHPolygon6LHLVWHLQH(UZHLWHUXQJGHV,QWHUIDFHVShape6LHLVWDEHUPLQLPDOOHGLJOLFKGLH0HWKRGH getBounds() ZLUG LPSOHPHQWLHUW (LQ 3RO\JRQ2EMHNW YHUZDOWHW VHLQH .RRUGLQDWHQ HLJHQVWlQGLJ XQG YRQ DXHQN|QQHQZLU(OHPHQWHKLQ]XQHKPHQ0LWGHUPlFKWLJHQ0HWKRGHcontains()N|QQHQZLUKHUDXVILQGHQ REHLQ3XQNWLQGHUYRQGHP3RO\JRQDXVJH]HLFKQHWHQ)OlFKHOLHJW'RFK]XQlFKVWPVVHQZLUHLQ3RO\JRQ 2EMHNWHU]HXJHQ'D]XGLHQHQ]ZHL.RQVWUXNWRUHQ
class java.awt.Polygon
implements Shape, Serializable ; Polygon()
(U]HXJWHLQPolygon2EMHNWRKQH.RRUGLQDWHQ
; Polygon( int xpoints[], int ypoints[], int npoints ) (U]HXJWHLQ3RO\JRQPLWGHQDQJHJHEHQHQ.RRUGLQDWHQ
1XQN|QQHQZLU3XQNWHKLQ]XIJHQXQG$QIUDJHQDQGDV Polygon2EMHNWVWHOOHQ ; Rectangle getBounds()
*LEW GLH %RXQGLQJ%R[ GHU )LJXU ]XUFN 'LHVH EHVFKUHLEW HLQ 5HFKWHFN GDV GDV 2EMHNW JHUDGH XPVFKOLHW(LQRectangle2EMHNWEHVLW]WGLH9DULDEOHQheight+|KHGHV5HFKWHFNVwidth%UHLWH GHV 5HFKWHFNVx [.RRUGLQDWH XQGy \.RRUGLQDWH GHV 5HFKWHFNV 0LW YHUVFKLHGHQHQ )XQNWLRQHQ ODVVHQVLFK5HFKWHFNH]XVDPPHQIDVVHQXQGVFKQHLGHQ
; void addPoint( int x, int y )
'LH.RRUGLQDWH[\ZLUGKLQ]XJHIJW'LH*UHQ]HQHQJOERXQGLQJVZHUGHQDXWRPDWLVFKDNWXDOLVLHUW
; boolean contains( int x, int y )
/LHIHUWtrue ZHQQ GHU 3XQNW [\ LP 3RO\JRQ OLHJW (V ZLUG HLQ *HUDGH8QJHUDGH$OJRULWKPXV YHU ZHQGHWXPGLHVKHUDXV]XILQGHQ
; boolean contains( Point p )
/LHIHUWtrueZHQQGHU3XQNWpLP3RO\JRQOLHJW(LQPoint2EMHNWEHVLW]WGLH$WWULEXWHxXQGyIUGLH .RRUGLQDWHQ
'DVHU]HXJWH3RO\JRQN|QQHQZLUPLWVSH]LHOOHQ0HWKRGHQQDWUOLFKDXVGraphics]HLFKQHQ
abstract class java.awt.Graphics ; void drawPolygon( Polygon p )
=HLFKQHWGDV3RO\JRQLQGHU9RUGHUJUXQGIDUEH
; void fillPolygon( Polygon p )
=HLFKQHWHLQJHIOOWHV3RO\JRQ
+LQZHLV'LH contains())XQNWLRQEHLP3RO\JRQDUEHLWHWNRUUHNWIU3XQNWHLQQHUKDOEGHUHLQJHVFKORVVHQHQ )OlFKH%HL$EIUDJHYRQ 3XQNWHQGLHGHQ(FNSXQNWHQ HQWVSUHFKHQ NRPPHQLPPHUVHKUZLOONUOLFKH:HUWH KHUDXVJHQDXVREHLGHU$QIUDJHREGLH3XQNWHDXIGHU/LQLH]XP,QQHQUDXPJHK|UHQRGHUQLFKW
Notizen
Schulversion
N-Ecke zeichnen
%LVKHUJLEWHVLPGraphics3DNHWNHLQH)XQNWLRQXPUHJHOPlLJHQ(FNH]X]HLFK QHQ6RHLQH)XQNWLRQLVWDEHUOHLFKWXQGVFKQHOOSURJUDPPLHUW:LUWHLOHQGD]XHLQ IDFKHLQHQ.UHLVLQQ7HLOHDXIXQGEHUHFKQHQGLH[XQG\.RRUGLQDWHGHU3XQNWH DXI GHP .UHLV 'LHVH 3XQNWH IJHQ ZLU HLQHP Polygon2EMHNW PLWWHOV GHU addPoint()0HWKRGH KLQ]X (LQH HLJHQH )XQNWLRQdrawNeck() EHUQLPPW GLHVH 3RO\JRQ(UVWHOOXQJ 'HU OHW]WH 3DUDPHWHU GHU )XQNWLRQ LVW HLQ :DKUKHLWVZHUW GHU EHVWLPPWREGDVQ(FNJHIOOWZHUGHQVROORGHUQLFKW1XQNDQQPLW]ZHL|IIHQW OLFKHQ )XQNWLRQHQ HLQ QLFKW JHIOOWHV EH]LHKXQJVZHLVH JHIOOWHV Q(FN JH]HLFKQHW ZHUGHQ
import java.awt.*;
import javax.swing.*;
public class NEckDemo extends JPanel {
protected void paintComponent( Graphics g ) {
PolygonWithEgdes.drawNeck( g, getWidth()/2, getHeight()/2, 50, 6, true );
PolygonWithEgdes.drawNeck( g, getWidth()/2, getHeight()/2, 60, 6, false );
}
public static void main( String args[] ) {
JFrame f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.add( new NEckDemo() );
f.setSize( 200, 200 );
f.setVisible( true );
} }
class PolygonWithEgdes {
private static Polygon p = new Polygon();
public static void drawNeck( Graphics g,
int x, int y, int r, int n, boolean filled ) {
p.reset();
for ( int i = 0; i < n; i++ )
p.addPoint( (int) ( x + r*Math.cos( i*2*Math.PI/n ) ), (int) ( y + r*Math.sin( i*2*Math.PI/n ) ) );
if ( filled )
g.fillPolygon( p );
else
g.drawPolygon( p );
} }
NEckDemo.java
2.3 Zeichenketten schreiben
'LH 0HWKRGH PLW GHU =HLFKHQ LQ YHUVFKLHGHQHQ =HLFKHQVlW]HQ HQJOIRQWV DXI GLH =HLFKHQIOlFKH JHEUDFKW ZHUGHQ KHLWdrawString() 'LHVH )XQNWLRQ EHVLW]W GUHL 3DUDPHWHU GLH ]X VFKUHLEHQGH =HLFKHQNHWWH [ .RRUGLQDWHXQG\.RRUGLQDWHdrawString()]HLFKQHWLPDNWXHOOHLQJHVWHOOWHQ=HLFKHQVDW]XQGGLH*UXQGOLQLH HQJOEDVHOLQHEHILQGHWVLFKDXIGHUEHUJHEHQGHQ\3RVLWLRQ
abstract class java.awt.Graphics
; abstract void drawString( String s, int x, int y )
6FKUHLEWHLQHQ6WULQJLQGHUDNWXHOOHQ)DUEHXQGGHPDNWXHOOHQ=HLFKHQVDW]'LH[XQG\:HUWHEHVWLP PHQGLH6WDUWSXQNWHGHU*UXQGOLQLH
; abstract void drawString( AttributedCharacterIterator iterator, int x, int y ) 6FKUHLEWHLQHQ6WULQJGHUGXUFKGHQ$WWULEXW,WHUDWRUJHJHEHQLVW
; abstract void drawChars( char data[], int offset, int length, int x, int y ) 6FKUHLEWGLH=HLFKHQNHWWHXQGEH]LHKWGLH'DWHQDXVHLQHP&KDU)HOG
; abstract void drawBytes( byte data[], int offset, int length, int x, int y ) 6FKUHLEWGLH=HLFKHQNHWWHXQGEH]LHKWGLH'DWHQDXVHLQHP%\WHIHOG
Einen neuen Zeichensatz bestimmen
'LH)XQNWLRQdrawString()YHUZHQGHWLPPHUGHQDNWXHOOHQ=HLFKHQVDW]8PGLHVHQ]XlQGHUQEHQXW]HQZLU GLH)XQNWLRQsetFont()'HUhEHUJDEHSDUDPHWHULVWHLQFont2EMHNWZHOFKHVZLUHUVWHU]HXJHQPVVHQ'HU .RQVWUXNWRUYRQFontLVWGXUFKYHUVFKLHGHQH3DUDPHWHUGHILQLHUW
class java.awt.Font implements Serializable
; Font( String name, int style, int size ) (U]HXJWHLQFont2EMHNW
Parameter des Font-Konstruktors
1DPH 'LH 1DPHQ GHV =HLFKHQVDW]HV N|QQHQ YRQ 6\VWHP ]X 6\VWHP XQWHUVFKLHGOLFK VHLQ 8QWHU :LQ17 0DF2V /LQX[ 6RODULV XQG ,5,; VLQG MHGHQIDOOV GLH =HLFKHQVlW]HMonospaced IUKHU CourierDialogSansSerif IUKHUHelvetica XQGSerif IUKHUTimesRoman HUODXEW XQWHU 0DF26 NRPPW QRFK GHU =HLFKHQVDW]Geneva KLQ]X 9RU -DYD JDE HV QRFK GHQ
=HLFKHQVDW]SymbolEH]LHKXQJVZHLVHZapfDingbatsGHUDEHUGXUFKGLH8QLFRGH=HLFKHQDE JHGHFNWZLUG
6WLO 'DVFont2EMHNW GHILQLHUW GUHL .RQVWDQWHQ XP GLH 6FKULIWDUW IHWW XQG NXUVLY GDU]XVWHOOHQ 'LH V\PEROLVFKHQ :HUWH VLQGFont.ITALICFont.BOLD XQG IU HLQHQ QLFKW DXVJH]HLFKQHWHQ 6FKULIWVDW]Font.PLAIN'LH$WWULEXWHN|QQHQPLWGHPELQlUHQ2GHURGHUGHPDULWKPHWLVFKHP 3OXV YHUEXQGHQ ZHUGHQ HLQ IHWWHU XQG NXUVLYHU =HLFKHQVDW] LVW VR GXUFK Font.BOLD|Font.ITALICEH]LHKXQJVZHLVHGXUFKFont.BOLD+Font.ITALIC]XHUUHLFKHQ
*U|H (LQH $QJDEH LQ 3XQNWHQ ZLH JUR GLH 6FKULIW VHLQ VROO (LQ 3XQNW HQWVSULFKW HWZD =ROO HWZDPP
Beispiel: Ein Font-Objekt erzeugen
Font f = new Font( "Serif", Font.PLAIN, 14 );
+lXILJZLUGGLHVHV=HLFKHQVDW]2EMHNWVRIRUWLQsetFont()JHQXW]WVRZLH
setFont( new Font( "Serif", Font.BOLD, 20 ) );
Schulversion
,VW LP 3URJUDPP OHGLJOLFK GHU DNWXHOO YHUZHQGHWH =HLFKHQVDW] Q|WLJ N|QQHQ ZLUgetFont() YRQ GHU Graphics.ODVVHYHUZHQGHQ
abstract class java.awt.Graphics ; abstract Font getFont()
/LHIHUWGHQDNWXHOOHQ=HLFKHQVDW]
; abstract Font setFont( Font f )
6HW]WGHQ=HLFKHQVDW]IUGDVGraphics2EMHNW
Ableiten eines neuen Fonts aus einem gegebenen Font
6WHKWHLQFont]XU9HUIJXQJ6ROODXVJHKHQGYRQGLHVHPHLQQHXHVFont2EMHNWPLWHLQHUNOHLQHQbQGHUXQJ HWZDLQGHU*U|HRGHULP$WWULEXWIHWWNXUVLYKHUJHVWHOOWZHUGHQVRODVVHQVLFKGLHderiveFont())XQN WLRQHQHLQVHW]HQ
Beispiel
$XVJHKHQGYRQHLQHPH[LVWLHUHQGHQFont2EMHNWfVROOHLQQHXHU)RQWDEJHOHLWHWZHUGHQGHUMHGRFK3L[HO JURLVW
Font font = f.deriveFont( 20f );
'HU3DUDPHWHULVWYRP7\SfloatXQGQLFKWYRP7\Sdouble.'HU*UXQGLVWGDVVGDV/LWHUDOVRQVWIU HLQH *DQ]]DKO VWHKW XQG DXI double DXWRPDWLVFK DQJHSDVVW ZHUGHQ N|QQWH XQG HV DXFK HLQ deriveFont(int)JLEWGDVOLHIHUWHLQHQQHXHQ)RQWLQQRUPDOIHWWRGHUNXUVLY%HLHLQHPfloatPXVVHLQ IDQGDV/LWHUDOJHVFKULHEHQZHUGHQVRGDVVHLQHU9HUZHFKVHOXQJYRUJHEHXJWZLUG
class java.awt.Font implements Serializable
; Font deriveFont( AffineTransformation trans )
(U]HXJWHLQQHXHV)RQW2EMHNWZHOFKHVEHUHLQ7UDQVIRUPDWLRQVREMHNWPRGLIL]LHUWLVW/LHIHUWHLQQHXHV
=HLFKHQVDW]REMHNWLQGHU*U|HYRQHLQHP3XQNWXQGNHLQHPEHVRQGHUHQ6WLO
; Font deriveFont( float size )
:LHGHU2ULJLQDO]HLFKHQVDW]QXUPLWHLQHUQHXHQ*U|H
; Font deriveFont( int style )
:LHGHU2ULJLQDO]HLFKHQVDW]QXUPLWHLQHPQHXHQ6WLO
; Font deriveFont( int style, float size )
:LHGHU2ULJLQDO]HLFKHQVDW]QXUPLWHLQHUQHXHQ*U|HXQGHLQHPQHXHQ6WLO
Notizen
Schulversion
Zeichensätze des Systems ermitteln
'LH8PVHW]XQJGHU1DPHQDXIGHQYHUVFKLHGHQHQ5HFKQHUSODWWIRUPHQEHUQLPPW-DYDVRKHLW+HOYHWLFD XQWHU:LQGRZV$ULDODEHUPLWGHQVHOEHQ/DXIZHLWHQ'HU*UXQGLVWGDVVGHU1DPH+HOYHWLFDYRQ$GREH JHVFKW]WLVW'LH+HUVWHOOHUVLQGDOVREHLLKUHU1DPHQVZDKOQLFKWIUHL'RFKDXFKXQWHU;KHLW+HOYHWLFD QLFKW+HOYHWLFD'DGLHYHUVFKLHGHQHQ=HLFKHQVDW]KHUVWHOOHUGHQ1DPHQ+HOYHWLFDDEHUNDXIHQN|QQHQLVW GHU2ULJLQDO]HLFKHQVDW]XQWHU;$GREH+HOYHWLFD'LH)LUPD$GREHZDUVRJQlGLJXQGKDWGLH=HLFKHQVlW]H DOV7\SH6FKULIWDUWHQEHLJHOHJW7\SH6FKULIWDUWHQVLQGXQWHU;UHODWLYQHXGHQQHUVWDOVYRQ,%0GHU 6HUYHU=XVDW]SURJUDPPLHUWZXUGHNRQQWHQ7\SH6FKULIWHQEHQXW]WZHUGHQ9RUKHUZXUGHQGLH$QZHQGHU LPPHUPLWNOHLQHQ.O|W]HQDEJHIHUWLJWZHQQGLH6FKULIWJU|HHLQPDO]XKRFKJHZlKOWZXUGH/HLGHULVWGLHV EHLHLQLJHQ=HLFKHQVlW]HQLPPHUQRFKGHU)DOO6HOEVW6WDU2IILFHXQWHU;KDWGDPLW]XNlPSIHQXQGZLU DXFKIDOOVZLUHLQHQ=HLFKHQVDW]YHUODQJHQGHUQXUDOV%LWPDSLQGHQ6WDQGDUGJU|HQJHUDVWHUWLVW
8P KHUDXV]XILQGHQ ZHOFKH =HLFKHQVlW]H DXI HLQHP 6\VWHP LQVWDOOLHUW VLQG OLHIHUW getAvailableFontFamilyNames()DXI HLQHPGraphicsEnvironment HLQ )HOG PLWFont2EMHNWH IUKHU ZXUGHQ GLH =HLFKHQVlW]H PLWgetFontList()0HWKRGH GHU .ODVVHToolkit HUIUDJW DEHU GLH 0HWKRGH LVW YHUDOWHW (LQ 2EMHNW YRP 7\S GraphicsEnvironment EHVFKUHLEW GLH =HLFKHQVlW]H GHV 6\VWHPV XQG GraphicsDevice2EMHNWH (LQGraphicsDevice LVW HLQH 0DOIOlFKH DOVR GDV ZRUDXI GDV 6\VWHP ]HLFKQHQ NDQQ'DVNDQQGHU%LOGVFKLUPVHLQDEHUDXFKHLQ'UXFNHURGHUHLQH+LQWHUJUXQGJUDILN'LHVWDWLVFKH)DEULN )XQNWLRQgetLocalGraphicsEnvironment()OLHIHUWHLQVROFKHVGraphicsEnvironment2EMHNW
abstract class java.awt.GraphicsEnvironment
; static GraphicsEnvironment getLocalGraphicsEnvironment() /LHIHUWGDVDNWXHOOHGraphicsEnvironment2EMHNW
; abstract Font[] getAllFonts()
/LHIHUW HLQ )HOG PLW DOOHQ YHUIJEDUHQFont2EMHNWHQ LP DNWXHOOHQGraphicsEnvironment LQ HLQHU
*U|HYRQHLQHP3XQNW
; abstract String[] getAvailableFontFamilyNames()
/LHIHUWHLQ)HOGPLWDOOHQYHUIJEDUHQ=HLFKHQVDW]IDPLOLHQLPDNWXHOOHQGraphicsEnvironment
; abstract String[] getAvailableFontFamilyNames( Locale l )
/LHIHUWHLQ)HOGPLWDOOHQYHUIJEDUHQ=HLFKHQVDW]IDPLOLHQLPDNWXHOOHQGraphicsEnvironmentGLH]X HLQHU6SUDFKHlJHK|UHQ
1DFKIROJHQGHV&RGHVHJPHQW]HLJWGLH,PSOHPHQWLHUXQJHLQHU6FKOHLIHGLHDOOH=HLFKHQVDW]QDPHQDXVJLEW:LU PVVHQNHLQ)HQVWHUJH|IIQHWKDEHQXPGLH=HLFKHQVlW]HDE]XUXIHQ
import java.awt.*;
class ListFont {
public static void main( String args[] ) {
for ( String fonts : GraphicsEnvironment.getLocalGraphicsEnvironment().
getAvailableFontFamilyNames() ) System.out.println( fonts );
} }
ListFont.java
1DFKGHP$XIUXIGHV3URJUDPPVLVWGLH$XVJDEHEHLPLU Arial
Arial Black Arial Narrow
…
Wingdings Wingdings 2 Wingdings 3
Die Klasse FontMetrics
-HGHVFont2EMHNWEHLQKDOWHWOHGLJOLFK,QIRUPDWLRQEHU6FKULIWVDW]IDPLOLH6FKULIWVDW]QDPHQ*U|HXQG6WLO 6LHELHWHWNHLQHQ=XJULIIDXIGLH$EPHVVXQJHQGHV=HLFKHQVDW]HV8PGLHVH'DWHQDXI]XVSUHQHU]HXJHQZLU HLQFontMetrics2EMHNW(VYHUZDOWHWPHWULVFKH,QIRUPDWLRQHQGLHPLWHLQHU6FKULIWDUWYHUEXQGHQVLQG'D]X JHK|UHQ2EHUXQG8QWHUOlQJH6FKULIWK|KHXQG=HLOHQDEVWDQG
8P GDVFontMetric2EMHNW GHV DNWXHOOHQ *UDILNNRQWH[WV ]X QXW]HQ ILQGHW VLFK HLQH 0HWKRGHgetFont() 'LHVH0HWKRGHJHK|UW]XUGraphics.ODVVHXQGLVWQLFKWPLWGHUgetFont()0HWKRGHDXVFontMetrics]X YHUZHFKVHOQ6LHYHUKlOWVLFK]ZDUJOHLFKLVWDEHUHLQHUDQGHUHQ.ODVVH]XJHRUGQHW
,QGHUpaint()0HWKRGHNDQQDOVRPLWWHOV
FontMetrics fm = getFontMetrics();
DXIGLH0HWULNHQGHVDNWXHOOHQ=HLFKHQVDW]HV]XJHJULIIHQZHUGHQ
abstract class java.awt.Graphics ; FontMetrics getFontMetrics()
/LHIHUWGLH)RQW0HWULNHQ]XPDNWXHOOHQ=HLFKHQVDW]
; abstract FontMetrics getFontMetrics( Font f ) /LHIHUWGLH)RQW0HWULNHQIUGHQ=HLFKHQVDW]f
'LH .ODVVH FontMetrics ELHWHW GLH IROJHQGHQ 0HWKRGHQ DQ ZREHL VLFK DOOH $QJDEHQ DXI GDV MHZHLOLJH
=HLFKHQVDW]REMHNW EH]LHKHQ %H]LHKHQ VLFK GLH 5FNJDEHSDUDPHWHU DXI GLH =HLFKHQJU|H VR LVW GLH $QJDEH LPPHULQ3L[HO
abstract class java.awt.FontMetrics implements Serializable
; int bytesWidth( byte data[], int off, int len ) int charsWidth( char data[], int off, int len )
*LEWGLH%UHLWHDOOHU=HLFKHQGHV)HOGV]XUFN%HJLQQWEHLoffXQGOLHVWlen=HLFKHQ
; int charWidth( int ch ), int charWidth( char ch ) /LHIHUWGLH%UHLWH]XHLQHP=HLFKHQ
; int getAscent()
*LEWGHQ$EVWDQGYRQGHU*UXQGOLQLH]XUREHUHQ*UHQ]H2EHUOlQJH]XUFN
; int getDescent()
*LEWGHQ$EVWDQGYRQGHU*UXQGOLQLH]XUXQWHUHQ*UHQ]H8QWHUOlQJH]XUFN
; Font getFont()
/LHIHUWGHQDNWXHOOHQ=HLFKHQVDW]
; int getHeight()
*LEW GLH 6FKULIWK|KH HLQHU 7H[W]HLOH LQ 3L[HO ]XUFN 6LH EHUHFKQHW VLFK DXV =HLOHQ GXUFKVFKXVV2EHUOlQJH8QWHUOlQJH
; int getLeading()
*LEWGHQ=ZLVFKHQUDXP]ZHLHU=HLOHQ]XUFN
; int getMaxAdvance()
/LHIHUWGLH%UHLWHGHVEUHLWHVWHQ=HLFKHQV
; int getMaxAscent()
/LHIHUW GDV 0D[LPXP DOOHU 2EHUOlQJHQ LQ 3L[HO (LQLJH =HLFKHQ N|QQHQ VLFK REHUKDOE GHU2EHUOlQJHEHZHJHQ
; int getMaxDescent()
/LHIHUW GDV 0D[LPXP DOOHU 8QWHUOlQJHQ LQ
3L[HO
Schulversion
; int[] getWidths()
/LHIHUWLQHLQHPQHXHQ*DQ]]DKOIHOGGLH%UHLWHQGHU=HLFKHQ]XUFN
; int stringWidth( String str )
*LEWGLH%UHLWHGHU=HLFKHQNHWWH]XUFNZHQQGLHVHJH]HLFKQHWZUGH
Einen String unterstreichen
:LU ZROOHQ QXQstringWidth() EHQXW]HQ XP XQWHUVWULFKHQHQ 7H[W GDU]XVWHOOHQ 'DIU JLEW HV NHLQH 6WDQGDUGIXQNWLRQ $OVR VFKUHLEHQ ZLU XQV HLQIDFK HLQH 0HWKRGH GLH GLH .RRUGLQDWHQ VRZLH GHQ 6WULQJ
EHUJHEHQEHNRPPW'LH0HWKRGHdrawUnderlinedString()VFKUHLEWPLWdrawString()GLH=HLFKHQNHWWH drawLine()HUKlOWGLH%UHLWHGHU/LQLHGXUFKGLH%UHLWHGHU=HLFKHQNHWWH'LH/LQLHLVW]ZHL3XQNWHXQWHUGHU
%DVHOLQH 1DWUOLFK DFKWHW VR HLQH NOHLQH )XQNWLRQ QLFKW DXI GDV $XVVSDUHQ YRQ %XFKVWDEHQ GLH XQWHU GHU
%DVHOLQHOLHJHQ'LH%XFKVWDEHQ\RGHUTVLQGGDQQXQWHQJQDGHQORVGXUFKJHVWULFKHQ
void drawUnderlinedString( Graphics g, int x, int y, String s ) {
g.drawString( s,10,10 );
g.drawLine( x, y + 2,
x + getFontMetrics(getFont()).stringWidth(s) , y + 2 );
}
True Type Fonts
*UDILVFKH2EHUIOlFKHQVWHOOHQVHOEVWYHUVWlQGOLFKZLH'UXFNHU=HLFKHQVlW]HGDU'RFKGHU:HJYRQGHU'DWHL ELV ]XU 'DUVWHOOXQJ LVW ODQJ XQG IKUW XQZHLJHUOLFK EHU GLH )LUPD $GREH GLH HUVWPDOLJ GLH VWDQGDUGLVLHUWH
=HLFKHQGHILQLWLRQ3RVW6FULSW|IIHQWOLFKPDFKWH*HQDXHUJHVDJWGHILQLHUW3RVW6FULSWQRFKHWZDVPHKUGRFK GDVVROOXQVKLHUQLFKWLQWHUHVVLHUHQ'LHHUVWHNRPPHU]LHOOH=HLFKHQVDW]UHYROXWLRQEHJDQQGDQQDOVGHU 'UXFNHU /DVHU:ULWHU YRQ $SSOH GDV $GREH)RUPDW 3RVW6FULSW UDVWHUQ NRQQWH 'LH 'HILQLWLRQ HLQHV =HLFKHQ VDW]HV ODJ ELV GDKLQ QXU LQ %LWPDSV YRU GRFK GLH 3RVW6FULSW=HLFKHQVlW]H ZLH DXFK GLH 7UXH7\SH=HLFKHQ VlW]HXPGLHHVVSlWHUJHKHQVROOODJHQDOV3XQNWEHVFKUHLEXQJYRU'LH5DVWHUXQJEHUVHW]WHGLHVH3XQNWHLQ HLQH%LWPDSGLHGDQQHQWZHGHUDXIGHP%LOGVFKLUPRGHUGHP'UXFNHUDXVJHJHEHQZXUGH'XUFKGLH3XQNW EHVFKUHLEXQJZDUHQDOVRQLFKWPHKUJU|HQDEKlQJLJH%HVFKUHLEXQJHQYRUKDQGHQVRQGHUQGLH=HLFKHQDXFK
*O\SKVJHQDQQWZXUGHQGXUFK/LQLHQXQG.XUYHQLQNXELVFKHQ%p]LHU.XUYHQEHVFKULHEHQ
'LH9LVXDOLVLHUXQJGHU=HLFKHQVlW]HPDFKWH0LFURVRIWXQG$SSOH6RUJHQGD$GREHPHKUHUH'HILQWLRQHQGHU 3RVW6FULSW=HLFKHQVlW]HSIOHJWHGDUXQWHU7\SH36XQG7\SH367\SHQXW]WVRJHQDQQWH+LQWV +LQZHLVH XP DXFK EHL XQWHUVFKLHGOLFKHQ *U|HQ XQG JUDILVFKHQ 2EHUIOlFKHQ RSWLPDOH 'DUVWHOOXQJHQ ]X]XODVVHQ 'LHVH 'HILQLWLRQ ZDU MHGRFK JHKHLP =HLFKHQVlW]H GHV 7\SH VHKHQ ]ZDU DXI GHP 3DSLHU JXW DXV QLFKW DEHU DXI GHP %LOGVFKLUP PLW QLHGULJHU $XIO|VXQJ KLHU IHKOHQ GLH ,QIRUPDWLRQHQ DXV GHQ +LQWV 0LFURVRIWXQG$SSOHZROOWHQQXQLKUH=HLFKHQVDW]DXVJDEHQLFKW$GREHEHUODVVHQGLHQDWUOLFKHLQHQ7\SH 5DVWHUHU LP 3URJUDPP KDWWHQ VRQGHUQ VLH GHILQLHUWHQ LKUH HLJHQH )RQW7HFKQRORJLH GLH QLFKW PHKU DXI
%p]LHU.XUYHQVRQGHUQDXITXDGUDWLVFKHQ%6SOLQHVEDVLHUWH$SSOHPDFKWHGDEHLGHQ$QIDQJPLW5R\DOZHO FKHVVSlWHULQ7UXH7\SH77XPJHWDXIWZXUGH'LHVZDUVHFKV-DKUHQDFKGHQ3RVW6FULSW)RQWV'HUHLQ]LJH +HUVWHOOHU GHU GHQQRFK EHL 3RVW6FULSW7\SH =HLFKHQVlW]HQ JHEOLHEHQ LVW LVW ,%0 PLW GHP %HWULHEVV\VWHP 26 'DQHEHQ QXW]WH DXFK 1H;W6WHS GLHVH =HLFKHQVDW]GHILQLWLRQHQ GRFK GDV 6\VWHP KDOOWH QLFKW ODQJH QDFK
1DFKGHP $SSOH GHQ $QIDQJ PLW 77 JHPDFKW KDWWH XQG HV LQ 0DF26 LQWHJULHUWH EHUQDKP DXFK 0LFURVRIWGDVVLFKELVGDKLQDQHLQHPZHQLJODXIIlKLJHQ3RVW6FULSW&ORQH7UXH,PDJHYHUVXFKWHGLH7HFKQR ORJLHIU:LQGRZV$GREHHUNDQQWHIUKGLH.RQVHTXHQ]GLHVHU$OOLDQ]XQG|IIQHWHGLH6SH]LILNDWLRQIU 3RVW6FULSW7\SH=HLFKHQVlW]HLP0lU],QGHU0LWWHGHV-DKUHVOLHIHUWH$GREH]XVlW]OLFKGHQ$GREH 7\SH0DQDJHU$70DXVGHU7\SHDEHUNHLQH7\SH3RVW6FULSW=HLFKHQVlW]HIUGHQ%LOGVFKLUPXQGIU QLFKW3RVW6FULSWIlKLJH'UXFNHUGDUVWHOOWH+HXW]XWDJHH[LVWLHUHQEHLGH'HILQLWLRQHQLPPHUQRFKSDUDOOHOXQG IU 'UXFNHU LVW GLH )UDJH ZHOFKH QXQ EHVVHU LVW QLFKW ]X EHDQWZRUWHQ 0RGHUQH 'UXFNHU KDEHQ DXFK HLQ HLJHQHV 7UXH7\SH5DVWHU LP 520 HLQJHEDXW ,Q =XNXQIW ZLUG GLH 8QWHUVFKHLGXQJ ZRKO DXFK XQZLFKWLJHU ZHUGHQGD0LFURVRIWGLHRIIHQH2SHQ7\SH6SH]LILNDWLRQDXFK7UXH7\SH2SHQ9HUVLRQJHQDQQWQDFK YRUQH EULQJW 'HU =HLFKHQVDW] 36 RGHU 7UXH7\SH ZLUG GDEHL LQ HLQHU 2SHQ7\SH'DWHL JHNDSVHOW XQG GHP 5DVWHUHUEHUJHEHQXQGEHUHFKQHW'DEHLEHUQLPPWGLH365DVWHUXQJ$GREHGLHHLQH=XVDPPHQDUEHLWPLW 0LFURVRIW XQWHUVWW]W XQG GLH 775DVWHUXQJ 0LFURVRIW ,Q =XNXQIW P|FKWHQ 0LFURVRIW XQG $GREH =HLFKHQ VlW]HLP2SHQ7\SHXQWHUVWW]HQXQGGHUHQ9HUEUHLWXQJI|UGHUQ
TTF in Java nutzen
'LH YRUGHILQLHUWHQ 6WDQGDUG]HLFKHQVlW]H 'LDORJ 'LDORJ,QSXW 0RQRVSDFHG 6HULI 6DQV6HULI 6\PERO VLQG OHLGHU HWZDV ZHQLJ 'RFK GLHFont.ODVVH ELHWHW GLH VWDWLVFKH )XQNWLRQcreateFont() DQ GLH DXV HLQHP (LQJDEHVWURPHLQHV7UXH7\SH=HLFKHQVDW]HVGDVHQWVSUHFKHQGHFont2EMHNWHUVWHOOW
Font f = Font.createFont( Font.TRUETYPE_FONT, new FileInputStream("f.ttf") );
'HU HUVWH 3DUDPHWHU LVW GLH IHVW YRUJHVFKULHEHQH .RQVWDQWHFont.TRUETYPE_FONT DQGHUH 3DUDPHWHU VLQG QLFKWGHILQLHUWXQGIKUHQ]XHLQHUIllegalArgumentException("font format not recognized")'HU ]ZHLWH 3DUDPHWHU LVW HLQ (LQJDEHVWURP DXV GHU %LQlUGDWHL PLW GHQ =HLFKHQVDW]LQIRUPDWLRQHQ 'LH 'DWHQ ZHUGHQDXVJHOHVHQXQG]XHLQHPFont2EMHNWYHUDUEHLWHW'DGLH'DWHQLQWHUQEHUHLQHQJHSXIIHUWHQ'DWHQ VWURP LQ HLQH WHPSRUlUH 'DWHL JHVFKULHEHQ ZHUGHQ LVW HLQH HLJHQH 3XIIHUXQJ EHU HLQHQ BufferedInputStreamQXU]XVlW]OLFKHU2YHUKHDG
:DUHQ GLH %HVFKUHLEXQJVLQIRUPDWLRQHQ LQ GHU 'DWHL XQJOWLJ VR HU]HXJW GLH Font.ODVVH HLQH FontFormatException("Unable to create font - bad font data")'DWHLIHKOHUIDOOHQKLHUQLFKWGD UXQWHUXQGZHUGHQH[WUDEHUHLQHIOExceptionDQJH]HLJW'HU'DWHQVWURPZLUGDQVFKOLHHQGQLFKWZLHGHU JHVFKORVVHQ
$QGLHVHU6WHOOHYHUZXQGHUWHVYLHOOHLFKWGDVVYRQGHU$UEHLWVZHLVHKHUGLH0HWKRGHcreateFont()GHUGHV .RQVWUXNWRUV lKQOLFK VHLQ PVVWH DEHU GHU 3DUDPHWHUOLVWH GLH $WWULEXWH IHKOHQ 'DV OLHJW GDUDQ GDVV GLH 0HWKRGH DXWRPDWLVFK HLQHQ =HLFKHQVDW] GHU *U|H LP 6WLOFont.PLAIN HU]HXJW 8P HLQHQ JU|HUHQ =HL FKHQVDW] ]X HU]HXJHQ PVVHQ ZLU HLQ ]ZHLWHVFont2EMHNW DQOHJHQ ZDV DP HLQIDFKVWHQ PLW GHU 0HWKRGH deriveFont()JHVFKLHKW
class java.awt.Font implements Serializable
; static Font createFont( int fontFormat, InputStream fontStream ) throws FontFormatException, IOException
/LHIHUWHLQQHXHV=HLFKHQVDW]REMHNWLQGHU*U|HYRQHLQHP3XQNWXQGNHLQHPEHVRQGHUHQ6WLO
2.4 Clipping-Operationen
$OOHSULPLWLYHQ=HLFKHQRSHUDWLRQHQZLUNHQVLFKDXIGHQJHVDPWHQ%LOGVFKLUPDXVXQGVLQGQLFKWDXIEHVWLPPWH
%HUHLFKH HLQJHVFKUlQNW :HQQ ZLU /HW]WHUHV HUUHLFKHQ ZROOHQ VHW]HQ ZLU HLQHQ VR JHQDQQWHQ&OLSSLQJ
%HUHLFKDXHUKDOEGHVVHQQLFKWPHKUJH]HLFKQHWZLUG/HLGHUZDULQGHU9HUJDQJHQKHLWGLH,PSOHPHQWLHUXQJ GLHVHV&OLSSLQJVLPPHUIHKOHUDQIlOOLJVRGDVVHLQHIDOVFKH=HLFKQXQJGXUFKDXVYRUNRPPHQNRQQWH:HUGD DXI1XPPHUVLFKHUJHKHQZLOOVROOWHHLQ2IIVFUHHQ%LOGDQOHJHQ2SHUDWLRQHQDXIGLHVHP,PDJHPDFKHQXQG GDQQ GDV %LOG ]HLFKQHQ 'RFK EOHLEHQ ZLU EHLP KHUN|PPOLFKHQ &OLSSLQJ 'LHV LVW HLQH (LJHQVFKDIW GHV DNWXHOOHQGraphic2EMHNWV0LWGHU0HWKRGHclipRect(int x, int y, int width, int height)OlVVW VLFKGLHVHU%HUHLFKHLQVFKUlQNHQ'DQQHUIROJHQDOOH2SHUDWLRQHQLQGLHVHP%HUHLFK'DVIROJHQGH3URJUDPP HU]HXJW]ZHL&OLSSLQJ%HUHLFKHXQGIOOWHLQHQVHKUJURHQ%HUHLFKDXVGHUDEHUQLFKWVLFKWEDULVW
Notizen
Schulversion
import java.awt.*;
import javax.swing.*;
public class ClipDemo extends JPanel {
protected void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics gcopy = g.create();
// Clipping auf
g.clipRect( 100, 100, 100, 100 );
g.setColor( Color.ORANGE );
g.fillRect( 0, 0, 500, 500 );
g.setColor( Color.BLACK );
g.drawOval( 150, 100, 100, 100 );
// Zweiter Clipping-Bereich g.clipRect( 250, 250, 50, 50 );
g.setColor( Color.BLUE );
g.fillRect( 0, 0, 5000, 5000 );
// Die ursprüngliche Größe zurücksetzen gcopy.setColor( Color.YELLOW);
gcopy.fillRect( 50, 50, 20, 50 );
gcopy.dispose();
}
public static void main( String args[] ) {
JFrame f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize ( 400, 400 );
f.add( new ClipDemo() );
f.setVisible( true );
} }
ClipDemo.java
Den alten Zustand für Graphics wiederherstellen
)U GLH =HLFKHQRSHUDWLRQHQ LP &OLSSLQJ%HUHLFK JLEW HV QRFK HLQH DOWHUQDWLYH ,PSOHPHQWLHUXQJ 'LHVH YHU ]LFKWHWDXIGLH.RSLHGHV*UDILNNRQWH[WVPLWWHOVcreate()DP$QIDQJXQGVHW]WDP6FKOXVVYRUGLH6WHOOHYRQ gcopyHLQgetGraphics()PLWGHPVLFKGHUDOWH.RQWH[WZLHGHUKHUVWHOOHQOlVVW'DQQN|QQHQZLUZLHGHUPLW g.drawXXX() DUEHLWHQ XQGgcopy LVW EHUIOVVLJ 0LW GHP 2ULJLQDO N|QQHQ ZLU GDQQ GDV &OLSSLQJ ]XUFN VHW]HQXQGZLHGHURKQH=XVFKQLWWDUEHLWHQ:HQQZLUQDFKGHP&OLSSLQJGDV2ULJLQDOQLFKWPHKUEHQ|WLJHQ N|QQHQZLUVHOEVWYHUVWlQGOLFKDXIGLH.RSLHYHU]LFKWHQ
Alternative Formen
'XUFKsetClip()N|QQHQDOWHUQDWLY]XGHQUHFKWHFNLJHQ)RUPHQDXFKEHOLHELJHShape2EMHNWHGLH&OLSSLQJ )RUPYRUJHEHQ1DFKIROJHQGHpaintComponent()0HWKRGHEHQXW]WDOV%HVFKQLWWHLQ'UHLHFN
protected void paintComponent( Graphics g ) {
super.paintComponent( g );
Rectangle r = g.getClipBounds();
System.out.println( r );
Clipping-Bereiche
Polygon p = new Polygon(
new int[]{200,100,300}, new int[]{100,300,300}, 3 );
g.setClip( p );
g.setColor( Color.ORANGE );
g.fillRect( 0, 0, 500, 500 );
}
ClipDemo.java
%HLDOWHQ,PSOHPHQWLHUXQJHQIXQNWLRQLHUWGLHVQLFKW$XIGHU.RQVROHHUVFKHLQWGDQQHLQH)HKOHUPHOGXQJGHU IROJHQGHQ$UW
java.lang.IllegalArgumentException:\ setClip(Shape) only supports Rectangle objects
Verdeckte Bereiche und schnelles Bildschirmerneuern
&OLSSLQJ%HUHLFKHVLQGQLFKWQXU]XP(LQVFKUlQNHQGHU3ULPLWLY2SHUDWLRQHQVLQQYROO%HL%HUHLFKVEHUGHFNXQ JHQ LQ )HQVWHUQ OLHIHUQ VLH ZHUWYROOH ,QIRUPDWLRQHQ EHU GHQ QHX ]X ]HLFKQHQGHQ %HUHLFK %HL HLQHU JXWHQ
$SSOLNDWLRQ ZLUG QXU GHU 7HLO ZLUNOLFK QHX JH]HLFKQHW GHU DXFK EHUGHFNW ZXUGH 6R OlVVW VLFK 5HFKHQ]HLW VSDUHQ
Beispiel: Informationen über Clipping-Bereiche public void paint( Graphics g )
{
Rectangle r = g.getClipBounds();
System.out.println( r );
}
'DV3URJUDPPHU]HXJWHWZD
java.awt.Rectangle[x=4,y=23,width=392,height=373]
java.awt.Rectangle[x=104,y=87,width=292,height=309]
java.awt.Rectangle[x=104,y=87,width=286,height=211]
java.awt.Rectangle[x=104,y=87,width=243,height=196]
java.awt.Rectangle[x=104,y=87,width=221,height=219]
java.awt.Rectangle[x=101,y=89,width=221,height=219]
...
+LHUDXVODVVHQVLFKYHUVFKLHGHQH)HQVWHURSHUDWLRQHQDEOHLWHQ,FK KDEHHLQIUHPGHV)HQVWHUEHUGDV-DYD )HQVWHUJHVFKREHQXQGGDQQGDVIUHPGH)HQVWHUYHUNOHLQHUW'LHRectangle,QIRUPDWLRQHQJHEHQ$XIVFKOXVV
EHUGLH*U|HGHUQHX]X]HLFKQHQGHQ%HUHLFKH+DEHQZLUVFKRQGDUDQJHGDFKWGLH,QIRUPDWLRQLQHLQHP Image2EMHNW DE]XOHJHQ OlVVW VLFK ZXQGHUEDUdrawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)QXW]HQ+LHUPVVHQ ZLUGLH:HUWHDXVGHPRectangleDXVOHVHQXQGLQdrawImage()EHUWUDJHQgetClipBounds()OLHIHUWHLQ Rectangle2EMHNW GHVVHQ :HUWH IUdrawImage() Q|WLJ VLQG 'D MHGRFK DXFK EHOLHELJH )RUPHQ P|JOLFK VLQGOLHIHUWgetClip()HLQ6KDSH2EMHNWgetClipRect()LVWGLHYHUDOWHWH0HWKRGH]XgetClipBounds() VRQVWDEHULGHQWLVFK'LH0HWKRGHgetClipBounds(Rectangle)HLQHGHUZHQLJHQQLFKWDEVWUDNWHQ0HWKR GHQ LQGraphics OHJW GLH ,QIRUPDWLRQHQ LP EHUJHEHQHQRectangle2EMHNW DE ZHOFKHV DXFK ]XUFN JHOLHIHUWZLUG6LHUXIWQXUgetClipBounds()DXIXQGEHUWUlJWGLHYLHU$WWULEXWHLQGDV5HFKWHFN
Schulversion
3 Farben
,QGLHVHP.DSLWHOHUIDKUHQ6LH
Æ ZLH6LHPLW)DUEHQXQGXQWHUVFKLHGOLFKHQ)DUEW|QHQDUEHLWHQ Æ ZLH6LHYHUVFKLHGHQH)DUEPRGHOOHHLQVHW]HQ
Æ ZLH6LHPLWGHQ6\VWHP)DUEHQDUEHLWHQ
9RUDXVVHW]XQJHQ
9 =HLFKQHQPLWGHP$:7
3.1 Einleitung
'HU(LQVDW]YRQ)DUEHQLQ-DYD3URJUDPPHQLVW'DQNGHUColor.ODVVHXQGGHU)DUEUlXPHHLQIDFK'LH.ODV VHVWHOOWHLQH9LHO]DKOYRQ5RXWLQHQ]XU9HUIJXQJPLWGHQHQColor2EMHNWHHU]HXJWXQGPDQLSXOLHUWZHUGHQ N|QQHQ
class java.awt.Color
implements Paint, Serializable ; Color( float r, float g, float b )
(U]HXJWHLQ&RORU2EMHNWPLWGHQ*UXQGIDUEHQ5RW*UQXQG%ODX'LH:HUWHPVVHQLP%HUHLFK ELVOLHJHQ
; Color( int r, int g, int b )
(U]HXJWHLQColor2EMHNWPLWGHQ*UXQGIDUEHQ5RW*UQXQG%ODX'LH:HUWHPVVHQLP%HUHLFKELV OLHJHQ
; Color( int rgb )
(U]HXJWHLQ&RORU2EMHNWDXVGHPrgb:HUWGHUGLH)DUEHQ5RW*UQXQG%ODXNRGLHUW'HU5RWDQWHLO EHILQGHWVLFKXQWHUGHQ%LWVELVGHU*UQDQWHLOLQELVXQGGHU%ODXDQWHLOLQELV'DHLQ ,QWHJHULPPHU%LWEUHLWLVWLVWMHGH)DUEHGXUFKHLQ%\WH%LWUHSUlVHQWLHUW
(LQH SULYDWH )XQNWLRQtestColorValueRange() GHU Color.ODVVH EHUSUIW RE GLH :HUWH WDWVlFKOLFK ]ZLVFKHQ XQG HUVWHU )DOO RGHU ]ZLVFKHQ XQG ]ZHLWHU )DOO OLHJHQ :HQQ QLFKW ZLUG HLQH IllegalArgumentExceptionDXVJHO|VW,PGULWWHQ)DOOZHUGHQYRQGHU*DQ]]DKOQXUGLH)DUELQIRUPDWLRQHQ DXVGHQ%LWJHQRPPHQ6RQVWLJH:HUWHZHUGHQHLQIDFKQLFKWEHWUDFKWHWXQGPLWHLQHP$OSKD:HUWJOHLFK
EHUVFKULHEHQ6R]HLJWHVDXFKGHU(LQ]HLOHUDXVGHP4XHOOWH[WDQ
public Color( int rgb ) { value = 0xff000000 | rgb;
}
abstract class java.awt.Graphics ; abstract void setColor( Color c )
6HW]WGLHDNWXHOOH)DUEHGLHGDQQYRQGHQ=HLFKHQIXQNWLRQHQXPJHVHW]WZLUG
; abstract Color getColor() /LHIHUWGLHDNWXHOOH)DUEH
; abstract void setXORMode( Color c )
6HW]WGLH3L[HO2SHUDWLRQDXI;25$EZHFKVHOQGH 3XQNWHZHUGHQLQ GHU DNWXHOOHQ)DUEHXQGGHUPLW GLHVHU)XQNWLRQJHVHW]WHQ;25)DUEHJHVHW]W
+LQZHLV'LHPHQVFKOLFKH)DUEZDKUQHKPXQJ0HQVFKHQXQWHUVFKHLGHQ)DUEHQQDFKGUHL(LJHQVFKDIWHQ)DUE WRQ +HOOLJNHLW XQG 6lWWLJXQJ 'HU 0HQVFK NDQQ HWZD ]ZHLKXQGHUW )DUEW|QH XQWHUVFKHLGHQ 'LHVH ZHUGHQ GXUFKGLH:HOOHQOlQJHGHV/LFKWVEHVWLPPW'LH/LFKWLQWHQVLWlWXQG(PSILQGOLFKNHLWXQVHUHU5H]HSWRUHQOlVVW XQV HWZD IQIKXQGHUW +HOOLJNHLWVVWXIHQ XQWHUVFKHLGHQ %HL GHU 6lWWLJXQJ KDQGHOW HVVLFK XP HLQH 0LVFKXQJ PLW ZHLHP /LFKW +LHU HUNHQQHQ ZLU HWZD ]ZDQ]LJ 6WXIHQ 'DPLW NDQQ XQVHU YLVXHOOHV 6\VWHP HWZD ]ZHL 0LOOLRQHQ[[)DUEQXDQFHQXQWHUVFKHLGHQ
3.2 Farben einsetzen
Zufällige Farbblöcke zeichnen
8P GLH 0|JOLFKNHLWHQ GHU )DUEJHVWDOWXQJ HLQPDO ]X EHREDFKWHQ EHWUDFKWHQ ZLU GLH $XVJDEH HLQHV 3UR JUDPPVZHOFKHV5HFKWHFNHPLWZDKOORVHQ)DUEHQDQ]HLJW
import java.awt.*;
import java.util.Random;
import javax.swing.*;
public class ColorBox extends JPanel {
private Random r = new Random();
protected void paintComponent( Graphics g ) {
g.setColor( Color.WHITE );
g.fillRect( 0, 0, getWidth(), getHeight() );
for ( int y = 12; y < getHeight() – 25; y += 30 ) for ( int x = 12; x < getWidth() – 25; x += 30 ) {
g.setColor( new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)) );
g.fillRect( x, y, 25, 25);
g.setColor( Color.BLACK);
g.drawRect( x-1, y-1, 25, 25 );
} }
public static void main( String args[] ) {
JFrame f = new JFrame( "Neoplastizismus" );
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 300, 300 );
f.add( new ColorBox() );
f.setVisible( true );
} }
ColorBox.java
'DV)HQVWHUGHU$SSOLNDWLRQKDWHLQHJHZLVVH*U|HGLHZLUPLWsize()LQ GHU+|KHXQG%UHLWHDEIUDJHQ$QVFKOLHHQGHU]HXJHQZLU%O|FNHGLHPLW HLQHU]XIlOOLJHQ)DUEHJHIOOWVLQGfillRect()EHUQLPPWGLHVH$XIJDEH 'DGLHJHIOOWHQ5HFKWHFNHLPPHULQGHU9RUGHUJUXQGIDUEHJH]HLFKQHWZHU GHQ VHW]HQ ZLU GHQ =HLFKHQVWLIW GXUFK GLH )XQNWLRQsetColor() GLH QDWUOLFK 2EMHNWPHWKRGH YRQGraphics LVW (QWVSUHFKHQG JLEW HV HLQH NRUUHVSRQGLHUHQGH )XQNWLRQgetColor() GLH GLH DNWXHOOH 9RUGHUJUXQG IDUEHDOVColor2EMHNW]XUFNJLEW'LHVH)XQNWLRQGDUIQLFKWPLWGHQ)XQN WLRQHQgetColor(String)EH]LHKXQJVZHLVHgetColor(String, Color) DXVGHUColor.ODVVHYHUZHFKVHOWZHUGHQ
Programmierter Neoplastizismus