150 likes | 341 Views
C10 – LPO: Primitie grafice 2D. CUPRINS JFrame JPanel 2D: coorodate linie dreptunghi, patrat elipsa, cerc text poligon. Obiective. După parcurgerea acestui curs ar trebuie sa puteţi: înţelege principiile de lucru cu geometria 2D din Java; crea un cod gradic sigur utilizand Swing;
E N D
C10 – LPO: Primitie grafice 2D CUPRINS JFrame JPanel 2D: coorodate linie dreptunghi, patrat elipsa, cerc text poligon.
Obiective După parcurgerea acestui curs ar trebuie sa puteţi: • înţelege principiile de lucru cu geometria 2D din Java; • crea un cod gradic sigur utilizand Swing; • înţelege şi modifica cod JDeveopler pentru geometria 2D; • înţelege si genera grafica pe baza primitivelor geometrice 2D: linie, dreptunghi, cerc, text, poligon si culoare.
Frame • se numeste Frame o fereasta care nu este continuta in alta fereastra (toate celelalte ferestre sunt continute in ea); • orice obiect grafic de interfata numit componenta (Component) sau container (Container) are la baza suprafata de desenare oferta de Frame; • clasa pentru crearea unui ferestre Frame este JFrame • Component: o superclasa pentru toate obiectele grafice de interfata (Buttons, Text Boxes, Labels, Menus, Lists, etc). • Container: o clasa pentru gruparea componentelor (frame si panel sunt exemple de containere); • Panel: Container invizibil care tine componente grafice; • Graphics: Clasa abstracta ce defineste contextul grafic pentru desenarea de forme si texte.
Crearea unui Frame import javax.swing.*; public class TestFrame { public static void main(String[] args) { JFrame frame = new JFrame("Frame de test"); frame.setSize(500,300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Crearea unui Frame in JDeveloper • File > New (Ctr+N) • apoi > , • codul generat de JDeveloper este echivalent dar nu idenic.
Cod de Frame generat din JDeveloper import java.awt.Dimension; import javax.swing.JFrame; public class TestFrameJD extends JFrame { public TestFrameJD() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.getContentPane().setLayout( null ); this.setSize( new Dimension(400, 300) ); this.setTitle( "Frame de test din JDeveloper" ); } }
Coordonate grafice • implicit, Frame-ul are marimea inutila de 0x0 pixeli, cu metoda setSize(lungime, inaltime) modificam dimensiunile implicite; • implicit, Frame-ul se afiseaza in coltul stanga-sus al ecranului; • afisatea intr-o alta pozitie se face cu metoda setLocation(x,y). Metoda defineste pozitia coltului stanga-sus in (x,y).
Centrarea Frame-ului import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.*; public class TestFrame { public static void main(String[] args) { JFrame frame = new JFrame("Test de Frame"); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 300); Dimension frameSize = frame.getSize(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); int x = (screenSize.width - frameSize.width) / 2; int y = (screenSize.height - frameSize.height) / 2; frame.setLocation(x, y); } }
Grafica in Panel • in general Pane-urile sunt containere pentru gruparea componentelor de interfara grafica; • in practica programarii se recomanda plasarea acestor componente in panel-uri si plasarea panel-urilor intr-un frame; • JPanel este clasa ce permite trasarea de grafica (inclusiv text); • desenarea intr-un Panel se face prin extinderea clase JPanel si redefinirea metodei paintComponent() pentru a specifica modul de desenare; desenarea consta in afisarea de siruri, forme geometrice sau imagini.
Desenarea de figuri geometrice - 1 • declaratia metodei paintComponent este: public void paintComponent(Graphics g) • paintComponent trebuie sa contina toate instructiunile de desenare, iar metoda este apelata automat la prima afisare a componentei; • obiectul g de tipul Graphics este creat automat de Java. • acest obiect stocheaza si controleaza modul in care informatiile sunt desenate: g.drawLine(x1,y1,x2,y2); g.drawRect(x0,y0,width,height); • clasa Graphics este primitiva, pentru grafica exista clasa Graphics2D mai evoluata, ce o extinde pe prima; Swing, la fiecate aple de paintComponent transfera ca parametru pe Graphics2D; Graphics2D are metoda draw() pentru afisarea unui obiect eometric si fill() pentru umplerea lui cu culoarea curenta.
Desenarea de figuri geometrice - 2 • linie: g.drawLine(x1, y1, x2, y2); • dreptunghi: g.drawRect(x, y, w, h); g.fillRect(x, y, w, h); • elipsa: g.drawOval(x, y, w, h); g.fillOval(x, y, w, h); • arc: g.drawArc(x, y, w, h, unghi1, unghi2); g.fillArc(x, y, w, h, unghi1, unghi2); • text: g.drawString(”text…”); • poligon: int[] x = {30, 50, 58, 47, 21}; int[] y = {19, 44, 84, 45, 67}; Polygon poly = new Polygon(x,y,5); g.drawPolygon(poly); g.fillPolygon(poly);
Culori • culorile se definesc cu clasa Color, Color c = new Color(r, g, b); unde r,g, si b specifica componentele de rosu, verde si albastru din culoare; • urmatoarele metode se pot folosi pentru setarea fondului (background) si culorii (foreground) de desenare: setBackground(Color c); setForeground(Color c); • Exemplu: setBackground(Color.red); setForeground(Color.blue);
Intrebari • Comparati Frame-ul si Panel-ul. • Afisati un Frame care sa aiba titlul “Salutare …”. • Descrieti procedura prin care se utilizeaza JPanelul pentru afisarea de obiecte geometrice? • Cum se deseneaza un patrat? • Cum se deseneaza un cerc?
Bibliografie • http://www.oracle.com/technetwork/java/javase/documentation/index.html • http://docs.oracle.com/javase/6/docs/ • Ştefan Tanasă, Cristian Olaru, Ştefan Andrei, Java de la 0 la expert, Polirom, 2003, ISBN: 973-681-201-4. • Herber Schild, Java 2 - The Complete Reference, Fourth Edition, Osborne, 2001, ISBN: 0-07-213084-9. • Deitel H.M., Deitel P. J., Java - How to programm, Fith Edition, Prentice Hall, 2003, ISBN: 0-13-120236-7. • http://www.east.utcluj.ro/mb/mep/antal/downloads.html