Transcript Frame

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 >
,
1
2
1

2
3
3
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).
(0,0)
Ecran
(x, y )
Frame
frameHeight
screenWidth
screenWidth


screenH eight
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 intrun 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:
(x1 , y1)
g.drawLine(x1, y1, x2, y2);

dreptunghi:
g.drawRect(x, y, w, h);
g.fillRect(x, y, w, h);

w
(x, y)
arc:
g.drawArc(x, y, w, h, unghi1, unghi2);
g.fillArc(x, y, w, h, unghi1, unghi2);

h
elipsa:
g.drawOval(x, y, w, h);
g.fillOval(x, y, w, h);

(x2 , y2)
(x, y)
h
w
(x, y)
text:
un gh i 2
un gh i1
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);
w
h
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.
2.
3.
4.
5.
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
1.
2.
3.
4.
5.
6.
http://www.oracle.com/technetwork/java/javase/documenta
tion/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