package elte.java2_utikalauz5.gui; /** Többsoros címke saját példaprogrammal.

@link.forrásfájl {@docRoot}/../data/gui/src TobbSorosCimke.java @link.letöltés {@docRoot}/../data/gui TobbSorosCimke.jar @since Java 2 Útikalauz programozóknak 5.0 */ public class TobbSorosCimke extends java.awt.Component { /** Verziószám. */ private static final long serialVersionUID = 15L; /** Konstruktor a címke feliratával. Az igazítás ekkor balra történik. @param felirat A címke felirata. */ public TobbSorosCimke( String felirat ) { this( felirat, java.awt.Label.LEFT ); } /** Konstruktor a címke feliratával és igazításával. @param felirat A címke felirata. @param igazítás A címke szövegének vízszintes igazítása. */ public TobbSorosCimke( String felirat, int igazítás ) { setFelirat( felirat ); setIgazítás( igazítás ); setInsets( null ); //alapértelmezett keret beállítása } /** A címke felirata sorokra bontva. */ private transient String sorok[]; /** Címke feliratának beállítása. Több sort \n jelekkel lehet elválasztani. @param felirat A címke felirata. */ public void setFelirat( String felirat ) { if (felirat==null) felirat = ""; this.felirat = felirat; sorok = felirat.split("\\n"); betűméret = null; invalidate(); //újrarajzoltatás } /** A címke felirata. */ private transient String felirat; /** Címke feliratának lekérdezése. @return A címke felirata. */ public String getFelirat() { return felirat; } /** Címke felirat vízszintes igazításának beállítása. A balra, középre és jobbra igazítást előíró konstansokat a {@code Label} osztály definiálja. @param igazítás A címke feliratának vízszintes igazítása. @throws IllegalArgumentException ismeretlen igazítás esetén. */ public void setIgazítás( int igazítás ) { if (igazítás!=java.awt.Label.LEFT && igazítás!=java.awt.Label.CENTER && igazítás!=java.awt.Label.RIGHT) throw new IllegalArgumentException( "Hibás igazítási paraméter: "+igazítás); this.igazítás = igazítás; invalidate(); //újrarajzoltatás } /** A címke feliratának vízszintes igazítása. */ private transient int igazítás; /** Címke felirata vízszintes igazításának lekérdezése. @return A címke feliratának vízszintes igazítása. */ public int getIgazítás() { return igazítás; } /** Címke keretvastagságának beállítása. {@code null} esetén az alapértelmezett keretvastagság (5 pontnyi hely minden oldalon) kerül beállításra. @param keret A címke keretvastagsága. */ public void setInsets( java.awt.Insets keret ) { if (keret==null) keret=new java.awt.Insets(5, 5, 5, 5); //alapértelmezés this.keret = keret; invalidate(); //újrarajzoltatás } /** Címke keretvastagsága. */ private transient java.awt.Insets keret; /** Címke keretvastagságának lekérdezése. @return A címke keretvastagsága. */ public java.awt.Insets getInsets() { return keret; } /** A címke sorainak hossza */ private transient int sorhossz[]; /** A címke sorainak magassága */ private transient int sormagasság[]; /** Maximális sorhossz */ private transient int maxsorhossz; /** Sormagasságok összege */ private transient int összsormagasság; /** Legutóbb használt szövegméretek */ private transient java.awt.FontMetrics betűméret; /** Címkefelirat szövegsorai által elfoglalt helyek kiszámítása */ private void méretez() { if (betűméret!=null && betűméret.equals(getFontMetrics(getFont()))) return; //nem kell újra számolni betűméret = getFontMetrics(getFont()); sorhossz = new int[sorok.length]; sormagasság = new int[sorok.length]; összsormagasság = maxsorhossz = 0; for (int i=sorok.length; --i>=0;) { //soronkénti számolás sorhossz[i] = betűméret.stringWidth(sorok[i]); sormagasság[i] = (int)betűméret.getLineMetrics(sorok[i], getGraphics()).getHeight(); összsormagasság+=sormagasság[i]; maxsorhossz = Math.max( maxsorhossz, sorhossz[i] ); } } /** Címke optimális mérete a feliratának szövegsorai alapján. @return A címke optimális mérete */ @Override public java.awt.Dimension getPreferredSize() { méretez(); //méretszámolás return new java.awt.Dimension(maxsorhossz+keret.left+keret.right, összsormagasság+keret.top+keret.bottom); //keretvastagsággal együtt } /** Címke megjelenítésének elvégzése. @param g Az aktuális rajzolási környezet */ @Override public void paint( java.awt.Graphics g ) { méretez(); //méretszámolás int y = (getHeight()-keret.top-keret.bottom-összsormagasság) / 2 + keret.top+betűméret.getMaxAscent(); //függőlegesen középre igazítás for (int i=0; i