Domov / Sociálne siete / Vytvorenie grafického rozhrania v jazyku Java. Vytvorenie grafického rozhrania v Java Graphic libraries Ako vytvoriť rozhranie v Java aplikácii

Vytvorenie grafického rozhrania v jazyku Java. Vytvorenie grafického rozhrania v Java Graphic libraries Ako vytvoriť rozhranie v Java aplikácii

V tomto krátkom článku chcem opísať proces vytvárania malého programu, ktorý podporuje GUI v danom jazyku Java. Predpokladá sa, že čitateľ je oboznámený so základmi jazyka. Java.

A aké nástroje teda potrebujeme:

  • Java Virtual Machine (OpenJDK alebo Oracle JDK)
  • Intellij IDEA (alebo iné IDE pre Java)

Po nainštalovaní potrebného softvéru otvorte IntelliJ IDEA a vytvorte nový projekt: Súbor -> Nový projekt…

Projekt som pomenoval guiBase. Ako môžete vidieť na snímke obrazovky, priečinok src nič neobsahuje, tak v ňom vytvoríme našu hlavnú triedu obsahujúcu funkciu hlavné.

Verejná trieda Main ( public static void main(String args) ( System.out.println("Ahoj, Govzalla!"); ) )

Pozrite si obsah hlavnej triedy vyššie. Teraz môžeme vytvoriť projekt ( vybudovať projekt ) a spustite ho ( Bežať ). Dole vo vašom termináli IDE zobrazí sa vám správa Dobrý deň, Govzalla!. Ale ako ste sami pochopili - nepodporuje GUI.

V tejto fáze už máme funkčný program, ale bez podpory GUI. A teraz v tom istom priečinku src vytvoriť GUI formulár: Nový -> GUI formulár

Otvorte vytvorený GUI formulár, kliknite na jPanel a nastavte jeho identifikátor v poli názov poľa, Opýtal som sa panel.

Potom presuňte myšou do formulára na pravej strane JTextField, JPasswordField a jButton:

Zostáva pridať kód a prepojiť s ním náš formulár. Keď sme pridali formu hlavné okno, trieda bola automaticky vytvorená hlavné okno, táto trieda je triedou vygenerovaného formulára, t.j. táto trieda bude slúžiť všetkým udalostiam danej formy.

Naša trieda okien síce obsahuje potrebné prvky, no ani teraz nemá nič spoločné s GUI, tak ju rozšírme o jFrame a zdediť všetky základné a potrebné funkcie GUI .

AT tento moment máme formu hlavné okno a trieda hlavné okno predĺžený s jFrame. Teraz musíme definovať všetky pridané prvky GUI ako obsah triedy hlavné okno this.getContentPane().add(panel); Potom sa obsah súboru MainWindow.java zmení takto:

Importovať javax.swing.*; public class MainWindow rozširuje JFrame ( private JTextField textField1; private JPasswordField passwordField1; private JButton button1; private JPanel panel; public MainWindow() ( this.getContentPane().add(panel); ) )

Ak sa pokúsite spustiť kód, znova sa vám zobrazí rovnaká správa „Ahoj, Govzalla!“. Ide o to, že sme vytvorili triedu a jej formulár, ale nevytvorili sme inštanciu tejto triedy.

Je čas zmeniť súbor Main.java a pridať tam kód na vytvorenie nášho GUI:

Importovať java.awt.*; public class Main ( public static void main(String args) ( // Vytvorenie inštancie triedy MainWindow MainWindow mainWindow = new MainWindow(); // Zbalenie všetkých prvkov z nášho formulára mainWindow.pack(); // Zmena veľkosti okna mainWindow.setSize( new Dimension(200, 200)); // Zobrazenie vytvoreného okna mainWindow. setVisible(true); ) )

Spustenie kódu

Kliknutím na tlačidlo si všimnete, že program nijako nereaguje. Ide o to, že sme ešte nepridali poslucháča ( Poslucháč) na udalosti ( Diania) tlačidla.

poslucháč udalostí ( poslucháč udalostí) jButton musí ísť o implementáciu adaptéra ActionListener, takže do tela triedy pridajte nasledujúci kód hlavné okno:

Súkromná trieda MyButtonListener implementuje ActionListener ( @Override public void actionPerformed(ActionEvent actionEvent) ( ) )

Metóda akciaVykonaná() spracuje všetky udalosti tlačidla button1, ale najprv musíte stále povedať button1, akú triedu bude spracovávať, takže pridajte nasledujúci kód do konštruktora triedy MainWIndow: this.button1.addActionListener(new MyButtonListener()); Aby náš handler nebol bezvýznamný, pridajte do metódy nasledujúci kód akciaVykonaná():

@Override public void actionPerformed(ActionEvent actionEvent) ( if (textField1.getText().equals(passwordField1.getText())) ( JOptionPane.showMessageDialog(null, "Success"); ) else ( JOptionPane.showMessageDialog(null,Failure) ");))

Teraz bude program správne reagovať na udalosti, samozrejme nie na všetky udalosti. Napríklad, ak sa pokúsite vypnúť program kliknutím na krížik, okno zmizne, ale program bude stále fungovať, pretože. nebola pridaná obsluha udalosti hlavného okna.

Davydov Anton Valerijevič
Študent TSU, Rusko, Tolyatti
Vedecký poradca: Erofeeva E.A.

Používateľské rozhranie v Jave prešlo veľmi tŕnistou cestou formovania a vývoja. Jeho na dlhú dobu obvinený z chamtivosti po systémových zdrojoch, pomalá práca a obmedzená funkčnosť. Príchod .NET s rýchlejšími grafickými komponentmi ešte viac otriasol pozíciou Javy. Takáto konkurencia však iba podnietila vývojárov Java k vývoju a zlepšovaniu grafických knižníc. A v tomto článku uvidíme, čo z toho vzniklo.

Abstraktné okno Toolkit

Abstract Window Toolkit (skrátene AWT) bol prvýkrát vydaný v roku 1995 spoločnosťou Sun Microsystems. Bol to prvý pokus o vytvorenie GUI pre Javu. AWT fungovala ako vrstva, ktorá volala metódy z knižníc napísaných v C. A tieto metódy zase využívali grafické komponenty operačný systém. Na jednej strane takto zostavený program vyzeral podobne ako všetky ostatné programy na použitom operačnom systéme, no na druhej strane ten istý program môže na rôznych operačných systémoch vyzerať úplne inak, čo komplikuje vývoj. V záujme multiplatformnosti bolo navyše potrebné zjednotiť volacie rozhrania komponentov, čo viedlo k trochu oklieštenej funkčnosti. Pomerne skromná je aj zostava komponentov. Napríklad neexistujú žiadne tabuľky a ikony sa nedajú umiestniť do tlačidiel. AWT sa snaží automaticky uvoľniť použité zdroje. To ovplyvňuje výkon a komplikuje architektúru. AWT sa dá ľahko naučiť, ale napísať niečo zložité je ťažké. Teraz sa AWT používa hlavne pre applety. Oracle v súčasnosti povzbudzuje vývojárov, aby prešli na Swing, pretože je bezpečnejší.

Obr.1 - Vzorový program napísaný pomocou AWT v prostredí Windows

Po AWT, v roku 1998, Sun vydal Swing. Je napísaný celý v jazyku Java a na vykresľovanie používa 2D. Swing má oveľa širšiu škálu komponentov ako AWT. Samotné komponenty sa oveľa ľahšie vytvárajú dedením z existujúcich . Zavedená bola aj možnosť používať rôzne štýly a vzhľady. Avšak rýchlosť práce skoré verzie Swing bol dosť nízky a chyby pri písaní programu mohli dokonca viesť k zamrznutiu operačného systému.

Avšak kvôli jednoduchosti učenia a dostupnosti Vysoké číslo dokumentácie, Swing sa stal najpopulárnejším GUI v Jave. Na jej základe sa objavilo mnoho rozšírení, ako napríklad SwingX a JGoodies, ktoré ešte viac uľahčujú vytváranie vizuálne zložitých aplikácií. Všetky moderné programovacie prostredia Java zahŕňajú grafický editor Hojdačka. Aj keď v súčasnosti existujú modernejšie rámce, Swing zostáva najobľúbenejším.


Obr. 2 - Ukážka programu napísaná pomocou Swing

Štandardná súprava nástrojov widgetov

SWT vydalo IBM v čase, keď bol Swing ešte pomalý, a to hlavne kvôli propagácii programovacieho prostredia Eclipse. Podobne ako AWT, aj SWT používa komponenty OS, ale pre rôzne platformy sa používajú rôzne rozhrania interoperability. Pre každý operačný systém sa teda musí dodať samostatná knižnica JAR. To vám umožní lepšie využívať funkcie zodpovedajúce rôznym operačným systémom. A chýbajúce komponenty boli implementované pomocou 2D. Ukázalo sa však, že SWT je ťažšie zvládnuť ako Swing. Okrem toho musí programátor sám implementovať uvoľnenie zdrojov aplikáciou.

Obr.3 - Vzorový program napísaný pomocou Swing

JavaFX bol vydaný v roku 2008 spoločnosťou Oracle. Je umiestnený ako platforma na vytváranie bohatej internetovej aplikácie. Na vykresľovanie sa používa grafický pipeline, ktorý výrazne zrýchľuje aplikáciu. K dispozícii je veľká sada vstavaných komponentov. Existujú aj samostatné komponenty na vykresľovanie grafov. Implementovaná podpora pre multimediálny obsah, animácie a dokonca aj viacdotykové ovládanie. Vzhľad komponentov sa konfiguruje pomocou štýlov CSS. Okrem toho sada nástrojov JavaFX obsahuje možnosť vytvoriť natívny inštalátor pre najpopulárnejšie platformy: exe alebo msi pre Windows, deb alebo rpm pre Linux, dmg pre Mac. Webová stránka Oracle má podrobnú dokumentáciu a veľké množstvo hotových príkladov.

Po opísaní hlavných vlastností a nevýhod vyššie uvedených grafických používateľských rozhraní sa teda môžeme rozhodnúť, pre ktoré úlohy sú najvhodnejšie. Na vytváranie apletov je vhodnejší súbor nástrojov Abstract Window Toolkit. Začiatočník môže odporučiť Swing vzhľadom na skutočnosť, že na internete nájdete obrovské množstvo dokumentácie, a to aj v ruštine. JavaFX je skvelý na vytváranie bohatých internetových aplikácií.

Zoznam použitých zdrojov

    Ryzhenko A. V. Objektovo orientované programovanie: Vzdelávací a metodický komplex pre disciplínu pre špecializáciu 010501 - "Aplikovaná matematika a informatika". – 2007.

    Khabibullin I. Sh. Java 7 (4. vydanie). - BHV-Petersburg, 2012.

    Clarke J., Connors J., Bruno E. J. JavaFX: Vývoj bohatých internetových aplikácií. – Pearson Education, 2009.

    Northover S., Wilson M. Swt: štandardná sada nástrojov widgetov, zväzok 1. - Addison Wesley Professional, 2004.

Grafické rozhranie v Jave prešlo veľmi tŕnistou cestou vývoja a formovania. Dlho bol obviňovaný z pomalej práce, chamtivosti po systémových zdrojoch a obmedzenej funkčnosti.

Java AWT

Prvým pokusom spoločnosti Sun o GUI pre Javu bola knižnica A.W.T.(Abstract Window Toolkit) – súprava nástrojov na prácu s rôznymi prostrediami okien. Sun vytvoril vrstvu Java, ktorá volá metódy z knižníc napísaných v C. Metódy knižnice AWT vytvárajú a používajú grafické komponenty operačného prostredia. Na jednej strane je to dobré, pretože program Java je podobný iným programom v rámci rovnakého operačného systému. Ale pri spustení na inej platforme môžu existovať rozdiely vo veľkostiach komponentov a fontov, ktoré sa pokazia vzhľad programy.

Pre zaistenie multiplatformovosti A.W.T. rozhrania volania komponentov boli zjednotené, čo má za následok mierne zníženú funkčnosť. A súbor komponentov sa ukázal byť dosť malý. Napríklad v AWT nie sú žiadne tabuľky a ikony nie sú podporované v tlačidlách. Avšak balík java.awt je súčasťou Java od prvého vydania a dá sa použiť na vytváranie GUI.

Takže komponenty A.W.T. nerob žiadnu "prácu". Je to len „obal Java“ pre ovládacie prvky operačného systému, na ktorom bežia. Všetky požiadavky na tieto komponenty sú presmerované na operačný systém, ktorý vykonáva všetku prácu.

Použité zdroje A.W.T. sa pokúša uvoľniť automaticky. To mierne komplikuje architektúru a ovplyvňuje výkon. Napísať niečo vážne pomocou AWT bude trochu ťažké. Teraz sa používa iba pre applety.

Základné koncepty SWING

Po A.W.T. Sun vyvinul knižnicu grafických komponentov Hojdačka, napísaný celý v Jave. Na vykresľovanie sa používa 2D, čo so sebou prináša hneď niekoľko výhod. Súprava štandardné komponenty rozmanitosťou a funkčnosťou výrazne prevyšuje AWT. Swing uľahčuje vytváranie nových komponentov dedením od existujúcich a podporuje rôzne štýly a vzhľady.

Tvorcovia novej knižnice používateľského rozhrania Hojdačka„nevynašli koleso“ a ako základ svojej knižnice si vybrali AWT. Samozrejme, nehovorili sme o použití špecifických ťažkých komponentov AWT (reprezentovaných triedami Button, Label a podobne). Iba ľahké komponenty poskytovali požadovanú mieru flexibility a ovládateľnosti. Diagram dedičstva ukazuje vzťah medzi AWT a Swing.

Najdôležitejší rozdiel Hojdačka od AWT je, že komponenty Swing nie sú vôbec spojené s operačným systémom a sú teda oveľa stabilnejšie a rýchlejšie. Takéto komponenty sa v jazyku Java nazývajú odľahčené a pochopenie základných princípov ich fungovania bude dlhou cestou k vysvetleniu, ako funguje Swing.

Swing kontajnery najvyššej úrovne

Ak chcete vytvoriť grafické rozhranie pre aplikáciu, musíte použiť špeciálne komponenty knižnice Swing, nazývané kontajnery. špičková úroveň(nádoby najvyššej úrovne). Sú to okná operačného systému, ktoré sú hostiteľmi komponentov používateľského rozhrania. Kontajnery najvyššej úrovne zahŕňajú okná JFrame a JWindow, dialógové okno JDialog a aplet JApplet (ktorý nie je oknom, ale je určený aj na zobrazenie rozhrania v prehliadači, v ktorom je spustený tento aplet). Kontajnery Swing najvyššej úrovne sú ťažké komponenty a predstavujú výnimku zo všeobecného pravidla. Všetky ostatné komponenty Swing sú ľahké.

Jednoduché Hojdačka príklad rozhrania okna jFrame.

Importovať java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JLabel; public class JFrameTest ( public static void createGUI() ( JFrame frame = new JFrame("Testovací rámec"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("Testovací štítok"); frame.getContentPane(). add(label); frame.setPreferredSize(new Dimension(200, 100)); frame.pack(); frame.setVisible(true); ) public static void main(String args) ( JFrame.setDefaultLookAndFeelDecorated(true); javax. swing.SwingUtilities.invokeLater(new Runnable() ( public void run() ( createGUI(); ) )); ) )

Konštruktér JFrame() bez parametrov vytvorí prázdne okno. Konštruktér JFrame (názov reťazca) vytvorí prázdne okno s nadpisom. Na vytvorenie najjednoduchší program s prázdnym oknom je potrebné použiť nasledujúce metódy:

  • setSize(int width, int height) - definovanie veľkosti okna;
  • setDefaultCloseOperation(int operation) - definícia akcie pri ukončení programu;
  • setVisible (viditeľné booleovské) - zviditeľní okno.

Ak nedefinujete veľkosť okna, potom bude mať nulovú výšku bez ohľadu na to, čo je v ňom. Rozmery okna zahŕňajú nielen „pracovnú“ plochu, ale aj okraje a titulok.

Metóda setDefaultCloseOperation definuje akciu, ktorá sa má vykonať pri „ukončení programu“. Ak to chcete urobiť, odovzdajte konštantu EXIT_ON_CLOSE opísanú v triede JFrame ako parameter operácie.

Štandardne je okno vytvorené neviditeľné. Na zobrazenie okna na obrazovke sa volá metóda setVisible s parametrom true. Ak ho zavoláte s parametrom false, okno sa stane neviditeľným.

GUI java hojdačka príklad vytvorenia okna jFrame znázornené na nasledujúcom obrázku.

Na pripojenie knižnice Hojdačka aplikácia potrebuje importovať knižnicu javax.hojdačka.

Zakaždým, keď sa vytvorí kontajner najvyššej úrovne, či už ide o normálne okno, dialógové okno alebo applet, konštruktor kontajnera vytvorí Koreňový panel JRootPane. Kontajnery Swing najvyššej úrovne zaisťujú, že iné komponenty sa nemôžu „plaziť“ mimo JRootPane.

Koreň bledý JRootPane dodáva kontajnerom vlastnosť "hĺbka", ktorá poskytuje možnosť nielen umiestniť komponenty nad seba, ale v prípade potreby ich aj zameniť, zväčšiť alebo zmenšiť hĺbku komponentov. Táto funkcia je potrebná pri vytváraní aplikácie s viacerými dokumentmi. Hojdačka, ktorého okná predstavujú odľahčené komponenty naukladané na sebe, ako aj rozbaľovacie (kontextové) ponuky a popisky.

Nasledujúci obrázok jasne ukazuje štruktúru koreňového panela JRootPane.

Koreňový panel JRootPane je kontajner, ktorý dedí zo základnej triedy Swing JComponent. V tomto kontajneri je za rozloženie komponentov zodpovedný špeciálny správca rozloženia, implementovaný v internej triede RootPaneLayout. Tento správca rozloženia je zodpovedný za zabezpečenie toho, aby všetky súčasti koreňového panelu boli umiestnené tak, ako by mali byť: vrstvený panel zaberá celý priestor okna; jeho FRAME_CONTENT_LAYER obsahuje panel s ponukami a panel obsahu a nad tým všetkým je priehľadný panel.

Všetky komponenty koreňového panela JRootPane možno získať alebo zmeniť. Má na to sadu metód get/set. Programovo JRootPane možno získať pomocou metódy getRootPane().

Okrem kontajnerov najvyššej úrovne sa koreňový panel používa v interných oknách JInternalFrame vytvorených v aplikáciách s viacerými dokumentmi a umiestnených na „pracovnom stole“ JDesktopPane. To vám umožní zabudnúť na to, že tieto okná sú obyčajné ľahké komponenty a pracovať s nimi, ako keby to boli skutočné kontajnery najvyššej úrovne.

Vrstvený panel JLayeredPane

Na základni koreňového panelu (kontajnera) leží takzvaný vrstvený panel JLayeredPane zaberá všetky dostupné miesto kontajner. Práve v tomto paneli sú umiestnené všetky ostatné časti koreňového panela vrátane všetkých komponentov používateľského rozhrania.

JLayeredPane používa sa na pridanie vlastnosti hĺbky do kontajnera. To znamená, že viacvrstvový panel vám umožňuje usporiadať v kontajneri tretí rozmer, pozdĺž ktorého sa nachádzajú vrstvy (vrstvy) komponentu. V bežnom kontajneri je umiestnenie komponentu určené obdĺžnikom, ktorý ukazuje, akú veľkú časť kontajnera komponent zaberá. Pri pridávaní komponentu do viacvrstvového panelu musíte určiť nielen obdĺžnik, ktorý komponent zaberá, ale aj vrstvu, v ktorej sa bude nachádzať. Vrstva vo vrstvenom paneli je definovaná celým číslom. Čím väčšie číslo definuje vrstvu, tým vyššia je vrstva.

Prvá zložka pridaná do kontajnera je vyššia ako zložky pridané neskôr. Najčastejšie sa vývojár nezaoberá polohami komponentov. Keď pridáte komponenty, ich poloha sa automaticky zmení. Vrstvený panel vám však umožňuje dynamicky meniť polohu komponentov po ich pridaní do kontajnera.

Niektoré komponenty vo veľkej miere využívajú možnosti vrstvených panelov Hojdačka. Sú dôležité najmä pre aplikácie s viacerými dokumentmi, popisy nástrojov a ponuky. Multidokument Hojdačka aplikácie používajú špeciálnu nádobu JDesktopPane("desktop") zdedený z JLayeredPane A, ktorá drží vnútorné krídlové okná. Najdôležitejšie funkcie multidokumentovej aplikácie – umiestnenie „aktívneho“ okna nad ostatné, minimalizovanie okien, ich ťahanie – zabezpečujú mechanizmy vrstveného panelu. Hlavnou výhodou použitia vrstveného panela pre popisky a ponuky je ich rýchlosť. Namiesto vytvorenia nového ťažkého okna pre každý popis alebo ponuku umiestneného nad komponentom, v ktorom bol popis alebo ponuka vyžiadaná, Hojdačka vytvára rýchly ľahký komponent. Tento komponent je umiestnený v dostatočne vysokej vrstve vrstveného panelu vyššie v zásobníku všetkých ostatných komponentov a používa sa na zobrazenie tooltipu alebo ponuky.

Viacvrstvový panel umožňuje organizovať neobmedzený počet vrstiev. Štruktúra JLayeredPane zahŕňa niekoľko štandardných vrstiev, ktoré používajú všetky komponenty Swing, čo vám umožňuje poskytnúť správna práca všetky mechanizmy viacvrstvového panelu. Štandardné vrstvy JLayeredPane sú zobrazené na nasledujúcom obrázku.

Predvolená vrstva sa používa na umiestnenie všetkých konvenčné komponenty, ktoré sa pridávajú do nádoby. Táto vrstva obsahuje vnútorné okná aplikácií s viacerými dokumentmi.

Vrstva Palette je navrhnutá tak, aby hostila okná so sadou nástrojov, ktoré sa zvyčajne prekrývajú so zvyškom rozhrania. Panel JDesktopPane umožňuje vytvárať také okná, ktoré ich umiestnia na túto vrstvu.

Vrstva Modal bola určená na umiestnenie ľahkých modálnych dialógových okien. Takéto dialógové okná však ešte nie sú implementované, takže táto vrstva sa momentálne v Swingu nepoužíva.

Najčastejšie používaná vrstva pre kontextové ponuky a popisy.

Najvyššia vrstva. Určené pre operácie drag and drop ( drag and drop drop), ktorý by mal byť jasne viditeľný v rozhraní programu.

Malý príklad JLayeredPane s vrstveným panelom ukazuje, ako pridať komponenty do rôznych vrstiev a ako sa vrstvy ukladajú na seba:

Importovať javax.swing.*; import java.awt.*; // trieda na kreslenie dvoch typov obrázkov s textovou triedou Figure rozširuje JComponent ( private static final long serialVersionUID = 1L; private Farba farba; súkromný typ int; súkromný text reťazca; // parametre: farba a typ postavy Figure(Color color, int type, String text) ( this.color = color; this.type = type; this.text = text; setOpaque(false); ) public void paintComponent(Graphics g ) ( // kreslenie tvaru g.setColor(color); switch (type) ( case 0: g.fillOval(0, 0, 90, 90); break; case 1: g.fillRect(0, 0, 130, 80 ); break; ) g.setColor(Color.yellow); g.drawString(text, 10, 35); ) ) verejná trieda JLayeredPaneTest rozširuje JFrame ( súkromný statický konečný dlhý serialVersionUID = 1L; verejný JLayeredPaneTest() ( // vytvoriť okno super("Example LayeredTest"); // Skončí po zatvorení okna setDefaultCloseOperation(EXIT_ON_CLOSE); // Definovanie vrstveného panelu JLayeredPane lp = getLayeredPane(); // Vytvorenie troch tvarov Obrázok obrázok1 = nový Obrázok(Color.red , 0, „Vyskakovacie okno obrázka"); Obrázok obrázok 2 = nový obrázok (Farba.modrá, 0, „Obrázok 1"); Obrázok obrázok 3 = nový obrázok (Farba.azúrová, 1, „Obrázok 2"); // nájdite tvary v okne figure1.setBounds (10, 40, 12 0,120); postava2.setBounds(60, 120, 160, 180); postava3.setBounds(90, 55, 250, 180); // pridávanie tvarov do rôznych vrstiev lp.add(obrázok1, JLayeredPane.POPUP_LAYER); lp.add(obrázok2, JLayeredPane.PALETTE_LAYER); lp.add(obrázok3, JLayeredPane.PALETTE_LAYER); // zmena polohy jedného z obrázkov lp.setPosition(figure3, 0); // určenie veľkosti a otvorenie okna setSize(280, 250); setVisible(true); ) public static void main(String args) ( JFrame.setDefaultLookAndFeelDecorated(true); new JLayeredPaneTest(); ) )

Príklad vytvorí malé okno jFrame a do vrstveného panelu sa pridá viacero komponentov obrázku. Ak chcete získať vrstvený panel v akomkoľvek kontajneri Swing najvyššej úrovne, stačí zavolať metódu getLayeredPane().

Pomocná trieda Figure dedí vlastnosti základnej triedy JComponent a umožňuje kresliť dva typy tvarov (kruhy a obdĺžniky) s rôznymi farbami. Parametre na kreslenie tvarov sa nastavujú v konštruktore triedy.

Pri definovaní rozhrania sa vytvoria tri tvary rôznych farieb (dva kruhy a obdĺžnik). Kruh sa umiestni do vrstvy POPUP_LAYER a obdĺžniky sa umiestnia do vrstvy PALETTE_LAYER. Pri umiestňovaní komponentov sa zadávajú ich absolútne súradnice obrazovky, pretože obvyklí správcovia umiestnení nefungujú vo vrstvenom paneli.

Na konci sa poloha jedného z obdĺžnikov zmení tak, aby bol prvý vo vrstve, hoci pôvodne bol pridaný druhý. Po spustení aplikácie uvidíte, že vrstvený panel funguje a úhľadne usporiada komponenty podľa ich vrstiev a pozícií.

AT bežné aplikácie viacvrstvový panel sa zriedka používa priamo, v nich plní svoje funkcie nepostrehnuteľne. Niekedy však pomôže vytvoriť úžasné efekty a nezvyčajné rozhrania, napríklad vám umožní umiestniť animáciu alebo video na bežné komponenty bez toho, aby ste od vývojára vyžadovali nadľudské úsilie a triky.

ContentPane

ContentPane je ďalšou časťou koreňového panela a používa sa na hosťovanie komponentov používateľského rozhrania programu. ContentPane zaberá väčšinu priestoru vrstveného panela (okrem priestoru, ktorý zaberá panel s ponukami). Aby panel obsahu nezakrýval komponenty neskôr pridané do okna, panel s vrstvami ho umiestni na špeciálnu veľmi nízku vrstvu s názvom FRAME_CONTENT_LAYER s číslom -30000.

K panelu obsahu sa dostanete pomocou getContentPane() trieda JFrame. Pomocou metódy add(Component component) k nemu môžete pridať ľubovoľný ovládací prvok. Nahradiť ContentPane akýkoľvek iný panel typu JPanel, môžete použiť metódu setContentPane()

Príklad pridania tlačidla na panel obsahu:

JButton newButton = new JButton(); getContentPane().add(newButton);

V dôsledku toho dostaneme okno s tlačidlom. Tlačidlo zaberá celú dostupnú oblasť okna. Tento efekt nie je užitočný vo všetkých programoch, takže na usporiadanie prvkov na paneli musíte použiť rôzne spôsoby.

Panel obsahu je možné úplne vymeniť. Zvážte nasledujúce Hojdačka príklad panela obsahu ContentPane.

Importovať javax.swing.*; public class ContentPaneReplace rozširuje JFrame ( private static final long serialVersionUID = 1L; public ContentPaneReplace() ( super("Test ContentPane"); setDefaultCloseOperation(EXIT_ON_CLOSE); // Vytvorenie panelu s dvoma tlačidlami JPanel content = new JPanel(); content. add (new JButton("Rodina")); content.add(new JButton("School")); // Nahradenie panela obsahu setContentPane(contents); // Určenie veľkosti okna setSize(200, 100); // Otvorenie okna setVisible (true); ) public static void main(String args) ( JFrame.setDefaultLookAndFeelDecorated(true); new ContentPaneAdd(); ) )

Príklad vytvorí malé okno a panel s dvoma tlačidlami, ktorý je potom setContentPane() nahradí panel s obsahom okna. Namiesto jednoduchšieho sčítania sa teda použila náhrada – volanie metódy add (). Rozhranie okna je zobrazené na nasledujúcej snímke obrazovky.

Panel obsahu ContentPane samo o sebe nie je nič zvláštne. Musíte si len zapamätať, že komponenty sú k nemu pridané.

Transparentné JOptionPane

Priehľadný panel JOptionPane umiestnený ako koreňový panel nad všetkými prvkami vrstveného panelu. Umiestnenie JOptionPane je riešené koreňovým panelom, ktorý umiestni priehľadný panel nad panel s vrstvami tak, aby úplne pokrýval celú oblasť okna vrátane oblasti, ktorú zaberá panel s ponukami.

JOptionPane sa v aplikáciách používa len zriedka, takže v predvolenom nastavení je koreňový panel neviditeľný, čo znižuje zaťaženie systému kreslenia. Majte na pamäti, že ak zviditeľníte priehľadný panel, musíte sa uistiť, že je priehľadný (jeho vlastnosť nepriehľadnosť je falošná), pretože inak zakryje všetky ostatné prvky koreňového panela a zvyšok rozhrania bude neviditeľný.

V akých prípadoch možno použiť priehľadný panel? JOptionPane? Môže sa použiť na definovanie funkcií aplikácie, ktorých implementácia od začiatku vyžaduje značné úsilie. Priehľadný panel je možné prispôsobiť na automatizované testovanie používateľského rozhrania. Udalosti v ňom syntetizované vám umožňujú sledovať stredné výsledky ladenia. Niekedy je tento prístup oveľa efektívnejší ako manuálne testovanie.

Priehľadný panel JOptionPane možno použiť na vytváranie efektných animácií, ktoré „plávajú“ nad všetkými komponentmi vrátane panela s ponukami, alebo na zachytenie udalostí, ak je potrebné niektoré z nich spracovať pred odoslaním do hlavného používateľského rozhrania.

Príklad použitia priehľadného Swing JOptionPane:

// Použitie transparentného JOptionPane import java.awt.Dimension; import java.awt.Font; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.UIManager; public class JOptionPaneTest rozširuje JFrame ( private static final long serialVersionUID = 1L; public static final Font FONT = new Font("Verdana", Font.PLAIN, 11); public static void createGUI() ( JFrame frame = new JFrame("Test JOptionPane "); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.addWindowListener(new WindowListener() ( public void windowActivated(WindowEvent event) () public void windowClosed(WindowEvent event) () public void windowDeactivated(WindowEvent event) () public void windowDeiconified (udalosť WindowEvent) () public void windowIconified (udalosť WindowEvent) () public void windowOpened (udalosť WindowEvent) () public void windowClosing (udalosť WindowEvent) ( Object options = ( "Áno", "Nie!" ); int rc = JOptionPane.showOptionDialog(event.getWindow(), "Zatvoriť okno?", "Potvrdiť", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options); (false);System.exit(0); ) ) )); JLabel label = new JLabel("Pri zatváraní okna použiť priehľadný panel"); frame.getContentPane().add(label); frame.setPreferredSize(new Dimension(350, 80)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); ) public static void main(String args) ( javax.swing.SwingUtilities.invokeLater(new Runnable() ( public void run()) ( UIManager.put("Button.font", FONT); UIManager.put("Label.font ", FONT); JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); createGUI(); ) )); ) )

Ak sa metóde setDefaultCloseOperation odovzdá konštanta JFrame.EXIT_ON_CLOSE, potom po zatvorení okna aplikácia prestane fungovať. V príklade sa tejto metóde odovzdá konštanta JFrame.DO_NOTHING_ON_CLOSE aby sa pri zatvorenom okne nič nestalo. Ukončenie aplikácie v príklade sa vykonáva z poslucháča JFrame WindowListener v metóde zatváranie okien. Po zatvorení okna sa zavolá metóda windowClosing s parametrom udalosti WindowEvent, ktorý v transparentnom Swing JOptionPane otvorí potvrdzovacie dialógové okno.

Nasledujúca snímka obrazovky zobrazuje dve okná aplikácie. Horné hlavné okno. Zatvorením tohto okna sa otvorí dolné dialógové okno na potvrdenie zámeru.

Panel s ponukami JMenuBar

Jednou z dôležitých funkcií používania koreňového panela JRootPane v Swing je potreba umiestniť do okna panel s ponukami. JMenuBar. Serióznu aplikáciu nemožno postaviť bez nejakého druhu menu pre prístup k funkciám programu. Knižnica Swing poskytuje vynikajúce možnosti na vytváranie pohodlných JMenuBars, ktoré sú zároveň ľahkými komponentmi.

Panel s ponukami JMenuBar umiestnený vo vrstvenom paneli v špeciálnej vrstve FRAME_CONTENT_LAYER a zaberá malý priestor v hornej časti okna. Dĺžka panela s ponukami sa rovná veľkosti okna. Šírka panela s ponukami závisí od komponentov, ktoré obsahuje.

Koreňový panel zabezpečuje, že panel obsahu a panel s ponukami JMenuBar neprekrývali. Ak sa panel ponuky nevyžaduje, potom koreňový panel využíva celý priestor na umiestnenie panela obsahu.

Príklady hojdačky

Zdrojové kódy príkladov diskutovaných v texte stránky si môžete stiahnuť.

Myslíme si, že sme vás unavili neustálym rozprávaním o inferenčných programoch. textové správy do konzoly. V tejto lekcii bude táto „pochmúrna“ séria príkladov konečne prerušená: ukážeme si, ako sa vytvárajú okná v Jave, a uvidíte, že je to ľahká úloha. Tu je náš kód (začneme o ňom diskutovať v ďalšej lekcii, pretože má veľa, veľa funkcií, ktoré skutočne potrebujete vedieť):

import java.awt.*;

import javax.swing.*;

verejná trieda MoneyForNothing rozširuje JFrame(

// Konštruktor

verejné MoneyForNothing()(

setTitle("Vitajte v peniazoch za nič");

setSize(new Dimension(600, 400));

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(true);

public static void main(String args)(

MoneyForNothing mfn = new MoneyForNothing();

A tu je rovnaký kód v okne úprav FAR:

Mimochodom, odporúčame okamžite zadať zdrojové kódy programov v kódovaní CP1251 (alebo v bežnej reči v kódovaní Windows): prepínanie kódovaní sa vykonáva stlačením F8 a aktuálne kódovanie sa zobrazuje v stavovom riadku vyššie oblasť úprav.

Vstupný bod zostal nezmenený, ale zvyšok kódu sa zmenil v poradí (ale nebudeme predbiehať). Po skompilovaní a spustení by ste mali vidieť nasledovné:


Gratulujeme - v niekoľkých riadkoch ste vytvorili skutočné grafické okno! Dá sa pretiahnuť, zmeniť veľkosť, zbaliť, rozbaliť a zatvoriť. Je pravda, že naše okno sa ukázalo byť nejako vyblednuté, otvorene povedané - „škaredé“. Okrem toho sa okno zobrazuje v ľavom hornom rohu obrazovky, ale chcel by som, aby bolo v strede - tam je pohodlnejšie ho použiť a takýto výstup vyzerá krajšie. Urobme si teda malé „leštenie“.

Najprv vyriešme druhý problém – centrovanie okna. Tu odporúčame zastaviť sa a zamyslieť sa – ako by ste to urobili vy?

Povedzme, že grafická knižnica Java má metódu setLocation, ktorá ako parametre prijíma súradnice ľavého horného rohu okna (práve z tohto rohu sú vo vnútri okna umiestnené ďalšie grafické prvky). Ale ak si tieto parametre nastavíte „na čelo“, tak z toho takmer určite nič dobré nepríde. na inom monitore s iným rozlíšením nebude okno tam, kde ste ho očakávali. Preto je potrebné súradnice nastaviť inteligentnejšie.

Všetko, čo je potrebné na vycentrovanie okna, je poznať veľkosť samotného okna (mimochodom, sú nastavené v konštruktore a tvoria obdĺžnik s rozmermi 600 x 400 pixelov) a rozlíšenie obrazovky a potom pomocou jednoduchej aritmetiky , vypočítajte potrebné súradnice ľavého horného rohu. To sa dosiahne umiestnením nasledujúceho kódu

Dimension sSize = Toolkit.getDefaultToolkit().getScreenSize(),

fSize = getSize();

if (fSize.height > sSize.height) (fSize.height = sSize.height;)

if (fSize.width > sSize.width) (fSize.width = sSize.width;)

setLocation((sSize.width - fSize.width)/2,

(sSize.height - fSize.height)/2);

hneď za riadkom setSize (nová dimenzia (600, 400)); v konštruktérovi. Vykonajte potrebné zmeny v zdrojovom kóde, skompilujte program a spustite ho na vykonanie; okno by sa malo objaviť v strede obrazovky monitora.

Teraz pár slov o vzhľade okna. Jeho podivný vzhľad je vysvetlený skutočnosťou, že vývojári Java sa snažili zabezpečiť, aby bez ohľadu na hardvérovú platformu a softvérovú „výplň“ všetky grafické prvky (okná, tlačidlá, zoznamy atď.) mali jednotné vykreslenie a jednu farebnú schému. K tomu vyvinuli špeciálny štýl, ktorý nazvali „METAL“. Ak developer neberie osobitné úsilie, potom prvky grafického rozhrania v jeho programoch budú vyzerať presne v tomto štýle, bez ohľadu na vlastnosti konkrétnych počítačov a ich softvér. V niektorých prípadoch to dáva zmysel, ale musíte súhlasiť s tým, že je oveľa lepšie, ak program spustený v systéme Windows vyzerá ako program pre systém Windows a bežiaci na systéme LINUX vyzerá ako program pre linux. To sa dá ľahko dosiahnuť. Všetko, čo je potrebné, je zahrnúť nasledujúci kód do vstupného bodu pred vytvorením inštancie triedy:

try(UIManager.setLookAndFeel

(UIManager.getSystemLookAndFeelClassName());

catch(Exceptionlfe)()

Takto to urobíme. Teraz, po skompilovaní aktualizovanej verzie nášho programu a spustení na spustenie, bude grafické okno vyzerať veľmi „slušne“:


V závislosti od nastavenia vlastností zobrazenia vášho monitora sa bude zobrazenie okna líšiť; používame klasiku Téma Windows xp. Vaše okno môže vyzerať takto:

Uistite sa, že všetko funguje podľa očakávania: okno je zobrazené v strede obrazovky a jeho vzhľad zodpovedá očakávaniam.

Týmto sa končí naša prvá lekcia o GUI. Ukázali sme v ňom „fasádu“, ale úplne ponechali „cez palubu“ množstvo problémov, ktoré sú mimoriadne dôležité a bez ktorých je programovanie v Jave vo všeobecnosti a grafických rozhraní zvlášť nemožné. Týmito problémami sa začneme zaoberať v nasledujúcej lekcii, ale zatiaľ sa pohrajte so zdrojovým kódom, ktorý máte.

Ako cvičenie si vypočítajte napríklad súradnice výstupu nášho okna v pravom dolnom rohu obrazovky a skontrolujte výsledok.

Ďalšie cvičenie je jednoduchšie, ale budete musieť použiť dokumentáciu (treba naozaj niekde začať): urobte to tak, aby ste nemohli meniť veľkosť okna, t.j. do oblasti systémové tlačidlá vyzeral ako na obrázku

(tip: hľadajte informácie o Kľúčové slová javax a JFrame). Tak si vyhrňte rukávy a veľa šťastia!

Komentujte

Môže sa stať, že vygenerované okno bude úplne alebo čiastočne neviditeľné (kvôli tomu, že ste nesprávne vypočítali súradnice jeho zobrazenia na obrazovke). Tlačidlá ovládania okien môžu byť tiež nedostupné. Ako prerušiť aplikáciu bez odstránenia úlohy v "Správcovi úloh" alebo reštartovania počítača?

Keďže spúšťame programy na vykonávanie z FAR, prerušenie vykonávania programu Java sa dosiahne stlačením kombinácie klávesov Control-C (tu „C“ je latinské písmeno, nezamieňajte si ho s podobným písmenom cyriliky).