package elte.java2_utikalauz5.gui; /** Példaprogram az AWT ablakai használatának szemléltetésére. Bár még nem rendelkezik grafikus komponensekkel a felhasználói felületén, viszont mégis vezérelhető interaktív módon csak különféle ablakokat felhasználva! A program indulásakor a képernyő közepére kirakunk egy köszöntő ablakot, majd felépítjük a főablak felhasználói felületét, ami pillanatnyilag elég üres. A felépítés időigényességét tízmásodperces várakozással szimuláljuk, ezalatt a (szintén üres) köszöntő képernyő színeit felcserélve annak villogását érjük el. A program főablakának megjelenésekor eltüntetjük a köszöntő ablakot, és egyből egy (.java} kiterjesztésű) fájl kiválasztását kérjük a felhasználótól beolvasásra. Ezt elvégezve a főablak fejlécében megjelenik a kiválasztott fájl neve. Az üres felhasználói felületünk bezárásakor újra megjelenik a fájlkiválasztó dialógusablak, ám most annak mentési altípusa látható. Ha sikeresen megadtunk egy fájlnevet, programunk valóban be is fog fejeződni, ellenkező esetben visszajutunk az (üres) főablakunkhoz. @link.forrásfájl {@docRoot}/../data/gui/src AblakTeszt.java @link.letöltés {@docRoot}/../data/gui AblakTeszt.jar @see java.awt.Window @see java.awt.FileDialog @since Java 2 Útikalauz programozóknak 1.3 */ class AblakTeszt extends java.awt.event.WindowAdapter implements java.io.FilenameFilter { /** fájlkiválasztó dialógusdoboz */ private java.awt.FileDialog fájldialógus; /** GUI-t felépítő és közben a beköszönő ablakot villogtató konstruktor. @param főablak A felhasználói felületet tartalmazó ablak */ private AblakTeszt(java.awt.Frame főablak) { java.awt.Window előablak=new java.awt.Window(főablak); //köszöntő ablak // ... //köszöntő ablak felépítése előablak.setSize(new java.awt.Dimension(100, 100)); //és méretezése előablak.setLocationRelativeTo( null); //középre helyezés előablak.setVisible(true); //és megjelenítése fájldialógus = new java.awt.FileDialog( főablak );//dialógus létrehozása // ... //grafikus felhasználói felület felépítése try { //időigényességének szimulálása java.awt.Color csereszín; //a köszöntő ablak színeinek csereberéje for (int i=10; --i>=0;) { csereszín = előablak.getForeground(); előablak.setForeground( előablak.getBackground() ); előablak.setBackground( csereszín ); Thread.sleep(1000); } } catch (Exception e) {}; előablak.dispose(); //beköszontő ablak bezárása } /** Az ablak első megjelenítésekor fájlnévbekérés. @param ablakesemény Az ablak megjelenítését jelző esemény */ public void windowOpened( java.awt.event.WindowEvent ablakesemény ) { fájldialógus.setMode(java.awt.FileDialog.LOAD);//fájlkiválasztó dialógus fájldialógus.setTitle( "Fájlbetöltés" ); //előkészítése fájldialógus.setFilenameFilter(this); //fájlnévszűrés fájldialógus.setVisible(true); //dialógus megjelenítése String fájl = fájldialógus.getFile(); //kiválasztott fájlnév if (fájl==null) fájl="(nincs kiválasztott fájl)"; //az ablak fejlécébe ((java.awt.Frame)ablakesemény.getWindow()).setTitle(fájl); } /** Az ablak bezárásakor fájlnévbekérés. @param ablakesemény Az ablak bezátását jelző esemény */ public void windowClosing( java.awt.event.WindowEvent ablakesemény ) { fájldialógus.setMode(java.awt.FileDialog.SAVE);//fájlkiválasztó dialógus fájldialógus.setTitle( "Fájlmentés" ); //előkészítése fájldialógus.setFilenameFilter(null); //nincs fájlnévszűrés fájldialógus.setVisible(true); //dialógus megjelenítése if (fájldialógus.getFile()!=null) System.exit(0);//kiválasztásra kilépés } /** Fájlnévszűrés .java kiterjesztésre. @param könyvtár Az aktuális könyvtár @param fájl Az aktuális fájlnév @return Csak a .java kiterjesztést fogadjuk el. */ public boolean accept( java.io.File könyvtár, String fájl ) { return fájl.endsWith(".java"); } /** A tesztprogram indítása. @param argumentumok Az indításkor megadott paraméterek. */ public static void main( String[] argumentumok ) { java.awt.Frame főablak = new java.awt.Frame( "AblakTeszt" ); AblakTeszt teszt = new AblakTeszt( főablak ); //GUI felépítése főablak.addWindowListener( teszt ); //ablak események figyelése főablak.setSize(200, 200); //fix méret beállítása főablak.setLocationByPlatform( true ); //elhelyezés az ablakozó szerint főablak.setVisible(true); //főablak megjelenítése } /********* Bezárható és automatikusan optimális méretű főablak. ***********/ public static class Ablak extends java.awt.Frame { /** Verziószám */ private final static long serialVersionUID = 15L; /** Konstruktor az ablak feliratával. @param felirat Az ablak felirata */ public Ablak( String felirat ) { super( felirat ); //ablakesemények figyelése enableEvents(java.awt.AWTEvent.WINDOW_EVENT_MASK); } /** Ablak megjelenítésekor optimális méret felvétele, ha még nincs méretezve @param látható Ablak megjelenítése (true) vagy eltüntetése (false) */ @Override public void setVisible( boolean látható ) { if (látható && getWidth()==0) pack(); //optimális méretezés super.setVisible( látható ); } /** Ablakesemény feldolgozása, bezáráskor kilépés. @param esemény A fellépett esemény */ @Override protected void processWindowEvent(java.awt.event.WindowEvent esemény) { if (esemény.getID() == esemény.WINDOW_CLOSING) System.exit(0); super.processWindowEvent( esemény ); } } }