package elte.java2_utikalauz5.swing; /** A legegyszerűbb konténer használata Swingben.

A program indulásakor véletlenszerűen létrehoz valahány komponenst, majd egy oszlopba szervezi azokat. A komponensek jellemzőit ki is írja a program az alapértelmezett kimenetre. Minden egyes komponens vagy egy láthatatlan fix, illetve kitöltő komponens, vagy egy gomb lesz, ami megjeleníti a vízszintes igazítási pontját egy azt jelölő vonallal, sőt lehetővé teszi az igazítási arány interaktív állítását a gomb területére történő egérkattintással. Ezen nyomógombok alapértelmezés szerint fix méretűek, de maximális méretük korlátozása feloldható a felhasználói felület alján található kiválasztható gomb segítségével. Speciális nyomógombjaink megjelenítése nyomkövethető. @link.forrásfájl {@docRoot}/../data/swing/src BoxTeszt.java @link.letöltés {@docRoot}/../data/swing BoxTeszt.jar @since Java 2 Útikalauz programozóknak */ public class BoxTeszt extends SwingTeszt { /** Verziószám. */ private final static long serialVersionUID = 15L; /** Indítás alkalmazásként. @param argumentumok Az indításkor megadott paraméterek. */ public static void main(String argumentumok[]) { new BoxTeszt().init(argumentumok); } /** Applet leírása. @return A példaprogram leírása */ @Override public String getAppletInfo() { return "BoxLayout használatát bemutató tesztprogram"; } /** Komponensméretek maximalizálás kapcsolója */ private javax.swing.JCheckBox fixméret; /** Véletlenszámgenerátor */ private java.util.Random rnd = new java.util.Random(); /** GUI felépítése */ @Override protected void felépít() { fixméret = new javax.swing.JCheckBox("fixméret?", true); add(fixméret, java.awt.BorderLayout.SOUTH); javax.swing.Box box = javax.swing.Box.createVerticalBox(); //függőleges add(box); java.awt.Component komponens = null; for (int i = rnd.nextInt(5)+3; --i >= 0; ) { //komponensek felvétele switch (rnd.nextInt(10)) { case 0: //kitöltő láthatatlan komponens komponens = javax.swing.Box.createGlue(); komponens.setForeground(java.awt.Color.green); //zöld lenne komponens.setBackground(java.awt.Color.green); //ha látszana System.out.print("Glue"); break; case 1: //fixméretű láthatatlan komponens case 2: java.awt.Dimension méret = new java.awt.Dimension( rnd.nextInt(100), rnd.nextInt(100)); komponens = javax.swing.Box.createRigidArea( méret ); komponens.setForeground(java.awt.Color.red); //piros lenne komponens.setBackground(java.awt.Color.red); //ha látszana System.out.print("RigidArea("+ méret.width+"*"+méret.height+")"); break; default: //látható (nyomógomb) komponens komponens=new Gomb(rnd.nextFloat()); //komponens létrehozása nyomkövetés((javax.swing.JComponent)komponens); System.out.print(komponens.getAlignmentX()); } box.add(komponens); //komponensek felvétele és listázása if (i > 0) System.out.print(", "); } System.out.println(); } /** Igazítási pontot megjeleníteni és manipulálni képes nyomógomb */ class Gomb extends javax.swing.JButton implements java.awt.event.ActionListener { /** Verziószám. */ private final static long serialVersionUID = 15L; /** Gomb kezdeti feliratának hossza */ private int felirathossz; /** Konstruktor. @param arány A gomb kezdeti aránya */ Gomb(float arány) { setIgazítás( arány ); fixméret.addActionListener(this); //méretkorlátozás figyelése setFont(new java.awt.Font("Monospaced", //felirat számjegyei java.awt.Font.PLAIN, 12)); //azonos szélesek lesznek addMouseListener( new java.awt.event.MouseAdapter() { /** Igazítási pont változtatása egérklikkeléssel. @param me Egérklikkelési esemény */ public void mousePressed(java.awt.event.MouseEvent me) { setIgazítás( me.getX() / (float)getWidth()); } }); } /** Igazítási arány beállítása. @param arány Igazítási pont */ private void setIgazítás( float arány ) { if (arány < 0.05) arány = 0.0f; //szélekre else if (arány > 0.95) arány = 1.0f; //igazít String felirat = Float.toString( arány ); if (felirathossz==0) { if (felirat.length() > 3) felirat = felirat.substring(0, 3 + rnd.nextInt(felirat.length()-2)); felirathossz = Math.max(felirat.length(), 3); } else if (felirat.length() > felirathossz) //nem fér... felirat = felirat.substring(0, felirathossz); try { //igazítás mértéke a feliratnak megfelelő setAlignmentX(Float.parseFloat(felirat)); } catch (Exception e) {} setText(felirat); revalidate(); //gomb újrarajzolása } /** Újraigazítás. @param ae Kapcsoló esemény */ public void actionPerformed(java.awt.event.ActionEvent ae) { setMaximumSize(fixméret.isSelected() ? getMinimumSize() : BoxTeszt.this.getMaximumSize()); revalidate(); //méretkorlátozás változása miatt újrarajzolás } /** Komponens megjelenítésekor igazítási pont jelölése. @param g Felhasználandó rajzolási környezet */ @Override public void paintComponent( java.awt.Graphics g ) { //megjelenítés super.paintComponent(g); int x = (int)(getAlignmentX() * (float)getWidth())-1; //igazítási g.drawLine(x, 0, x, getHeight() - 1); //pont megrajzolása } } }