330 likes | 606 Views
Neile, kel pole uut aabitsat: kõik (uue) aabitsa programmitekstid on saadaval http://www.cs.ut.ee/~kiho/progr/Aabits/Programmid/. Edasijõudnutele: Java kogu “arsenali” kirjeldus on saadaval http://java.sun.com/j2se/1.4.2/docs/api/index.html. Ekraanigraafika vahendid (I)
E N D
Neile, kel pole uut aabitsat: kõik (uue) aabitsa programmitekstid on saadaval http://www.cs.ut.ee/~kiho/progr/Aabits/Programmid/ Edasijõudnutele: Java kogu “arsenali” kirjeldus on saadaval http://java.sun.com/j2se/1.4.2/docs/api/index.html Ekraanigraafika vahendid (I) [Aabits(2002), vihik 9]
Kuidas teha raam ehk aken? • Kuidas lisada raamile • joonistamise ala ehk tahvel? • Kuidas tahvlile joonistada • - teksti • - lõike • - ristkülikuid • - ringe või ovaale
Kuidas teha raam ehk aken? import java.awt.*; // Point, Dimension import javax.swing.*; // JFrame class Jooniseraam{// PEAKLASS // raam: public static void main(String[] args){ JFrame raam = new JFrame("Joonis"); raam.setLocation(new Point(100, 100)); raam.setSize(new Dimension(600, 500)); raam.show(); } } Raami asukoht ekraanil ülemine vasak nurk: (100; 100) Raami mõõtmed laius: 600, kõrgus: 500
Kuidas lisada raamile joonistamise ala ehk tahvel? 1. Teha klass Tahvel. 2. Klassi Jooniseraam lisada korraldus uue tahvli lisamiseks.
import java.awt.*; // Graphics import javax.swing.*; // JPanel class Tahvel extends JPanel{ // tahvel joonise kujutamiseks public void paintComponent(Graphics g){ super.paintComponent(g); } } 1. Klass Tahvel
import java.awt.*; // Point, Dimension import javax.swing.*; // JFrame class Jooniseraam{// PEAKLASS // tahvliga raam public static void main(String[] arg){ JFrame raam = new JFrame("Joonis"); raam.setLocation(new Point(100, 100)); raam.setSize(new Dimension(600, 500)); raam.getContentPane().add(new Tahvel( )); raam.show(); } } 2. Klassi Jooniseraam lisada korraldus uue tahvli lisamiseks
Kuidas tahvlile joonistada? 3. Teha klass Joonis, mis sisaldab vajalikku joonistamiste meetodit joonistada( ). 4. Klassi Tahvel lisada selle meetodi rakendamine.
import java.awt.*; // Graphics, Color, Point class Joonis{ // Põhimeetod: joonistada(), rakendamiseks klassist Tahvel // konstant: static final Color TAUST = Color.white; // tahvli taustvärv static void joonistada(Tahvel t, Graphics g){ // Antud: tahvel t, graafikakontekst g ja ... // Tulemus: joonis tahvlil t t.setBackground(TAUST); // seada tahvli taustvärv // raamitud tekst tahvli ülemisse vasakusse nurka: g.setColor(Color.red); g.drawString(”Minu esimene joonis”, 15, 20); // tekst g.drawRect(10, 7, 125, 15); // raamida tekst } } 3. Teha klass Joonis, mis sisaldab vajalikku joonistamiste meetodit joonistada()
import java.awt.*; // Graphics import javax.swing.*; // JPanel class Tahvel extends JPanel{ // tahvel joonise kujutamiseks public void paintComponent(Graphics g){ super.paintComponent(g); Joonis.joonistada(this, g); }//paintComponent }//Tahvel 4. Klassi Tahvel lisada selle meetodi rakendamine
Muuta/täiendada soovi kohaselt meetodit joonistada() klassis Joonis. Klassid Jooniseraam ja Tahvel jäävad samaks. Kuidas teha teistsuguseid jooniseid? Kasutada on üksikute elementide joonistamismeetodid süsteemklassist Graphics. Järgnevas nende rakendamise näiteidgraafikakonteksti isendi osuti g korral: vgt g.drawString(“vgt”, x, y); (x;y) (x;y) kõrgus g.drawOval(x, y, laius, kõrgus); laius
g.setColor(v); seada v joonistamise jooksvaks värviks, v näiteid: Color.black must Color.blue sinine Color.cyan hele rohekas-sinine Color.darkGray tumehall Color.gray hall Color.green roheline Color.lightGray helehall Color.magenta lilla Color.orange oranž Color.pink roosa Color.red punane Color.white valge Color.yellow kollane
Jooksva kirjakuju seadmise (enne g.drawString()) näiteid: g.setFont(new Font(“Serif”, Font.PLAIN, 14)); g.setFont(new Font(“Courier”, Font.BOLD, 12)); g.setFont(new Font(“SansSerif”, Font.ITALIC, 16)); kirja tüüp kuju suurus PLAIN - tavaline; BOLD - poolpaks, ITALIC - kursiiv g.drawLine(x, y, x1, y1); - lõik (x;y)---(x1;y1) g.drawRect(x, y, laius, kõrgus); - ristküliku küljed, (x;y): ülemine vasak nurk g.fillRect(x, y, laius, kõrgus); - ristkülik g.drawOval(x, y, laius, kõrgus); - ovaaljoon mõttelisse ristkülikusse g.fillOval(x,y,laius, kõrgus); - ovaal mõttelisse ristkülikusse
Muster I Joonistamine ekraanikoordinaatides ekraanikoordinaatides/JoonisMuster.java Klassi Tahvel pole vaja muuta. Peaklassis Jooniseraam võib soovi korral muuta raami esialgset paiknemist ja suurust määravaid konstante.
Muster II Joonistamine tavakoordinaatides tavakoordinaatides/JoonisMuster.java Klassi Tahvel pole vaja muuta. Peaklassis Jooniseraam võib soovi korral muuta raami esialgset paiknemist ja suurust määravaid konstante.
Failis JoonisMuster.java tuleb muuta joonte // ============================= vahel paiknevat osa //============================= Lahendamiseks on kindlasti vajalikud veel klassid (Aabitsast) Punkt ja Sirge.
Funksiooni graafiku joonistamine Klassiskeem Joonis x0 x1 xSamm fxVärv fxValem f ( ) joonistada( ) juhupunkt( ) teisend() joonistadaPunkt( ) joonistadaLõik( ) joonistadaRing( ) joonistadaTeljed( ) Jooniseraam main( ) Tahvel paintComponent( ) Punkt Aabits, vihik 2 Sirge Aabits, vihik 2 Fail JoonisGr.java
Klass Joonis.java (failis JoonisGr.java) Meetodite väljakutsete hierarhia tahvlile joonistamisel <Tahvel>.paintComponent Joonis.joonistada Joonis.joonistadaTeljed Joonis.f Joonis.joonistadaLõik Joonis.teisend
Ekraanigraafika vahendid (II) Rakend [Aabits(2002), vihik 15]
Applet LihtneRakend TAUSTA_VÄRV LAIUS KÕRGUS g init( ) paint( )
import java.awt.*; import java.applet.Applet; public class LihtneRakend extends Applet{ // värvid: static final Color TAUSTA_VÄRV = Color.yellow; // rakendi suurus: int LAIUS, KÕRGUS;// rakendi mõõdud Graphics g; // rakendi graafikakontekst
public void init(){ setBackground(TAUSTA_VÄRV); // värvida taust setVisible(true); // rakend nähtavaks g = getGraphics(); // graafikakontekst // parameetrid rakendi suuruse põhjal: LAIUS = getSize().width; KÕRGUS = getSize().height; }
public void paint(Graphics g){ • Joonis.joonista(LAIUS, KÕRGUS, g); • } • // Märkus. Klassi Joonis meetod joonista() • // erineb meetodist joonistada() • // vaid selle poolest, et tahvli • // asemel antakse ette rakend • }
Rakendiviide: - - - - - - - - - - - - - - - - - - - - - - - - - - fail LihtneRakend.html <html> <title>PROOV</title> <applet code = LihtneRakend.class width = 550 height = 450> </applet> </html> Rakendikäituri käivitamine: appletviewer LihtneRakend.html
Meetodeid: käivitub: public void init( ) // rakendi laadimisel public void paint(Graphics g ) // rakendi // ekraaniala muutumisel (ilmumisel) public void start( ) // pärast rakendi laadimist // ja ilmumist ekraanile
Ülesanne: joonistada ümmargune südamik; selle ümber iga 1 sekundi järel järjest suurem kontsentriline ring; pärast 25-nda kontsentrilise ringi joonistamist kustutada ringid ja alustada uuesti esimese ringi joonistamisest. rakend taust (kollane) südamik (roheline) ringid (punased)
import java.awt.*; // --> Graphics, Color import javax.swing.*; // --> JApplet public class Rakend extends JApplet { // värvid: final Color TAUST = Color.yellow; final Color SÜDAMIK = Color.green; final Color RING = Color.red; // rakendi mõõdud: final int LAIUS = 300; final int KÕRGUS = 300; // esimese ringi ja südamiku mõõdud ning algpunkt: int laius = LAIUS/4; int kõrgus = KÕRGUS/4; int keskX = LAIUS/2 - laius/2; int keskY = KÕRGUS/2 - kõrgus/2;
Graphics g; int iRing; // parajasti joonistatava ringi number // seatakse meetodis paint() public void paint(Graphics g){ //käivitatakse esimesena setBackground(TAUST); // sama, mis: //g.setColor(TAUST); //g.fillRect(0,0,getSize().width,getSize().height); g.setColor(SÜDAMIK); g.fillOval(keskX, keskY, laius, kõrgus); // ringidega algusest peale: iRing = 99; // et kustutataks kõik ringid }//paint(g)
public void init( ){ setSize(LAIUS, KÕRGUS); // mõõdud rakendile g = getGraphics(); // rakendi graafikakontekst setVisible(true); // rakend nähtvaks }//init public void start( ){ for(; ; iRing++){ // kontsentr. ringide joonistamise tsükkel if(iRing > 24){ // ringidega algusest peale iRing = 0;
// kustutada kõik 25 ringi: g.setColor(TAUST); for(int i = 0; i < 25 ; i++){ int k = i*5; g.drawOval(keskX-k, keskY-k, laius+2*k, kõrgus+2*k); }//for i }//if // joonistada üks ring (number iRing):
g.setColor(Color.red); int k = iRing*5; g.drawOval(keskX-k, keskY-k, laius+2*k, kõrgus+2*k); // viivitus 1 sekund: try{ Thread.currentThread().sleep(1000); } catch(InterruptedException e){} }//for iRing }//start }//Rakend
Hääldusjuhiseid black [blæk ] – must blue[blu ] – sinine bold[bəʊld ] – poolpaks [üks kirja kujudest] color [kʌlɜː] – värv; värvus cyan [saɪæn ] – heleroheline; tsüaniidne component [kʌmpəʊnʌnt ] – komponent courier [kɜːiɜː] – käskjalg, kuller [üks kirja tüüpidest] dark [dɒrk ] – tume dimension [dɪmenʃʌn ] – mõõde; dimensioon draw [drɔː] – joonistama font [fɒnt ] – kiri; font
frame [freɪm ] – raam gray [greɪ ] – hall green [grin ] – roheline import [ɪmpɔːrt ] – importida italic [aɪtælɪk ] – kursiiv [üks kirja kujudest] J [dʒeɪ ] – J light [laɪt ] – hele location [ləʊkeɪʃʌn ] – asukoht magenta [mʌdʒentʌ ] – lillakaspunane orange [ɔːrʌndʒ] – oranž oval [əʊvʌl ] – ovaal paint [klæs ] – värvida panel [klæs ] – paneel pink [klæs ] – roosa
plain [pleɪn] – harilik [üks kirja kujudest] point [pɔɪnt ] – punkt rectangle [rektæŋgʌl ] – ristkülik red [red ] – punane sansserif [sansserif ʃəʊ ] – sansseriif [üks kirja tüüpidest] serif [serif ] – seriif[üks kirja tüüpidest] set [set ] – seada show [ʃəʊ ] – näidata size [saɪz ] – suurus super [supɜː] – ülem- swing [swɪŋ ] – kiik; hoog white [waɪt ] – valge yellow [jeləʊ ] – kollane