package elte.java2_utikalauz5.gui;
/**
Példaprogram a {@code BorderLayout} elrendezési stratégia szemléltetésére.

A felhasználói felületen összes lehetséges pozícióba egy nyomógombot raktunk, melyek felirataként a rájuk érvényes elrendezési jellemző (abszolút / relatív formában) jelenik meg.
Bármely gombot megnyomva az eltűnik, így tesztelhetjük az elrendezés viselkedését, ha nincs minden komponenshely kitöltve.
Az utolsónak megmaradt gomb megnyomásakor pedig visszaáll a kezdőállapot.
@link.forrásfájl {@docRoot}/../data/gui/src BorderLayoutTeszt.java
@link.letöltés {@docRoot}/../data/gui BorderLayoutTeszt.jar
@see java.awt.BorderLayout
@since Java 2 Útikalauz programozóknak 5.0
*/
class BorderLayoutTeszt extends LayoutTeszt {
    /**
    A stratégia 5 komponensének beállítása.
    @param gomb az új nyomógomb
    @param felület cél konténer
    @return a nyomógombhoz tartozó elrendezési jellemző, vagy {@code null}
    */
    Object újgomb( java.awt.Container felület, Gomb gomb ) {
        gomb.setVonalaz(false);            //üres relatív komponenshely keresése
        java.awt.BorderLayout bl = (java.awt.BorderLayout)elrendezés;
        if (bl.getLayoutComponent(java.awt.BorderLayout.PAGE_START)==null)
            return java.awt.BorderLayout.PAGE_START;
        if (bl.getLayoutComponent(java.awt.BorderLayout.PAGE_END)==null)
            return java.awt.BorderLayout.PAGE_END;
        if (bl.getLayoutComponent(java.awt.BorderLayout.LINE_START)==null)
            return java.awt.BorderLayout.LINE_START;
        if (bl.getLayoutComponent(java.awt.BorderLayout.LINE_END)==null)
            return java.awt.BorderLayout.LINE_END;
        return java.awt.BorderLayout.CENTER;
    }
    /**
    Gomb feliratának beállítása. A feliratra a gomb abszolút és relatív
    elrendezési pozíciója kerül fel.
    @param gomb a feliratozandó gomb
    */
    @Override
    void feliratoz( Gomb gomb ) {
        gomb.setArány(0);                     //azonos méretűek lesznek a gombok
        java.awt.BorderLayout bl = (java.awt.BorderLayout)elrendezés;
        java.awt.Container felület = gomb.getParent();
        String felirat = bl.getConstraints(gomb).toString();
        if (bl.getLayoutComponent(felület, java.awt.BorderLayout.NORTH)==gomb)
            felirat = "NORTH / "+felirat;
        else if(bl.getLayoutComponent(felület,java.awt.BorderLayout.EAST)==gomb)
            felirat = "EAST / "+felirat;
        else if(bl.getLayoutComponent(felület,java.awt.BorderLayout.WEST)==gomb)
            felirat = "WEST / "+felirat;
       else if(bl.getLayoutComponent(felület,java.awt.BorderLayout.SOUTH)==gomb)
            felirat = "SOUTH / "+felirat;
        gomb.setLabel(felirat);
    }
    /**
    Törölhető nyomógomb lekérdezése.
    @param gomb az ellenőrzött nyomógomb
    @return mindig igaz, mert minden gomb törlődhet.
    */
    @Override
    boolean törlőgomb( Gomb gomb ) {
        return true;
    }
    /**
    Új gombbal bővítést végző nyomógomb lekérdezése.
    Ha már csak egy gomb látható, a többi újra felvételre kerül.
    @param gomb az ellenőrzött nyomógomb
    @return igaz érték az utolsó gomb esetén.
    */
    @Override
    boolean bővítőgomb( Gomb gomb ) {
        if (gomb.getParent().getComponentCount()>1) return false;
        for (int i=3; --i>=0;) újgomb(gomb.getParent());//a többi komponens újra
        return true;                                                 //felvétele
    }
    /**
    Az elrendezési jellemzők nem változnak meg.
    @param gomb a megváltoztatandó nyomógomb
    */
    @Override
    void változógomb( Gomb gomb ) {}
    /** Konstruktor az elrendezési stratégia megadásával. */
    BorderLayoutTeszt() {
        super( new java.awt.BorderLayout(helykihagyás, helykihagyás) );
    }
    /**
    A grafikus felhasználói felület felépítése {@code BorderLayout}-ot 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[]) {
        argumentumKezelés( argumentumok );       //indítási paraméterek kezelése
        felépít( new BorderLayoutTeszt(), felület, argumentumok );
    }
    /**
    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 );
    }
}