package elte.java2_utikalauz5.gui; /** Példaprogram a teljes {@code TesztLayout} elrendezési stratégia görgetett szemléltetésére. @link.forrásfájl {@docRoot}/../data/gui/src ScrollPaneTeszt.java @link.letöltés {@docRoot}/../data/gui ScrollPaneTeszt.jar @see java.awt.TesztLayout @since Java 2 Útikalauz programozóknak 5.0 */ class ScrollPaneTeszt extends LayoutTeszt { /** Görgethető panelek látható ablakméretéhez viszonyított méretarányokkal dolgozó elrendezési stratégia. */ static class Layout extends TesztLayout { /** Konstruktor átirányítása a szülőhöz. @param függőleges az elrendezés függőleges / vízszintes iránya @param igazítás Csoporton belüli igazítás. Negatív érték a csoport elejére, 0 középre, pozitív pedig a csoport végére igazít. @param vhely Vízszintes irányban komponensek közti helykihagyás. A konténer bal és jobb széle mentén fele ekkor térköz lesz kihagyva. @param fhely Függőleges irányban komponensek közti helykihagyás. A konténer alsó és felső széle mentén fele ekkor térköz lesz kihagyva. */ private Layout( boolean függőleges, int igazítás, int vhely, int fhely ){ super(függőleges, igazítás, vhely, fhely); } /** Konténerelemek arányos méretezéséhez felhasználandó viszonyítási méret. @param pKonténer az elrendezendő konténer @return görgethető panel látható ablakmérete. */ @Override protected java.awt.Dimension viszonyításiMéret( java.awt.Container pKonténer) { if (pKonténer.getParent() instanceof java.awt.ScrollPane) return ((java.awt.ScrollPane)pKonténer.getParent()).getViewportSize(); return super.viszonyításiMéret( pKonténer ); } } /** A felhasználandó görgethető panel */ private java.awt.ScrollPane görgethetőpanel = new java.awt.ScrollPane( java.awt.ScrollPane.SCROLLBARS_ALWAYS) { private final static long serialVersionUID = 15L; //Verziószám private int sorokszáma = 1; //egérrel görgetett sorok száma private void beállít() { //görgetősávok oldalanként lapozzanak java.awt.Adjustable görgetősáv = getVAdjustable(); görgetősáv.setBlockIncrement( görgetősáv.getVisibleAmount() ); görgetősáv.setUnitIncrement( görgetősáv.getVisibleAmount() / sorokszáma ); görgetősáv = getHAdjustable(); görgetősáv.setBlockIncrement( görgetősáv.getVisibleAmount() ); görgetősáv.setUnitIncrement( görgetősáv.getVisibleAmount() / sorokszáma ); } @Override public void doLayout() { //elrendezés elvégzése után super.doLayout(); //görgetősávok beállítása beállít(); } @Override //görgetett sorok számának elmentése protected void processMouseWheelEvent( java.awt.event.MouseWheelEvent mwe) { if (sorokszáma!=mwe.getScrollAmount()) { sorokszáma=mwe.getScrollAmount(); beállít(); } super.processMouseWheelEvent( mwe ); } }; /** Konstruktor az elrendezési stratégia megadásával. @param függőleges az elrendezés függőleges(igaz) / vízszintes(hamis) iránya @param igazítás Csoporton belüli igazítás. Negatív érték a csoport elejére, 0 középre, pozitív pedig a csoport végére igazít. @param vhely Vízszintes irányban komponensek közti helykihagyás. A konténer bal és jobb széle mentén fele ekkor térköz lesz kihagyva. @param fhely Függőleges irányban komponensek közti helykihagyás. A konténer alsó és felső széle mentén fele ekkor térköz lesz kihagyva. */ ScrollPaneTeszt(boolean függőleges,int igazítás,int vhely,int fhely) { super( new Layout(függőleges, igazítás, vhely, fhely) ); } /** Gombnyomás kezelése. @param gombnyomás a gombnyomás eseményobjektuma */ @Override public void actionPerformed( java.awt.event.ActionEvent gombnyomás ) { super.actionPerformed( gombnyomás ); görgethetőpanel.getParent().validate(); //görgetősávok újrarendeztetése } /** Grafikus felületet tartalmazó konténer felkészítése a teszthez. A felületet egy görgethető panelbe ágyazzuk. @param felület az eredeti konténer @return a felkészített konténer */ @Override java.awt.Container felület(java.awt.Container felület) { felület.setPreferredSize(felület.getMinimumSize()); //minimálméret felület.setLayout( new java.awt.BorderLayout() ); felület.add( görgethetőpanel ); //görgethető panelbe ágyazás felület = new java.awt.Panel(null); görgethetőpanel.add( felület ); return super.felület(felület); } /** GUI felépítése görgethető {@code TesztLayout}-ot használva. Indítási paraméterként a csoportigazítás (Elejére, Középre, véGére) adható. @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[]) { int csoportigazítás = -1; //igazítás a csoport elejére for (String argumentum : argumentumok) { //paraméterek feldolgozása if (argumentum.startsWith("e")) csoportigazítás = -1; else if (argumentum.startsWith("k")) csoportigazítás = 0; else if (argumentum.startsWith("g")) csoportigazítás = 1; } argumentumKezelés( argumentumok ); felépít( new ScrollPaneTeszt( függőleges, csoportigazítás, helykihagyás, helykihagyás), 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 ); } }