390 likes | 724 Views
INTERFEŢE GRAFICE. interfata grafica cu utilizatorul (GUI) se refera la toate tipurile de comunicare vizuala între un program si utilizatorii sai. Biblioteca de clase care ofera servicii grafice - java.awt AWT = Abstract Window Toolkit
E N D
interfata grafica cu utilizatorul (GUI) se refera la toate tipurile de comunicare vizuala între un program si utilizatorii sai. • Biblioteca de clase care ofera servicii grafice - java.awt • AWT = Abstract Window Toolkit • Swing - parte dintr-un proiect mai amplu numit JFC (Java Foundation Classes) creat in urma colaborarii dintre Sun, Netscape si IBM, Swing se bazeaza pe modelul AWT, extinzand functionalitatea acestuia si adaugand sau inlocuind componente pentru dezvoltarea aplicatiilor GUI
AWT (Abstract Window Toolkit) Crearea unei aplicaţii grafice presupune: Design • Crearea unei suprafeţe de afişare (cum ar fi o fereastră) pe care vor fi aşezate obiectele grafice care servesc la comunicarea cu utilizatorul (butoane, controale de editare, texte, etc); • Crearea şi aşezarea obiectelor grafice pe suprafaţa de afişare în poziţiile corespunzătoare; Funcţionalitate • Definirea unor acţiuni care trebuie să se execute în momentul când utilizatorul interacţionează cu obiectele grafice ale aplicaţiei; • "Ascultarea" evenimentelor generate de obiecte în momentul interactiunii cu utilizatorul şi executarea acţiunilor corespunzătoare aşa cum au fost ele definite.
Button - butoane cu eticheta formata dintr-un text pe o singura linie; • Canvas - suprafata pentru desenare; • Checkbox - componenta ce poate avea doua stari; mai multe obiectede acest tip pot fi grupate folosind clasa CheckBoxGroup; • Choice - liste în care doar elementul selectat este vizibil şi care sedeschid la apăsarea lor; • Container - superclasa tuturor suprafeţelor de afişare; • Label - etichete simple ce pot conţine o singură linie de text needitabil; • List - liste cu selecţie simplă sau multiplă; • Scrollbar - bare de defilare orizontale sau verticale; • TextComponent - superclasa componentelor pentru editarea textului:TextField (pe o singură linie) şi TextArea (pe mai multe linii).
Clasa Component Poziţie • getLocation, getX, getY, getLocationOnScreen • setLocation, setX, setY Dimensiuni • getSize, getHeight, getWidth • setSize, setHeight, setWidth Dimensiuni şi poziţie • getBounds • setBounds Culoare (text şi fundal) • getForeground, getBackground • setForeground, setBackground Font • getFont • setFont VizibilitateInteractivitate • setVisiblesetEnabled • isVisibleisEnabled
Suprafeţe de afişare– clasa Container Clasa Container conţine metodele comune tututor suprafeţelor de afişare. • add - permite adăugarea unei componente pe suprafaţa de afişare. • remove - elimină o componentă de pe container; • setLayout - stabileşte gestionarul de poziţionare al containerului • getInsets - determină distanţa rezervată pentru marginile suprafeţei de afişare; • validate - forţează containerul să reaşeze toate componentele sale. (Aceasta metodă trebuie apelată explicit atunci când adăugăm sau eliminămcomponente pe suprafaţa de afişare după ce aceasta a devenit vizibilă)
Clasa Window • Reprezintă o fereastră top level fără titlu, meniuri sau margini. Metode: • void pack() – • void show() – • void dispose() – Clasa Frame • Este subclasă a lui Window. Opţional poate fi redimensionabilă, poate fi mobilă. Este o fereastră top level ce poate avea o bară de titlu, un icon, meniuri. De obicei este baza ierarhiei de componente. Are doi constructori: • Frame () • Frame(String titlu) Iniţial un frame este invizibil. Pentru a construi un GUI se procedează de obicei în felul următor: • se construieşte un frame: Frame frame = new Frame(“Titlu”); • se construieşte ierarhia de componente adăugând panele şi alte controale GUI: frame.add(new Button(“OK”)); • se setează mărimea frame-ului folosindu-se metoda set(): frame.setSize(200, 300); • se apelează metoda pack(): frame.pack(); • se face vizibil frame-ul: frame.setVisible(true);
Metode • Mosteneste metodele claselor Container si Window, la care se adauga si metode specifice acestei clase, cel mai frecvent utilizate: • public String getTitle() - intoarce titlul cadrului; • public void setTitle(String title) - pune cadrului un nou titlu; • public Image getIconImage() - intoarce imaginea pictogramei cadrului (aplicatiei); • public void setIconImage(Image image) - pune pictograma cadrului; • public MenuBar getMenuBar() - intoarce bara de menu continuta in cadru; • public void setMenuBar(MenuBar menu) - pune cadrului o bara de menu; • public boolean isResizable() - intoarce true daca acest cadru poate fi redimensionat cu mouse-ul; • public void setResizable(boolean resizable) - seteaza daca acest cadru poate sau nu sa fie redimensionat cu mouse-ul.
ClasaDialog Diferenta intre ferestrele de dialog si ferestrele normale (obiectede tipFrame) Ferestrele de dialog pot fi de doua tipuri: • modale: care blocheaza accesul la fereastra parinte in momentul deschiderii lor - de exemplu, ferestre de introducere a unor date, de alegere a unui fisier în vederea deschideriii, de selectare a unei optiuni, mesaje de avertizare, etc; • nemodale: care nu blocheaza fluxul de intrare catre fereastra parinte - de exemplu, ferestrele pentru cautarea unui cuvant intr-un fisier. Implicit o fereastra de dialog este nemodala si invizibila.
Constructorii clasei Dialog sunt: Dialog(Frame parinte) Dialog(Frame parinte, String titlu) Dialog(Frame parinte, String titlu, boolean modala) Dialog(Frame parinte, boolean modala) Dialog(Dialog parinte) Dialog(Dialog parinte, String titlu) Dialog(Dialog parinte, String titlu, boolean modala)
Metode: • Clasa Dialog mosteneste metodele claselor Container si Window, avand si metode specifice: • public boolean isModal() - returneaza true daca fereastra este modala; • public void setModal(boolean b) - seteaza daca fereastra este sau nu modala; • public String getTitle() - returneaza titlul ferestrei; • public void setTitle(String title) - pune ferestrei un (nou) titlu; • public boolean isResizable() - returneaza true daca fereastra poate fi redimensionata cu mouse-ul; • public void setResizable(boolean resizable) - seteaza daca fereastra poate sau nu sa fie redimensionata.
Controale GUI • Componentele control sunt elemente primare într-o GUI ce permit interacţiunea cu utilizatorul. Sunt subclase concrete ale clasei Component.
Gestionar de poziţionare (layout manager) • un obiect care controlează dimensiunea şi aranjarea (poziţia) componentelor unui container. • Fiecare obiect de tip Container(Applet, Frame, Panel, etc.) are asociat un obiect care se ocupă cu dispunereacomponentelor pe suprafaţa sa şi anume gestionarul său de poziţionare. • Toate clasele care instanţiaza obiecte pentru gestionarea poziţionării implementează interfaţa LayoutManager.
Atasarea explicita a unui gestionar de pozitionare la un container se face cu metoda setLayout a lasei Container. • Secventa de atasare a unui gestionar pentru un container este: FlowLayout gestionar = new FlowLayout(); container.setLayout(gestionar); sau: container.setLayout(new FlowLayout());
metoda setLayout– ataşarea explicită a unui gestionar de poziţionare la un container Ex. FlowLayout gestionar = new FlowLayout(); Container.setLayout(gestionar); • metoda getLayout– furnizeaza gestionarul utilizat • metodele getPreferredSize, getMinimumSize şi getMaximumSize– returnează dimensiuneaimplicită a componentei respective şi limitele în afara cărora componentanu mai poate fi desenată. Ex. container.setLayout(null); Button b = new Button("Buton"); b.setSize(10, 10); b.setLocation (0, 0); container.add(b);
Gestionarul de poziţionare FlowLayout Constructori: • FlowLayout() • FlowLayout(int aliniere) – aliniere în rând (implicit centrat) • FlowLayout(int aliniere, int gapOrizontal, int gapVertical) – spaţiu între componente (implicit 5 pixeli pe ambele direcţii) • public static final int LEFT • public static final int CENTER • public static final int RIGHT
import java.awt.*; publicclass TestLayout { publicstaticvoid main(String args[]) { Frame f = new Frame("Flow Layout"); f.setLayout(new FlowLayout()); Button b1 = new Button("Button 1"); Button b2 = new Button("2"); Button b3 = new Button("Button 3"); Button b4 = new Button("Long-Named Button 4"); Button b5 = new Button("Button 5"); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.pack(); f.setVisible(true); } }
Gestionarul de poziţionare BorderLayout • Este gestionarul implicit pentru toate containerele care descind din clasa Window, deci este gestionarul implicit al ferestrelor Java. • BorderLayout() • BorderLayout(int gapOrizontal, gapVertical) – gap implicit zero • Component add(Component c) • void add(Component c, Object constrangeri) • public static final String NORTH • public static final String SOUTH • public static final String EAST • public static final String WEST • public static final String CENTER - implicit
import java.awt.*; • public class TestBorderLayout { • public static void main(String args[]) { • Frame f = new Frame("Border Layout"); • f.setLayout(new BorderLayout());//poate sa lipseasca • f.add(new Button("Nord"), BorderLayout.NORTH); • f.add(new Button("Sud"), BorderLayout.SOUTH); • f.add(new Button("Est"), BorderLayout.EAST); • f.add(new Button("Vest"), BorderLayout.WEST); • f.add(new Button("Centru"), BorderLayout.CENTER); • f.pack(); • f.setVisible(true); • } • }
Gestionarul de pozitionare GridLayout • Gestionarul GridLayout organizează containerul ca un tabel cu rânduri şi coloane • Numărul de linii şi coloane poate fi specificat în constructorul gestionarului, dar poate fi modificat şi ulterior prin metodele setRows şi setCols. • GridLayout() – o linie cu oricâte coloane • GridLayout(int linii, int coloane) • GridLayout(int linii, int coloane, int gapOrizontal, int gapVertical) – gap implicit este zero
import java.awt.*; • public class TestGridLayout { • public static void main(String args[]) { • Frame f = new Frame("Grid Layout"); • f.setLayout(new GridLayout(3, 2)); • f.add(new Button("Button 1")); • f.add(new Button("2")); • f.add(new Button("Button 3")); • f.add(new Button(“Long-Named Button 4")); • f.add(new Button("Button 5")); • f.pack(); • f.setVisible(true); • } • }
Gestionarul de pozitionare CardLayout • Clasa dispune de metode prin care să poată fi afişată o anumită componentă din pachet, sau să se poată parcurge secvenţial pachetul. • CardLayout() • CardLayout(int gapOrizontal, int gapVertical) – implicit zero • Adăugarea de componente la container se face cu add(); CardLayout defineşte metode pentru tratarea componentelor: • void first(Container parent) • void next(Container parent) • void previous(Container parent) • void last(Container parent) • void show(Container parent, String name)
Gestionarul GridBagLayout • suprafaţa de afişare este un tabel • Spre deosebire de GridLayout,o componentă poate ocupa mai multe celule adiacente, chiar de dimensiunidiferite • Pentru a specifica modul de afişare a unei componente, acesteia i se asociază un obiect de tip GridBagConstraints, în care se specifică diferiteproprietăţi ale componentei referitoare la regiunea sa de afişare şi la modul în care va fi plasatăîn această regiune. • Legătura dintre o componentăşi unobiect GridBagConstraints se realizează prin metoda setConstraints
Gestionarul de pozitionare GridBagLayout Ex. GridBagLayout gridBag = new GridBagLayout(); container.setLayout(gridBag); GridBagConstraints c = new GridBagConstraints(); . . . //se specifica proprietatile referitoare la afişarea unei componente gridBag.setConstraints(componenta, c); container.add(componenta);
Cele mai utilizate tipuri de constrângeri pot fi specificate prin intermediulurmătoarelor variabile din clasa GridBagConstraints: • gridx, gridy - celula ce reprezintă colţul stânga sus al componentei; • gridwidth, gridheight - numărul de celule pe linie şi coloană pe care va fi afişată componenta; • fill – folosită pentru a specifica dacă o componentă va ocupa întregspaţiul pe care îl are destinat; valorile posibile sunt HORIZONTAL, VERTICAL,BOTH, NONE; • insets - distanţele dintre componentăşi marginile suprafeţei sale deafişare; • anchor - folosită atunci când componenta este mai mică decât suprafaţa sa de afişare pentru a forţa o anumită dispunere a sa: nord, sud, est,vest, etc. • weigthx, weighty - folosite pentru distribuţia spaţiului liber; uzualau valoarea 1; Ex_gridbaglayout.doc
Gruparea componentelor • Gruparea componentelor se face în panel-uri. • Un panel este cel mai simplu model de container. El nu are o reprezentarevizibilă, rolul său fiind de a oferi o suprafaţă de afişare pentru componentegrafice, inclusiv pentru alte panel-uri. Aranjarea in panel: • gruparea componentelor ”înfrăţite” (care nu trebuie să fie desparţitede gestionarul de poziţionare al ferestrei) în panel-uri; • aranjarea componentelor unui panel, prin specificarea unui gestionarde poziţionare corespunzător; • aranjarea panel-urilor pe suprafaţa ferestrei, prin specificarea gestionaruluide poziţionare al ferestrei.
import java.awt.*; public class AButon{ public static void main (String args[] ){ F f = new F("Exemplul 1"); f.setSize(500,300); f.setVisible(true); } } class F extends Frame{ F(String s) { setTitle(s); setLayout(new GridLayout(2,2)); Panel border=new Panel(); border.setLayout(new BorderLayout()); border.add("North",new Button("Nord")); border.add("South",new Button("Sud")); border.add("East",new Button("Est")); border.add("West",new Button("Vest")); add(border); Panel flow=new Panel(); flow.setLayout(new FlowLayout()); flow.add(new Button("Buton 1")); flow.add(new Button("Buton 2")); flow.add(new Button("Buton 3")); flow.add(new Button("Buton 4")); add(flow); Panel grid=new Panel(); grid.setLayout(new GridLayout(2,2)); grid.add(new Button("Buton 1")); grid.add(new Button("Buton 2")); grid.add(new Button("Buton 3")); grid.add(new Button("Buton 4")); add(grid); add(new Button("Buton")); } }