Componentele din JFC/Swing
Pentru a realiza interfața utilizator grafică a unei aplicații folosind
JFC/Swing, este necesar ca la fereastra aplicației (din clasa JFrame) să
se adauge diferite obiecte grafice numite componente.
Deosebim:
1. Componente de control: butoane, butoane radio, casete de
validare, liste, liste ascunse, meniuri, rigle ajustabile, câmpuri de
text.
2. Componente de afișare needitabile: etichete, indicatoare, etc.
3. Componente de afișare editabile: zone de text, tabele
editabile, selectoare de culori, selectoare de fișiere, arbori.
4. Containere: panouri, panouri glisante, etc.
O prezentare a acestor componente însoțită de ilustrații
sugestive și de descrierea detaliată a utilizării fiecăreia se găsește
în lecția Using
Swing Components din sectiunea Creating
a GUI with JFC/Swing din Java Tutorial. Noi
nu vom face aici, din lipsă de timp, decât o scurta prezentare a unor
componente mai larg folosite și a modului lor de utilizare. |
Majoritatea claselor de componente din JFC/Swing sunt derivate din
clasa JComponent, moștenind caracteristicile acestei clase.
Clasa JComponent
Clasa abstracta javax.swing.JComponent extinde clasa java.awt.Container.
In consecință, orice componenta Swing are și caracteristici de
container.
Iată, ca exemplu, câteva facilități pe care le ofera orice
JComponentă:
- posibilitatea de a-i atașa componentei o "inscripție volanta"
(engleză: ToolTip), adică o inscripție explicativă care apare
când punem cursorul de mouse pe componenta respectivă, fără să apăsăm
butonul. O astfel de inscripție se atașează componentei prin metoda
public void setToolTipText(String text);
- posibilitatea de a-i pune componentei o bordură, folosind metoda
public void setBorder(Border border);
- posibilitatea de a modifica culoarea de fond și culoarea de
primplan ale componentei folosind metodele:
public void setBackground(Color color);
public void setForeground(Color color);
Mai multe metode sunt indicate în Indexul de clase.
|
Caracteristicile componentelor JFC/Swing
Fiecare componentă a interfeței utilizator grafice se caracterizează
prin aspect, stare și comportament.
Aspectul este dat de figura prin care este reprezentată pe
ecran componenta respectivă. Fiecare clasă de componente oferă un aspect
tipic al instanțelor sale. În JFC/Swing programatorului i se pun însa
la dispoziție metode și clase prin care poate modifica aspectul
componentelor.
Starea componentei este dată, ca la orice obiect, de valorile
câmpurilor sale. Starea se poate modifica fie datorită acțiunilor
utilizatorului, fie datorită invocării prin program a unor metode ale
acesteia. În general, la modificarea stării componenta generează un
eveniment, iar uneori își schimbă și aspectul.
Comportamentul componentei este modul în care aceasta
reacționează atunci cînd se acționează asupra ei de către utilizator sau
când este invocată o metodă și constă în modificarea stării și a
aspectului și în generarea de evenimente.
Componentele din JFC/Swing oferă programatorului unele facilități
importante privind stabilirea aspectului și comportamentului acestora.
Iată unele ditre ele:
- posibilitatea de a introduce în componentă un text, o imagine,
sau ambele;
- posibilitatea de a adăuga la fiecare componentă a unui text
explicativ volant (engleză: Tool Tip), care conține indicații
care apar când se pune cursorul mouse-ului pe componenta respectivă,
fără a apăsa butonul de mouse.
- posibilitatea de a pune în jurul componentei una sau mai multe
borduri (engleză: Border), cu diferite aspecte: chenar simplu,
chenar cu titlu, bordură care dă aspect de supraînălțare, bordură care
dă aspect de scufundare;
- posibilitatea de a alege aspectul general al tuturor
componentelor interfeței grafice (engleză: Look and Feel).
Pentru a atașa componentei un text volant se folosește metoda
clasei JComponent
public void setToolTipText(String text);
Pentru a pune o bordură se
folosește clasa javax.swing.BorderFactory care oferă metode
pentru crearea unor borduri standard. Clasele de borduri și interfața
Border se gasesc în pachetul javax.swing.border.
Adăugarea bordurii la componentă se face prin metoda clasei
JComponent
public void setBorder(Border border);
Iată unele din metodele clasei BorderFactory:
public static Border createLineBorder(Color color)
- creează o bordură (un chenar) dintr-o singură linie;
public static Border createLineBorder(Color color,
int thickness) - creează o bordură formată dintr-o linie de grosime
(thickness) dată;
public static Border createRaisedBevelBorder()
- creeaza o bordură cu aspect de înălțare a componentei;
public static Border createLoweredBevelBorder()
- creeaza o bordura cu aspect de scufundare a componentei;
public static Border createBevelBorder(int type,
Color highlight, Color shadow) - creeaza o bordură pentru care se
impun tipul și culorile, unde:
type - tipul bordurii, care poate fi BevelBorder.RAISED
sau BevelBorder.LOWERED;
highlight - culoarea marginii care creează aspectul de
înălțare sau coborâre;
shadow - culoarea umbrei.
public static TitledBorder
createTitledBorder(String title) - creeaza o bordură cu titlu.
public static CompoundBorder
createCompoundBorder(Border outsideBorder, Border insideBorder) -
creeaza o bordură compusă, indicându-se bordura exterioară
(outsideBorder) și cea interioara (insideBorder). |
Exemplu
În fișierul TestComp.java este dat un
exemplu de testare a posibilității de a stabili aspectul componentelor
și a le atașa texte volante. Drept componente s-au folosit, deocamdată,
instanțe ale clasei JButton, care a mai fost deja utilizată în capitolul
precedent. Același mod de lucru poate fi însă folosit pentru orice alte
clase care sunt derivate din JComponent.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
class TestComp {
static AF af=new AF();
static IUG iug=new IUG("Butoane cu diferite
aspecte");
/* clasa imbricata pentru interfata
utilizator grafica */
static class IUG extends JFrame {
//JLabel lab1, lab2, lab3, lab4;
//JPanel panel;
JButton b1,b2,b3,b4,b5,b6,b7;
IUG(String titlu) { // constructorul clasei
IUG
super(titlu);
setSize(300, 400);
setLocation(200, 150);
Container cp=getContentPane();
addWindowListener(af); // adaugarea
ascultatorului de fereastra
//panel=new JPanel();
cp.setLayout(new GridLayout(7,1));
//panel.setBackground(Color.red);
b1=new JButton("Un buton obisnuit");
//b1.setBackground(Color.blue);
b2=new JButton("Un buton cu bordura liniara");
b2.setBorder(BorderFactory.createLineBorder(Color.red, 4));
b2.setToolTipText("Bordura este rosie cu
grosimea 4");
b3=new JButton("Un buton cu bordura cu titlu");
b3.setBorder(BorderFactory.createTitledBorder("Un titlu"));
b4=new JButton("Un buton ridicat");
b4.setBorder(BorderFactory.createRaisedBevelBorder());
b5=new JButton("Un buton coborat");
b5.setBorder(BorderFactory.createLoweredBevelBorder());
b6=new JButton(new ImageIcon("buton_go.gif"));
b6.setBorder(BorderFactory.createTitledBorder(
"Un buton cu titlu, care contine o
imagine"));
b7=new JButton("Un buton cu bordura compusa");
Border bord1, bord2, bord3;
bord1=BorderFactory.createBevelBorder(BevelBorder.RAISED,
Color.green, Color.blue);
bord2=BorderFactory.createBevelBorder(BevelBorder.LOWERED,
Color.cyan, Color.yellow);
bord3=BorderFactory.createCompoundBorder(bord1, bord2);
b7.setBorder(bord3);
cp.add(b1);
cp.add(b2);
cp.add(b3);
cp.add(b4);
cp.add(b5);
cp.add(b6);
cp.add(b7);
setVisible(true);
}
}
/* Clasa ascultatoare de fereastra */
static class AF extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0); // incheierea executarii
aplicatiei
}
}
/* Metoda principala a aplicatiei */
public static void main(String args[]) {
}
}
|
Remarcăm următoarele:
- pentru a lucra cu borduri, a fost necesar să se importe pachetul
javax.swing.border;
- s-au folosit bordurile standard din clasa BorderFactory;
- butonului al doilea (b2, cel cu bordura roșie groasă) i s-a atașat
un text explicativ volant; dacă punem cursorul de mouse deasupra acestui
buton fără să apăsăm și așteptăm câteva secunde, apare textul volant;
- în penultimul buton (b6) s-a introdus imaginea care se găsește în fișierul
buton_go.gif. Dacă doriți sa testati programul, această imagine trebuie
să existe în același director cu clasa TestComp (deci în directorul
curent al dvs). Pentru a realiza acest lucru, puneți cursorul mouse-ului
pe această imagine, apasați butonul din dreapta și va apare un meniu
din care selectați opțiunea "Save image as ..." sau "Save picture as
...", apoi salvați imaginea în același director cu fișierul
TestComp.java.
|
|
© Copyright 2000 - Severin
BUMBARU, Universitatea "Dunărea de Jos" din Galați
