Suprafetele de afisare ale unei componente grafice sunt extensii ale clasei
Container. Dupa cum am vazut, pentru implementarea unui applet s-au folosit
suprafetele de afisare Applet si Panel. O aplicatie intependenta are insa nevoie
de propriile ferestre pe care sa faca afisarea componentelor grafice. Pentru
dezvoltarea aplicatiilor care folosesc grafica se vor folosi clasele Window,
Frame, Dialog.
Clasa Window f7m23mn
Clasa Window este rar utilizata in mod direct. Ea permite crearea unor ferestre
top-level care nu au chenar si nici bara de meniuri. Pentru a crea ferestre
mai complexe se utilizeaza clasele Frame si Dialog.
Constructor
Window (Frame)
Constructs a new Window initialized to an invisible state.
Metode addNotify () Creates the Window's peer. dispose()
Sterge o fereastra de care nu mai este nevoie. Trebuie apelata pentru a elibera
resursele getToolkit() Returns the toolkit of this frame. getWarningString() Gets the warning string for this window. pack()
Redimensioneaza fereastra specifica corespunzator dimensiunilor componentelor
sale show()
Afiseaza fereastra specificata. In mod implicit, o fereastra nou creata nu este
vizibila. toBack()
Fereastra curenta este trimisa in spatele celorlate ferestre. toFront()
Afiseaza fereastra specificata deasupra celorlalte ferestre.
Clasa Frame
Este o subclasa a clasei Window. Creeaza ferestre independente si functionale,
continand bare de meniuri.
Variabile
CROSSHAIR_CURSOR
DEFAULT_CURSOR
E_RESIZE_CURSOR
HAND_CURSOR
MOVE_CURSOR
NE_RESIZE_CURSOR
NW_RESIZE_CURSOR
N_RESIZE_CURSOR
SE_RESIZE_CURSOR
SW_RESIZE_CURSOR
S_RESIZE_CURSOR
TEXT_CURSOR
WAIT_CURSOR
W_RESIZE_CURSOR
Constructori
Frame () Constructs a new Frame that is initially invisible.
Frame(String) Constructs a new, initially invisible Frame with the specified
title.
Metode addNotify () Creates the Frame's peer. dispose() Disposes of the Frame. getCursorType() Return the cursor type getIconImage() Returns the icon image for this Frame. getMenuBar() Gets the menu bar for this Frame. getTitle() Gets the title of the Frame. isResizable() Returns true if the user can resize the Frame. paramString() Returns the parameter String of this Frame. remove(MenuComponent) Removes the specified menu bar from this Frame. setCursor(int) Set the cursor image to a predefined cursor. setIconImage(Image) Sets the image to display when this Frame is iconized. setMenuBar(MenuBar)Sets the menubar for this Frame to the specified menubar. setResizable(boolean) Sets the resizable flag. setTitle(String) Sets the title for this Frame to the specified title.
Exemplu - crearea si afisarea unei clase import java.awt.*; public class TestWindow S public static void main(String argsst) S
Frame f a new Frame("Test Frame"); f.show();
T
T
Gestionarul implicit al clasei Window este BorderLayout. Din acest motiv, in
momentul in care fereastra este creata dar nici o componenta grafica nu este
pusa pe suprafata ei, suprafata de afisare a feretrei va fi nula.
Acelasi efect il vom obtine daca o redimenionam si apelam apoi metoda pack()
care determina dimeniunea suprafetei de afisare in functie de componentele grafice
afisate pe ea.
Se observa de asemenea ca butoanele de maximizare, minimizare si inchidere ale
ferestrei nu sunt functionale. Aceasta deoarece, similar celorlalte butoane,
ele genereaza niste evenimente care insa nu sunt receptionate de obiectul care
reprezinta fereastra deoarece acesta nu s-a inregistrat ca ascultator. Interceptarea
evenimentelor se face prin implementarea interfetei WindowListener si prin adaugarea
in lista ascultatorilor ferestrei chiar a obiectului care implementeaza fereastra.
import java.awt.*; import java.awt.event.*; class Cadru extends Frame implements WindowListener S public Cadru(String titlu) S super(titlu); this.addWindowListener(this);
T
//metodele interfetei WindowListener public void windowOpened(WindowEvent e) ST public void windowClosing(WindowEvent e) S
System.exit(0);
T public void windowClosed(WindowEvent e) ST public void windowIconified(WindowEvent e) ST public void windowDeiconified(WindowEvent e) ST public void windowActivated(WindowEvent e) ST public void windowDeactivated(WindowEvent e) ST
T
public class TestWindow S public static void main(String argsst) S
Cadru w_main a new Cadru("Test Frame");
Button cb_ok a new Button(“OK”);
w_main.add(cb_ok);
w_main.pack();
w_main.show();
T
T
Ferestre de dialog - Clasa Dialog
Toate mediile grafice ofera si un tip special de ferestre destinate preluarii
datelor de la utilizator. Acestea se numesc ferestre de dialog sau casete de
dialog si sunt de doua tipuri :
• modale : care blocheaza accesul la fereastra parinte - de exemplu, ferestre
de introducere a unor date, de alegere a unui fisier in vederea deschideriii,
de selectare a unei optiuni, mesaje de avertizare, etc
• nemodale : care nu blocheaza fluxul de intrare catre fereastra parinte
- de exemplu, ferestrele de cautare a unui cuvant intr-un fisier.
Crearea unor astfel de ferestre se realizeaza prin intermediul clasei Dialog.
Clasa Dialog
Constructori
Dialog (Frame w_parent, boolean modal)
Dialog(Frame w_parent, String titlu, boolean modal)
Construieste o caseta de dialog initial invizibila, avand ca parinte fereastra
w_parent. Valoarea logica <modal> specifica daca fereastra de dialog este
modala sau nu.
Metode addNotify () Creates the frame's peer. getTitle() Gets the title of the Dialog. isModal() Returns true if the Dialog is modal. isResizable() Returns true if the user can resize the frame. paramString() Returns the parameter String of this Dialog. setResizable(boolean) Sets the resizable flag. setTitle(String) Sets the title of the Dialog.
Exemplu
Dialog d a new Dialog(w_main, "Fereastra dialog", true);
Panel butoane a new Panel(); butoane.setLayout(new FlowLayout()); butoane.add(new Button("DA")); butoane.add(new Button("NU")); d.add("South", butoane); d.add("Center", new Label("Sigur doriti sa faceti asta?")); d.setSize(new Dimension(200,100)); d.show();
Crearea de dialoguri este relativ simpla. Mai complicat este insa modul in
care se implementeaza comunicarea intre fereastra de dialog si aplicatie, pentru
ca aceasta din urma sa poata folosi datele introduse (sau optiunea specificata)
in caseta de dialog. Exista doua abordari generale :
• obiectul care reprezinta dialogul poate sa capteze evenimentele de la
butoanele ferestrei si de la controalele de pe suprafata sa si sa sa seteze
valorile unor parametri ai aplicatiei in momentul in care dialogul este incheiat
sau
• obiectul care creeaza dialogul (fereastra parinte) sa se inregistreze
ca ascultator al evenimentelor de la butoanele care determina incheierea dialogului,
iar obiectul dialog sa ofere metode publice prin care datele introduse sa fie
preluate din exterior.
Obs: A doua metoda este mai uzuala.
Clasa FileDialog
Pachetul java.awt pune la dispozitie si un tip de fereastra de dialog folosit
pentru incarcarea / salvarea fisierelor. Clasa FileDialog are un comportament
comun dialogurilor de acest tip de pe majoritatea sistemelor, dar forma sa specifica
in care va fi afisata este specifica platformei pe care ruleaza aplicatia.
Variabile
LOAD The file load variable.
SAVE The file save variable.
Constructor
FileDialog (Frame, String) Creates a file dialog for loading a file.
FileDialog(Frame, String, int)Creates a file dialog with the specified title
and mode.
Metode addNotify () Creates the frame's peer. getDirectory() Gets the directory of the Dialog. getFile() Gets the file of the Dialog. getFilenameFilter() Gets the filter. getMode() Gets the mode of the file dialog. paramString() Returns the parameter String of this file dialog. setDirectory(String)
Set the directory of the Dialog to the specified directory. setFile(String)
Sets the file for this dialog to the specified file. setFilenameFilter(FilenameFilter)
Sets the filter for this dialog to the specified filter.
Exemple:
FileDialog f1 a new FileDialog(w_main, “Alegere fisier”,
FileDialog.LOAD); //dialog pentru incarcarea unui fisier
FileDialog f2 a new FileDialog(w_main, “Salvare fisier”,
FileDialog.SAVE); //dialog pentru salvarea unui fisier f1.setDirectory(“./”); //directorul curent f2.setDirectory(“/”); //directorul radacina f1.setFile(“*.java”); f2.setFile(”test.html”);//fisierul care apare initial
f1.setFileNameFilter(new JavaFilter()); class JavaFilter implements FilenameFilter S public boolean accept(File dir, String numeFis) S return (numeFis.endsWith(“.java”));
T
T
Obs: La crearea unui obiect FileDialog acesta nu este implicit vizibil. Daca
afisarea sa se face cu show() caseta de dialog va fi modala. Daca afisarea se
face cu setVisible(true) va fi nemodala. Dupa selectarea unui fisier ea va fi
facuta automat invizibila.