package elte.java2_utikalauz5.swing; /** Menük használata Swingben.
A felhasználói felület csak egy menüt tartalmaz, melynek különböző típusú almenüi segítségével megváltoztathatjuk az aktuális megjelenítési stílust. A menü alatti naplózó komponens az aktuális menükiválasztást naplózza. A menürendszer megjelenítése nyomkövethető. @link.forrásfájl {@docRoot}/../data/swing/src MenuTeszt.java @link.letöltés {@docRoot}/../data/swing MenuTeszt.jar @since Java 2 Útikalauz programozóknak */ public class MenuTeszt extends SwingTeszt implements javax.swing.event. MenuListener, javax.swing.event.PopupMenuListener, javax.swing.event. ChangeListener, java.beans.PropertyChangeListener { /** 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 MenuTeszt().init(argumentumok); } /** Applet leírása. @return A példaprogram leírása */ @Override public String getAppletInfo() { return "Menük használatát bemutató tesztprogram"; } /** Menü felépítése. @param főmenü A menüt tartalmaző főmenü. @param irányítottság A menü irányítottsága. */ private void töltmenü(javax.swing.JComponent főmenü, int irányítottság) { javax.swing.JMenu menü=new javax.swing.JMenu("Stílusok");//első menüpont menü.setToolTipText(menü.getText()); //segédszöveg menü.setMnemonic( menü.getText().charAt(0) ); //gyorsítóbillentyű menü.addMenuListener(this); nyomkövetés(menü); //nyomkövethető a megjelenítése javax.swing.JMenuItem menüpont; for (javax.swing.Action váltás : stílusváltások) { //stílusváltások menüpont = menü.add( váltás ); //megjelenítési stílust menüpont.setMnemonic( menüpont.getText().charAt(0) ); //változtató menüpont.setToolTipText(menüpont.getText()); //műveletek használata nyomkövetés(menüpont); //nyomkövethető a megjelenítése } javax.swing.JMenu almenü = new javax.swing.JMenu("Stílusok almenü"); almenü.setToolTipText(almenü.getText()); //csak a gyorsítóbillentyűk almenü.setMnemonic( almenü.getText().charAt(1) ); //mások almenü.addMenuListener(this); nyomkövetés(almenü); //nyomkövethető a megjelenítése for (javax.swing.Action váltás : stílusváltások) { //stílusváltások menüpont = almenü.add( váltás ); menüpont.setMnemonic( menüpont.getText().charAt(1) ); menüpont.setToolTipText(menüpont.getText()); nyomkövetés(menüpont); //nyomkövethető a megjelenítése } menü.addSeparator(); //menüpontokat elválasztó vonal menü.add(almenü); javax.swing.JMenu alalmenü = new javax.swing.JMenu( "Stílusok CheckBox menü"); alalmenü.addMenuListener(this); nyomkövetés(alalmenü); //nyomkövethető a megjelenítése alalmenü.setToolTipText(alalmenü.getText()); alalmenü.setMnemonic( 'c' ); for (javax.swing.Action váltás : stílusváltások) { //stílusváltások menüpont = new javax.swing.JCheckBoxMenuItem(váltás); alalmenü.add( menüpont ); //Ctrl-el együtt menüpont.setAccelerator( javax.swing.KeyStroke.getKeyStroke(//bárhol menüpont.getText().toUpperCase().charAt(0), //használható java.awt.Event.CTRL_MASK, false) ); //gyorsítóbillentyű menüpont.setToolTipText(menüpont.getText()+" CheckBox"); nyomkövetés(menüpont); //nyomkövethető a megjelenítése } almenü.addSeparator(); almenü.add(alalmenü); //almenü almenüjének javax.swing.JMenu alalalmenü = new javax.swing.JMenu( "Stílusok RadioButton menü"); alalalmenü.setToolTipText(alalalmenü.getText()); alalalmenü.setMnemonic( 'r' ); alalalmenü.addMenuListener(this); nyomkövetés(alalalmenü); //nyomkövethető a megjelenítése javax.swing.ButtonGroup radio = new javax.swing.ButtonGroup(); //csoport for (javax.swing.Action váltás : stílusváltások) { //stílusváltások menüpont = new javax.swing.JRadioButtonMenuItem(váltás); radio.add( menüpont ); //csoportba szervezés alalalmenü.add( menüpont ); //Ctrl-el együtt menüpont.setAccelerator( javax.swing.KeyStroke.getKeyStroke(//bárhol menüpont.getText().toUpperCase().charAt(1), //használható java.awt.Event.CTRL_MASK, false) ); //gyorsítóbillentyű menüpont.setToolTipText(menüpont.getText()+" RadioButton"); nyomkövetés(menüpont); //nyomkövethető a megjelenítése } alalmenü.addSeparator(); alalmenü.add(alalalmenü); főmenü.add(menü); főmenü.add(new javax.swing.JSeparator(irányítottság)); for (javax.swing.Action váltás : stílusváltások) { //stílusváltások menüpont = new javax.swing.JMenuItem(váltás); //menüpontok készítése főmenü.add(menüpont); nyomkövetés(menüpont); //nyomkövethető a megjelenítése } főmenü.add(new javax.swing.JSeparator(irányítottság)); főmenü.add(javax.swing.Box.createGlue()); //súgó menüpont szélreigazítás menü = new javax.swing.JMenu("Súgó"); //súgó menüpont menü.setMnemonic(java.awt.event.KeyEvent.VK_F1); menü.setToolTipText(menü.getText()); menü.addMenuListener(this); nyomkövetés(menü); //nyomkövethető a megjelenítése menüpont = menü.add("Névjegy"); //és annak állandó almenüpontja menüpont.setToolTipText(menüpont.getText()); nyomkövetés(menüpont); //nyomkövethető a megjelenítése főmenü.add(menü); } /** Felbukkanó menü */ private javax.swing.JPopupMenu popupmenü; /** GUI felépítése */ @Override protected void felépít() { javax.swing.JMenuBar menüsor = new javax.swing.JMenuBar(); //főmenüsor töltmenü(menüsor, javax.swing.SwingConstants.VERTICAL); //felépítése menüsor.setToolTipText("Főmenüsor"); setJMenuBar(menüsor); //és beállítása nyomkövetés(menüsor); //nyomkövethető a megjelenítése popupmenü = new javax.swing.JPopupMenu("Popupmenü"); //felbukkanó menü töltmenü(popupmenü, javax.swing.SwingConstants.HORIZONTAL); //felépítése popupmenü.addPopupMenuListener(this); //és eseményeinek figyelése popupmenü.setToolTipText("Popupmenü"); nyomkövetés(popupmenü); //nyomkövethető a megjelenítése napló.setComponentPopupMenu(popupmenü);//felbukkanó menü itt megjelenhet add(new javax.swing.JScrollPane( napló )); //napló megjelenítése javax.swing.MenuSelectionManager. //menük kiválasztottságának figyelése defaultManager().addChangeListener(this); addPropertyChangeListener(LAF, this); } /** Stílusváltás figyelése. @param pce Stílusváltást jelző esemény */ public void propertyChange(java.beans.PropertyChangeEvent pce) { javax.swing.SwingUtilities.updateComponentTreeUI(popupmenü); } /** Felbukkanó menü megjelenése. @param pe Felbukkanó menü esemény. */ public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent pe){ naplóz("popupMenuWillBecomeVisible esemény"); //eseményeinek naplózása } /** Felbukkanó menü eltünése. @param pe Felbukkanó menü esemény. */ public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent pe){ naplóz("popupMenuWillBecomeInvisible esemény"); } /** Felbukkanó menü bezárása. @param pe Felbukkanó menü esemény. */ public void popupMenuCanceled(javax.swing.event.PopupMenuEvent pe) { naplóz("popupMenuCanceled esemény"); } /** Menükiválasztás változásának naplózása. @param ce Változási esemény. */ public void stateChanged(javax.swing.event.ChangeEvent ce) { javax.swing.MenuElement[] kiválasztás=((javax.swing.MenuSelectionManager) ce.getSource()).getSelectedPath(); napló.append("Menü kiválasztás: "); if (kiválasztás == null || kiválasztás.length == 0) naplóz("törölve"); else { for (int i = kiválasztás.length; --i >= 0;) {//a segédszöveg alapján String text = ((javax.swing.JComponent)kiválasztás[i]). getToolTipText(); if (text == null || text.length() == 0) text = kiválasztás[i]. getClass().getSimpleName(); napló.append(text); if (i > 0) napló.append(" < "); } naplóz(""); } } /** Menü bezárása. @param me Menüesemény. */ public void menuCanceled(javax.swing.event.MenuEvent me) { naplóz("menuCanceled esemény: "+((javax.swing.JMenu)me.getSource()). getText()); } /** Menü kiválasztása. @param me Menüesemény. */ public void menuSelected(javax.swing.event.MenuEvent me) { naplóz("menuSelected esemény: "+((javax.swing.JMenu)me.getSource()). getText()); } /** Menükiválasztás elvesztése. @param me Menüesemény. */ public void menuDeselected(javax.swing.event.MenuEvent me) { naplóz("menuDeselected esemény: "+((javax.swing.JMenu)me.getSource()). getText()); } }