java - 动态菜单 Java Swing

标签 java swing

我需要在 java swing 中制作一个动态菜单。 我有一个具有菜单结构的数据库表。 这是我组装菜单的类,但我想避免在 actionPerformed 方法中烧毁文字代码,类名(屏幕)出现在表字段中。 我的屏幕是一个 destoktopPane。

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);
}
}

最佳答案

考虑实现 Action界面,如 How to Use Actions 中所述.有相关例子herehere .您可以使用 Class Literals as Runtime-Type Tokens获取每个类的 newInstance()

关于java - 动态菜单 Java Swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785319/

相关文章:

java - 使用 java Executor 接口(interface)的多线程方法

java - LWJGL 自动本地选择器

java - 通过 jdbctemplate 在表中插入记录时如何获取自动增量 ID

java - slider 不更新标签

Java Swing ActionMap 键

Java SwingWorker从数据库加载数据到List

java - 如何创建一个简单的 api 来并行执行多个用户的测试

java - 为什么 "length"属性在 String 类中是公共(public)的?

java - 如何在java中编写actionlistener

java - 文本区域中的上下移动按钮