MenuBuilder.java :  » Project-Management » lgantt » com » csa » lgantt » Java Open Source

Java Open Source » Project Management » lgantt 
lgantt » com » csa » lgantt » MenuBuilder.java
package com.csa.lgantt;

import java.awt.event.ActionListener;
import java.util.Hashtable;
import java.util.ResourceBundle;
import java.util.StringTokenizer;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;

/**
 * Generador de menues. 
 * TODO: Convertirlo en una clase dinamica.... mas adelante.
 * 
 * @author csilva
 */
public class MenuBuilder {
  private static ResourceBundle bundle = ResourceBundle.getBundle("com.csa.lgantt.Menues");
  
  
  
  /**
   * Crea la barra de menues de acuerdo al contenido de 
   * una propiedad.
   * 
   * @param listener avisar los mensajes de los menues
   * @return JMenuBar with the items configured and the listeners asociated with this object
   */
  public static JMenuBar buildMenuBar(ActionListener listener, String menuName, Hashtable menues) {
    
    JMenuBar menuBar = new JMenuBar();
    menuBar.setOpaque(true);

    String menuConfig = bundle.getString(menuName);
    StringTokenizer st = new StringTokenizer(menuConfig, " ");
    while (st.hasMoreTokens()) {
      String menuId = st.nextToken();
      JMenu menu = new JMenu(menuId);

      String menuDesc = bundle.getString("desc." + menuId);
      StringTokenizer dt = new StringTokenizer(menuDesc, "|");
      menu.setText(dt.nextToken());
      menu.setMnemonic(dt.nextToken().charAt(0));

      buildMenues(listener, menuId, menu, menues);
      menuBar.add(menu);
    }
    return menuBar;
  }

  /**
   * Construye los items de un menu pulldown.
   * El menu se obtiene de:
   * <pre>
   * menu.<i>menuId</i>= item1 item2
   * desc.item1 = <i>Text</i>|<i>mnemonic</i>[|<i>accelerator keystroke</i>] 
   * </pre>
   * @param listener listener a asociar
   * @param bundle bundle con la descripcion del menu
   * @param menuId Id del menu
   * @param menu Menu desde el cual se colgaran los items
   */
  static private void buildMenues(
    ActionListener listener,    
    String menuId,
    JMenu menu, Hashtable menues) {
    String sub = bundle.getString("menu." + menuId);
    StringTokenizer mt = new StringTokenizer(sub, " ");
    while (mt.hasMoreTokens()) {
      String itemId = mt.nextToken();
      if ("-".equals(itemId)) {
        menu.addSeparator();
        continue;
      }
      // items
      String itemDesc = bundle.getString("desc." + itemId);
      StringTokenizer smt = new StringTokenizer(itemDesc, "|");
      JMenuItem mi = new JMenuItem(itemId);
      mi.setActionCommand(itemId);
      mi.setText(smt.nextToken());
      mi.setMnemonic(smt.nextToken().charAt(0));
      if (smt.hasMoreElements())
        mi.setAccelerator(KeyStroke.getKeyStroke(smt.nextToken()));
      mi.addActionListener(listener);
      menu.add(mi);
      menues.put(itemId, mi);
    }
  }
  
  
  
  
  /**
   * Construye los items de un menu popup.
   * El menu se obtiene desde un archivo de propiedades: jgantt.MainMenu
   * <pre>
   * menu.<i>menuId</i>= item1 item2
   * desc.item1 = <i>Text</i>|<i>mnemonic</i>[|<i>accelerator keystroke</i>] 
   * </pre>
   * @param listener listener a asociar
   * @param bundle bundle con la descripcion del menu
   * @param menuId Id del menu
   * @param menu Menu desde el cual se colgaran los items
   */
  public static JPopupMenu buildPopup(ActionListener listener, String menuId) {    
    JPopupMenu popup = new JPopupMenu("popup");
    String sub = bundle.getString("menu." + menuId);
    StringTokenizer mt = new StringTokenizer(sub, " ");
    while (mt.hasMoreTokens()) {
      String itemId = mt.nextToken();
      if ("-".equals(itemId)) {
        popup.addSeparator();
        continue;
      }
      // items
      String itemDesc = bundle.getString("desc." + itemId);
      StringTokenizer smt = new StringTokenizer(itemDesc, "|");
      JMenuItem mi = new JMenuItem(itemId);
      mi.setActionCommand(itemId);
      mi.setText(smt.nextToken());
      mi.setMnemonic(smt.nextToken().charAt(0));
      if (smt.hasMoreElements())
        mi.setAccelerator(KeyStroke.getKeyStroke(smt.nextToken()));
      mi.addActionListener(listener);
      popup.add(mi);
    }
    return popup;
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.