package elte.java2_utikalauz5.gui; /** Példaprogram a kézi elrendezési stratégia szemléltetésére. Az elrendezés elve az, hogy minden gomb az optimális méretében jelenik meg, pozíciójuk pedig teljesen véletlenszerű, de úgy, hogy a gomb egésze látszódjon a felületen (tehát nem lógnak ki egyik irányban sem). @link.forrásfájl {@docRoot}/../data/gui/src NullLayoutTeszt.java @link.letöltés {@docRoot}/../data/gui NullLayoutTeszt.jar @since Java 2 Útikalauz programozóknak 5.0 */ class NullLayoutTeszt extends LayoutTeszt implements java.awt.event.HierarchyListener { /** A stratégia nem kezel elrendezési jellemzőket. @param felület cél konténer @param gomb az új nyomógomb @return mindig {@code null} */ @Override Object újgomb( java.awt.Container felület, Gomb gomb ) { gomb.setVonalaz( false ); //nincs igazítás return null; } /** A stratégia nem kezel elrendezési jellemzőket. @param gomb a megváltoztatandó nyomógomb */ @Override void változógomb( Gomb gomb ) {} /** A kézi elrendezési stratégia megvalósítása. A komponensek mindig optimális méretűek, pozíciójuk pedig véletlenszerű, de teljes egészükben láthatóak. @param felület az elrendezendő konténer */ private void elrendez(java.awt.Container felület) { java.awt.Insets keret = felület.getInsets(); //keretméret lekérdezése int összszélesség = felület.getWidth()-keret.left-keret.right; int összmagasság = felület.getHeight()-keret.top-keret.bottom; for (java.awt.Component komponens : felület.getComponents()) { java.awt.Dimension méret = komponens.getPreferredSize(); int szélesség = összszélesség-méret.width; if (szélesség<=1) continue; int magasság = összmagasság-méret.height; if (magasság<1) continue;//maradék helyre véletlenszerúen pozícionál komponens.setBounds(véletlen.nextInt(szélesség)+keret.left, véletlen.nextInt(magasság)+keret.top, méret.width,méret.height); } } /** Gombnyomás kezelése után újrarendezés. @param gombnyomás a gombnyomás eseményobjektuma */ @Override public void actionPerformed( java.awt.event.ActionEvent gombnyomás ) { java.awt.Container felület = ((Gomb)gombnyomás.getSource()).getParent(); super.actionPerformed( gombnyomás ); elrendez( felület ); } /** Megjelenítéskor újrarendezés. @param esemény a komponenshierarchia változási eseménye */ public void hierarchyChanged( java.awt.event.HierarchyEvent esemény ) { if ((esemény.getChangeFlags() & java.awt.event.HierarchyEvent. SHOWING_CHANGED)!=0 && esemény.getComponent().isShowing()) elrendez((java.awt.Container)esemény.getComponent()); } /** Konstruktor a kézi elrendezési stratégia beállításával. */ NullLayoutTeszt() { super( null ); } /** A grafikus felhasználói felület felépítése kézi elrendezést használva. @param felület A felhasználói felületet tartalmazó konténer. @param argumentumok Az indításkor megadott paraméterek. */ public static void felépít(java.awt.Container felület, String argumentumok[]) { NullLayoutTeszt teszt = new NullLayoutTeszt(); felület = felépít( teszt, felület, argumentumok ); felület.setSize( felület.getMinimumSize() ); //kezdőméret beállítása felület.setPreferredSize( felület.getMinimumSize() ); if (felület.isShowing()) teszt.elrendez( felület ); else felület.addHierarchyListener( teszt ); } /** A tesztprogram indítása külön ablakban. @param argumentumok Az indításkor megadott paraméterek. */ public static void main( String[] argumentumok ) { felépít( null, argumentumok ); } }