Windows sunt baza interfeței cu utilizatorul a oricărui sistem de operare. Se separă vizual aplicațiile care rulează în mediul înconjurător. Ferestrele folosite în biblioteca Swing. nu mult diferit de ferestrele bibliotecii AWT, care sunt ferestrele sistemului de operare.
Toate ferestrele Swing bibliotecă - și includ o fereastră JWindow fără margini. rama ferestrei de dialog și JFrame JDialog - reprezintă o excepție de la regula că toate componentele Swing sunt componente ușoare și sunt moștenite de la JComponent clasa de baza. Ferestre swing sunt containere grele-greutate pentru plasarea de componente ușoare pe care sistemul de operare nu vede.
Cele mai utile metode JFrame
Acest grup de metode vă permite să setați poziția și mărimea ferestrei pe ecran. setLocation () specifică poziția ferestrei, setSize () vă permite să specificați dimensiunile acesteia și utilizând setBounds (), puteți specifica imediat un dreptunghi care va lua fereastra pe ecran
Vă permite să "împachetați" componentele din fereastră, astfel încât acestea să preia cât mai mult spațiu de care au nevoie. Componentele când se apelează această metodă intră într-o stare "vizibilă", deși acestea nu apar pe ecran până când nu se solicită una dintre următoarele metode
Afișează fereastra de pe ecran. După apelarea acestor metode, componentele intră într-o stare "vizibilă" și încep să fie întreținute de coada de evenimente. Metoda show () efectuează, de asemenea, validarea componentelor conținute în fereastră
Elimină o fereastră de pe ecran (dacă este vizibilă la momentul apelării metodei) și eliberează toate resursele.
JWindow fereastră
"Parintele" tuturor ferestrelor Swing este o fereastra fara frontiere si fara comenzi JWindow.
Clasa JWindow este o fereastră fără frontieră și fără controale, destinată, de exemplu, închiderii sau mutarea acesteia. Acest tip de fereastră oferă posibilități minime pentru configurația sa, spre deosebire de cea mai frecvent utilizată fereastră JFrame. O fereastră fără graniță nu este adesea necesară în programe. Cu toate acestea, în unele cazuri, aceasta poate fi utilă, mai ales atunci când aveți nevoie să afișați pe scurt orice tip de informații, cum ar fi un program de economisire a programelor sau o sugestie pentru utilizator, și nu aveți nevoie să gestionați fereastra cu aceste informații.
Ferestre JWindow utilizează meniul pop JPopupMenu în situațiile în care fereastra aplicației nu este suficient spațiu pentru a găzdui o componentă ușoară în stratul de POPUP_LAYER panoului multistrat, în cazul în care meniul pop-up localizat în mod implicit. În această situație, în locul componentei ușoare creează o mică fereastră fără ramă JWindow, care poate fi plasat oriunde pe ecran, deoarece aparține sistemului de operare. Această fereastră conține, de asemenea, un meniu pop-up.
Luați în considerare exemplul JWindowTest. Ideea de bază de a folosi o fereastră fără un cadru JWindow este să copiați o porțiune a "imaginii desktop" în fereastra aplicației. Datorită clasei Robot care a apărut în pachetul JDK 1.3, puteți "trage" o copie de pe ecran a desktop-ului.
JWindow Exemplu
În acest exemplu, aplicația moștenește din fereastra JWindow. Este mai convenabil să apelați metodele din această clasă și să adăugați componente în fereastră. Obiectul Robot trebuie să fie creat în blocul de încercare. captura. deoarece crearea acestuia poate fi interzisă de managerul de securitate utilizat de mașina virtuală Java. Cu toate acestea, nu suntem amenințați de încălcarea securității, deoarece creăm o aplicație separată, nu un applet.
Tăiați o parte din imaginea "desktop" folosind metoda createScreenCapture () în afară de locația ferestrei noastre. Apoi, componenta ImageDraw este adăugată la fereastra ferestrei, care afișează imaginile decupate de pe desktop. După ce fereastra este afișată, programul a adormit timp de 10 secunde și apoi își încheie activitatea.
O captură de ecran a desktopului cu interfața ferestrei exemplu JWindow este prezentată în figura următoare.
Înainte de a configura fereastra, exemplul JWindowTest apelează constructorul clasei de bază cu cuvântul cheie super () fără parametri. De fapt, ferestrele fără un cadru JWindow necesită în mod necesar să specificați "părintele" dvs. atunci când creați o fereastră - o fereastră cu un cadru JFrame, care nu poate fi întotdeauna incomod. Mai ales pentru astfel de cazuri, un constructor fără parametri a fost adăugat la clasa JWindow, care creează o fereastră JFrame auxiliară invizibilă și o folosește ca "părinte". După aceea, toate ferestrele fără frontieră, create în acest fel, utilizează numai această fereastră și salvează resurse.
Trebuie de asemenea remarcat faptul că o fereastră JWindow este creată utilizând un constructor fără parametri. nu pot primi focalizare de intrare. Cel mai adesea, acesta este comportamentul necesar (deoarece barele de instrumente, screensaver-urile pop-up și meniurile nu au nevoie de focus). Dacă trebuie să obțineți focalizarea de intrare, utilizați metoda setFocusableWindowState (true).
Fereastra JFrame
Fereastra JFrame moștenește proprietățile clasei JWindow și este cea mai frecvent utilizată fereastră "generală" în aplicații. Principalele diferențe dintre fereastra JFrame și JWindow:
- prezența unui cadru care vă permite să redimensionați fereastra;
- Prezența unui titlu cu numele aplicației (titlul poate fi gol);
- abilitatea de a utiliza meniul sistemului, permițându-vă să manipulați fereastra și aplicația;
- prezența butoanelor de comandă pentru închiderea și închiderea ferestrei.
Pentru a plasa componentele interfeței utilizator în marea majoritate a aplicațiilor, se folosește clasa JFrame. Dezvoltatorii Swing au definit o metodă specială pentru închiderea ferestrei setDefaultCloseOperation, care simplifică esențial această operație. Luați în considerare un simplu exemplu JFrame (JFrameWindowListener) cu procesarea evenimentului de închidere a ferestrei.
Exemplu JFrame
Exemplul creează o fereastră JFrame cu o definiție a antetului în constructorul de clasă de bază. De asemenea, puteți utiliza metoda setTitle () din clasa JFrame pentru a determina linia de titlu a ferestrei.
Înainte de a seta dimensiunea ferestrei și a afișa-o pe ecran, se numește metoda setDefaultCloseOperation (). Această metodă vă permite să specificați ce acțiuni vor fi întreprinse atunci când evenimentul processWindowEvent () este preprocesat înainte de închiderea ferestrei. În mod implicit, se folosește constanta HIDE_ON_CLOSE, care elimină fereastra de pe ecran când este închisă. Puteți utiliza valoarea EXIT_ON_CLOSE, care indică faptul că atunci când închideți fereastra, trebuie să terminați aplicația.
În exemplu, metoda setDefaultCloseOperation este trecută constant DO_NOTHING_ON_CLOSE - nimic de făcut atunci când fereastra este închisă. Un ascultător se alătură ferestrei JFrame, iar procesarea evenimentului ferestrei de închidere se efectuează în metoda windowClosing. Algoritmul de procesare este construit astfel încât fereastra să se închidă la a treia încercare. Numărul de încercare este afișat în eticheta interfeței.
Captură de ecran a desktop-ului cu interfața ferestrei programului nostru este prezentată în figura următoare.
Pentru a determina pictograma ferestrei, trebuie să utilizați metoda setIconImage (). Pictograma este localizată pe butonul ferestrei minimalizate sau în titlul ferestrei în starea normală.
Dintre caracteristicile suplimentare ale unei ferestre cu un cadru JFrame, trebuie menționată capacitatea sa de a "ascunde" decorațiile sale: un cadru și o fereastră de control. Această metodă este JWindow.
Ferestre, WindowListener, WindowFocusListener
Ferestrele Swing (JWindow, JFrame, JDialog) acceptă două tipuri de evenimente:
- WindowListener - vă permite să aflați despre modificările în starea ferestrei;
- WindowFocusListener - raportează despre primirea sau pierderea de către componente a ferestrei de focalizare a intrărilor
O listă completă a metodelor pentru acești ascultători poate fi găsită în documentația Java online.
În interfața Listener a WindowListener, metoda de închidere a ferestrei este utilizată cel mai des. Chemat de sistemul de evenimente atunci când fereastra este închisă. Exemplul de mai sus demonstrează acest lucru.
Prin JFrame este posibil să se conecteze fereastra ascultătorului creat de WindowAdapter (pentru a nu pune în aplicare toate metodele definite în WindowListener interfață) și suprascrie metoda windowClosing, așa cum se arată în următoarele linii de cod:
Când ieșiți din program, în panoul JOptionPane apare o casetă de dialog și utilizatorul este întrebat dacă vrea cu adevărat să renunțe la aplicație. Dacă răspunsul este da, programul se termină.
Caseta de dialog JDialog
Dulapurile de dialog sunt utilizate cel mai adesea în aplicațiile pentru obținerea informațiilor suplimentare pentru a stabili parametrii aplicației, pentru a scoate informații importante despre auxiliar / depanare. Dulapurile de dialog, ca regulă, sunt create modal (modal), blocând accesul la alte ferestre ale aplicației, în timp ce utilizatorul nu termină lucrul cu caseta de dialog modală. Modalitățile de dialog sunt amplasate în partea superioară a ferestrei principale a aplicației. Aspectul casetelor de dialog diferă foarte puțin de ferestrele cu rama JFrame, dar de obicei au mai puține comenzi de ferestre (cel mai adesea există doar un buton de închidere) și nu există meniu de sistem.
În casetele Swing, casetele de dialog sunt implementate de clasa JDialog. JWindow și vă permite să creați atât casete de dialog normale cât și modale. JDialog acceptă același lucru ca JFrame închizând fereastra, dar seamănă cu alte ferestre Swing.
Când creați casete de dialog Swing, trebuie să specificați o "fereastră părinte", care poate fi o fereastră cu un cadru JFrame sau o altă casetă de dialog JDialog. Există, de asemenea, un constructor care nu necesită o fereastră "părinte", dar folosește o fereastră transparentă auxiliară, care a fost menționată în pagina "Fereastră fără JWindow".
Exemplul JDialog de a crea casete de dialog
În exemplu, creați o fereastră cu un cadru JFrame. În panoul de conținut din care sunt plasate două butoane JButton. Făcând clic pe butoane, casetele de dialog sunt create într-o metodă separată createDialog (). Caseta de dialog cu antetul JDialog dat poate fi modală și fără mod. Programul vă permite să creați mai multe ferestre non-modale în același timp, dar numai una modală. Ferestrele non-modale nu blochează fereastra principală a aplicației. Când caseta de dialog este închisă, se folosește constanta DISPOSE_ON_CLOSE, care șterge fereastra după închidere.
Interfața exemplului JDialog este afișată în următoarea imagine.
Biblioteca Swing oferă un set de casete de dialog JDialog standard pentru obținerea și transmiterea informațiilor simple. Înainte de a crea propria casetă de dialog, trebuie să luați în considerare utilizarea unui dialog standard.
Decorarea ferestrelor
Începând cu JDK 1.4, a devenit posibilă configurarea așa-numitei "decorări" vizuale a ferestrelor: un cadru, comenzi pentru ferestre (butoane de închidere sau restrângere), un meniu de sistem. Nevoia de acest lucru a fost resimțită încă de la primele probleme ale lui Swing.
Acum, crearea de interfețe de ferestre diferite este posibilă datorită îmbunătățirilor reprezentării UI a panoului rădăcină al JRootPane. Reprezentantul UI permite crearea cadrelor speciale, a titlului, a meniurilor de sistem și a butoanelor de control al ferestrelor și le așeză în panoul rădăcină în modul necesar, utilizând managerul de localizare specializat. Managerul de locație controlează spațiul panoului rădăcină. În plus, atunci când ferestrele sunt nou proiectate, elementele de sistem ale ferestrei sunt dezactivate.
În clasele JFrame și JDialog există o metodă statică setDefaultLookAndFeelDecorated (), care oferă posibilitatea de a proiecta toate ferestrele create.
Un exemplu de ferestre. Decorarea JDialog
Exemplul creează o fereastră simplă cu o margine și o casetă de dialog. Înainte de a crea ferestrele, se numește metoda setDefaultLookAndFeelDecorated (), ceea ce înseamnă că pentru ferestrele JFrame și JDialog veți avea nevoie de un design special. În plus, dimensiunile ferestrelor sunt determinate și sunt afișate pe ecran.
Ar trebui să acordați atenție metodei panoului rădăcină setWindowDecorationStyle (), care vă permite să personalizați aspectul ferestrei. Dacă fereastra cu chenar are un singur tip de design, casetele de dialog care depind de scopul lor (prezentarea informațiilor, mesajul de eroare etc.) pot părea diferite. În exemplu, sa stabilit că caseta de dialog pe care o creați este necesară pentru a afișa informații și ar trebui să arate astfel.
Interfața exemplului ferestrelor, decorată cu aspectul metalului, este prezentată în următoarea imagine.
Designul special al ferestrelor poate fi util ca un mijloc de a controla complet aspectul aplicației dvs., chiar până la ferestre. Creând propriul dvs. UI-reprezentant al panoului rădăcină, puteți oferi aplicației dvs. un aspect unic, ușor de recunoscut de către utilizatori.
Codurile sursă ale exemplelor luate în considerare în textul paginii pot fi descărcate aici (3,54 KB).