2011-07-22 68 views
4

我需要在java swing中製作一個動態菜單。 我有一個數據庫表,有一個菜單結構。 這是我組裝菜單的類,但我想避免在actionPerformed方法中的文字代碼中燒錄,類名(屏幕)出現在表格字段中。 我的屏幕是一個destoktopPane。動態菜單Java Swing

public class MenuPrincipal extends JFrame implements ActionListener { 

private static final long serialVersionUID = 1L; 
public static JDesktopPane desktop; 

public MenuPrincipal(ArrayList<MenuDTO> opcionesUsuario) { 
    //Creamos la ventana del menu principal. 
    super("Menu Principal - Demografo"); 

    JMenuBar menuBar = null; 
    JMenu menu = null, submenu = null; 
    JMenuItem menuItem = null; 

    int longitud = opcionesUsuario.size(); 

    //Creamos una barra de menu 
    menuBar = new JMenuBar(); 

    menu = new JMenu("Archivo"); 
    menuItem = new JMenuItem("Cerrar sessión", 
     new ImageIcon("images/middle.gif")); 
    menu.add(menuItem); 
    menu.addSeparator(); 
    menuItem = new JMenuItem("Salir"); 
    menu.add(menuItem); 

    MenuDTO menuDTO; 
    for(int i = 0; i < longitud; i ++) { 
     menuDTO = opcionesUsuario.get(i); 
     if(menuDTO.getTieneHijos().equals("S")) { 
      if(menuDTO.getIdPadre() == null) { 
       menu = new JMenu(menuDTO.getNombre()); 
       menuBar.add(menu); 
      } 
      else { 
       submenu = new JMenu(menuDTO.getNombre()); 
       menu.add(submenu); 
      } 
     } 
     else { 
      menuItem = new JMenuItem(menuDTO.getNombre()); 
      menuItem.setActionCommand(Integer.toString(menuDTO.getIdOpcion())); 
      menuItem.addActionListener(this); 
      menu.add(menuItem); 
     } 
    } 
    desktop = new JDesktopPane(); 
    desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); 

    int inset = 50; 
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
    setBounds(inset, inset, 
       screenSize.width - inset*2, 
       screenSize.height - inset*2); 
    setContentPane(desktop); 
    setJMenuBar(menuBar); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setExtendedState(MAXIMIZED_BOTH); 
    setSize(450, 260); 
    setVisible(true); 
} 

public void actionPerformed(ActionEvent e) { 
    if ("4".equals(e.getActionCommand())) 
     IngresoCiudades.getInstance(desktop); 
    else if ("5".equals(e.getActionCommand())) 
     IngresoParroquias.getInstance(desktop); 
    else if ("8".equals(e.getActionCommand())) 
     IngresoBarrios.getInstance(desktop); 
} 
} 

回答