Documente Academic
Documente Profesional
Documente Cultură
Desenarea în Java
Un context grafic este, de fapt, un obiect prin intermediul căruia se poate controla procesul de
desenare al altui obiect. Un context grafic este specificat prin intermediul unui obiect din clasa
Graphics primit ca parametru în metodele paint() sau repaint();
Un program Java care are interfață grafică cu utilizatorul, trebuie să deseneze pe ecran toate
componentele sale care au o reprezentare vizuală. Această desenare include componentele
standard folosite în aplicație precum și cele definite de către programator.
void repaint() - Execută explicit un apel al metodei update pentru a actualiza reprezentarea
grafică a unei componente.
După cum se observă, singurul argument al metodelor paint și update este un obiect g de tip
Graphics. Acesta reprezintă contextul grafic în care se execută desenarea componentelor
Toate desenele care trebuie să apară pe o suprafață de desenare se realizează în metoda paint a
unei componente, în general apelată automat sau explicit cu metoda repaint ori de câte ori
componenta respectivă trebuie redesenată. Există posibilitatea de a desena și în afara metodei
paint, însă aceste desene se vor pierde la prima operație de minimizare, maximizare,
redimensionare a suprafeței de afișare.
Prin primitive grafice ne vom referi în continuare la metodele clasei Graphics, care permit
desenarea de figuri geometrice și texte.
Desenarea textelor se face cu uzual cu metoda drawString care primește ca argumente un șir
și colțul din stânga-jos al textului. Textul va fi desenat cu fontul și culoarea curentă a contextului
grafic.
Metodele care încep cu ”fill” vor desena figuri geometrice care au interiorul colorat, adică
”umplut” cu culoarea curentă a contextului de desenare, în timp ce metodele care încep cu
”draw” vor desena doar conturul figurii respective.
Așadar, clasa Graphics contine o serie de primitive de desenare. Ele pot fi împărțite în două mari
categorii: cele fără umplere - trasează doar conturul obiectului grafic, respectiv cele cu umplere -
trasează doar interiorul. Pentru a obține o figură cu un contur și un interior în culori diferite se va
utiliza o pereche corespunzătoare dintre aceste funcții.
Funcții fără umplere (în paranteze sunt dați parametrii funcției și tipul lor):
Sarcina 1
Rulați programul următor pentru a vedea trasarea diferitelor tipuri de linii:
import javax.swing.* ;
import java.awt.* ;
class Fereastra extends JFrame
{ Fereastra ()
{ setTitle ("Tipuri de linii") ;
setSize (300, 150) ;
pan = new Panel() ;
getContentPane().add(pan) ;
}
private JPanel pan ;
}
class Panel extends JPanel
{ public void paintComponent(Graphics g)
{ super.paintComponent(g) ;
g.drawRect (20, 10, 60, 40) ;
g.drawLine (20, 100, 150, 20) ;
g.drawOval (130, 60, 110, 50) ;
}
}
public class FiguriGeom1
{ public static void main (String args[])
{ Fereastra fer = new Fereastra() ;
fer.setVisible(true) ;
}
}
Sarcina 2. Rulați programul următor și observați ce funcții se folosesc pentru desenarea
diferitelor figuri geometrice :
import java.awt.*;
import javax.swing.*;
public PanouDesen() {
super();
setPreferredSize(new Dimension(xMax, yMax));
}
// figuri – pline
}
}
app.getContentPane().add(new PanouScroll());
app.pack();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.show();
}
}
Orice culoare este formată prin combinația culorilor standard roșu (red), verde (green) și
albastru (blue), la care se adaugă un anumit grad de transparență (alpha). Fiecare din acești
patru parametrii poate varia într-un interval cuprins fie între 0 și 255 (dacă dorim să specificăm
valorile prin numere întregi), fie între 0.0 și 1.0 (dacă dorim să specificăm valorile prin numere
reale).
Color( r, g, b, a)
unde r,g,b (rosu, verde, albastru) pot fi de tip float sau întreg iar a – "alfa" specifică transparența
(ce poate lipsi).
BLACK, BLUE, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, ORANGE, PINK, RED,
WHITE, YELLOW.
g.setColor(Color c)
Sarcina 3
Rulați programul următor pentru a vedea utilizarea culorilor la desenare și la umplere :
import java.awt.*;
import javax.swing.*;
public PanouDesenCulori() {
super();
setPreferredSize(new Dimension(xMax, yMax));
this.setBackground(Color.WHITE);
}
g.setColor(Color.WHITE);
g.fillRect(0, 0 , xMax, yMax); // sterge suprafata
g.setColor(Color.BLACK);
g.drawLine(xMax / 2, 0, xMax / 2, yMax); // trasare caroiaj
vertical
for(int i=1; i<8; i++)
g.drawLine(0, i*(yMax / 8), xMax, i*(yMax / 8));//
trasare caroiaj orizontal
// figuri - pline
g.setColor(Color.RED);
g.drawString("fill3DRect (RED)", 210, 15);
g.fill3DRect(210, 30, 170, 90, true);
myColor = new Color(85, 130, 200);
g.setColor(myColor);
g.drawString("fillArc", 210, 165);
g.drawString(myColor.toString(), 210, 178);
g.fillArc(210, 190, 170, 90, 30, 170);
g.setColor(Color.DARK_GRAY);
g.drawString("fillOval (DARK_GRAY)", 210, 315);
g.fillOval(210, 330, 170, 90);
g.setColor(Color.LIGHT_GRAY);
g.drawString("fillPolygon (LYGHT_GRAY)", 210, 465);
int xPoints3[] = { 210, 310, 370, 360, 250 };
int yPoints3[] = { 530, 480, 500, 570, 570 };
g.fillPolygon(xPoints3, yPoints3, xPoints3.length);
myColor = new Color(137, 166, 95);
g.setColor(myColor);
g.drawString("fillRect", 210, 615);
g.drawString(myColor.toString(), 210, 628);
g.fillRect(210, 630, 170, 90);
myColor = new Color(182, 233, 27);
g.setColor(myColor);
g.drawString("fillRoundRect", 210, 765);
g.drawString(myColor.toString(), 210, 778);
g.fillRoundRect(210, 780, 170, 90, 45, 45);
// suprapunere cu transparenta 20 %
myColor = new Color(230, 33, 33);
g.setColor(myColor);
g.drawString("Tansparenta 20% cu contur", 210, 915);
g.fillRoundRect(210, 930, 170, 90, 45, 45);
myColor = new Color(33, 230, 33, 51); // aplha = 51
g.setColor(myColor);
g.fillOval(255, 960, 140, 80);
g.setColor(Color.BLACK);
g.drawOval(255, 960, 140, 80);
// suprapunere cu transparenta 80 %
myColor = new Color(230, 33, 33, 205); // aplha = 205
g.setColor(myColor);
g.drawString("Tansparenta 80%", 210, 1065);
g.fillRoundRect(210, 1080, 170, 90, 45, 45);
myColor = new Color(33, 230, 33, 127); // aplha = 127
g.setColor(myColor);
g.fillOval(255, 1110, 140, 80);
}
}
app.getContentPane().add(new PanouScrollCulori());
app.pack();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.show();
}
}
Sarcina 4
Realizați propriul desen la liberă alegere pe o suprafață Canvas