C10 – LPO: Primitie grafice 2D
description
Transcript of C10 – LPO: Primitie grafice 2D
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 Frameimport 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.
1
2
3
1
2
3
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;
screenHeight
screenWidth
frameHeight
screenWidth
(x, y)
Frame
Ecran
(0,0)
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-uluiimport 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);
(x1 , y1)
(x2 , y2) (x, y)
w
h
(x, y)
w
h
(x, y)
w
h unghi1
unghi 2
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
1. Comparati Frame-ul si Panel-ul.2. Afisati un Frame care sa aiba titlul “Salutare …”.3. Descrieti procedura prin care se utilizeaza JPanelul
pentru afisarea de obiecte geometrice?4. Cum se deseneaza un patrat?5. Cum se deseneaza un cerc?
Bibliografie
1. http://www.oracle.com/technetwork/java/javase/documentation/index.html
2. http://docs.oracle.com/javase/6/docs/
3. Ştefan Tanasă, Cristian Olaru, Ştefan Andrei, Java de la 0 la expert, Polirom, 2003, ISBN: 973-681-201-4.
4. Herber Schild, Java 2 - The Complete Reference, Fourth Edition, Osborne, 2001, ISBN: 0-07-213084-9.
5. Deitel H.M., Deitel P. J., Java - How to programm, Fith Edition, Prentice Hall, 2003, ISBN: 0-13-120236-7.
6. http://www.east.utcluj.ro/mb/mep/antal/downloads.html