java - 如何将 Action 列表器添加到 jmenuitem

标签 java swing jtable jmenuitem

  1. 正在通过数据库添加我的菜单项。
  2. 如果用户选择了特定的菜单项,我必须执行诸如打开新 jframe 之类的操作。
  3. 此处将菜单维度添加到 Menubar ,并在其下添加各种菜单项,例如从数据库中获取的 Period 、 Entity 。
  4. 现在我想在点击 Period menuitem 时打开一个新的 jframe。

         public  void MenuExp(){
               JMenu DimensionMenu = new JMenu("Dimension");
               JMenu editMenu = new JMenu("Help");
               jMenuBar1.add(DimensionMenu);
               jMenuBar1.add(editMenu);
    
        //JMenuItem newAction = new JMenuItem("Account");
        //fileMenu.add(newAction);
        //JMenuItem newPeriod = new JMenuItem("Period");
        //fileMenu.add(newPeriod);
    
        try{
             Class.forName("oracle.jdbc.OracleDriver");
             Connection comm = (Connection)DriverManager.getConnection("jdbc:oracle:thin:@192.168.100.25:1521:orcl","SYSTEM","Admin123");
             Statement st = comm.createStatement();
             String Query = "select OBJECT_NAME from RAHUL_APP1.HSP_OBJECT where OBJECT_TYPE = 2 AND OBJECT_ID <> 30" ;
             //and User_Name ='" + jTextField1.getText()+"'";
             ResultSet rs = st.executeQuery(Query);
    
             while(rs.next()){ 
                    JMenuItem newAction = new JMenuItem(rs.getString(1));
                    DimensionMenu.add(newAction); 
    
                   rs.close();
                   st.close();
                   comm.close(); 
                   newAction.addActionListener(new ActionListener(){
                          public void actionPerformed(ActionEvent arg0){
                             System.out.println("You have clicked on the Account");
                          }
                   });
              }
            } catch(Exception e){
                  JOptionPane.showMessageDialog(this,e);
            }   
        }
    

最佳答案

您需要对框架进行一些参数化,或者将例如框架类也存储在数据库中并使用反射对其进行初始化...


更新:

实现可以是这样的:

package betlista.so.swing.menuitemdialogsfromdb;

import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class MainFrame extends JFrame {

    public MainFrame() {
        super("Frame");
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        add(createMenu());

        pack();
    }

    private JMenuBar createMenu() {
        JMenuBar menuBar = new JMenuBar();

        JMenu menu = new JMenu("Open");
        menu.add(new DialogCreatingMenuItem("Dialog 1", "betlista.so.swing.menuitemdialogsfromdb.MainFrame$MyDialog1"));
        menu.add(new DialogCreatingMenuItem("Dialog 2", "betlista.so.swing.menuitemdialogsfromdb.MainFrame$MyDialog2"));

        menuBar.add(menu);

        return menuBar;
    }

    class DialogCreatingMenuItem extends JMenuItem implements ActionListener {

        String className;

        public DialogCreatingMenuItem(String text, String className) throws HeadlessException {
            super(text);
            this.className = className;
            addActionListener(this);
        }

        @Override
        public void actionPerformed(ActionEvent ae) {
            try {
                Class<JDialog> clazz = (Class<JDialog>)Class.forName(this.className);
                JDialog dialog = clazz.newInstance();
                dialog.setVisible(true);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }

    }

    public static class MyDialog1 extends JDialog {
        public MyDialog1() {
            setTitle("Dialog 1");
            add(new JLabel("Dialog 1"));
            pack();
        }
    }

    public static class MyDialog2 extends JDialog {
        public MyDialog2() {
            setTitle("Dialog 2");
            add(new JLabel("Dialog 2"));
            pack();
        }       
    }

    public static void main(String[] args) {
        new MainFrame().setVisible(true);
    }

}

字符串在

    menu.add(new DialogCreatingMenuItem("Dialog 1", "betlista.so.swing.menuitemdialogsfromdb.MainFrame$MyDialog1"));
    menu.add(new DialogCreatingMenuItem("Dialog 2", "betlista.so.swing.menuitemdialogsfromdb.MainFrame$MyDialog2"));

从数据库中检索...

关于java - 如何将 Action 列表器添加到 jmenuitem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25746846/

相关文章:

java - 开始新 Activity 不会暂停当前 Activity

java.lang.ArrayIndexOutOfBoundsException : 0 >= 0 attempting to populate JTable 异常

java - 为什么 SwingWorkers 没有按预期更新 textArea?

JavaFX ListView 将项目添加到可观察列表中不会反射(reflect)更改并且不可选择

java - 一项 Activity 2 个按钮,可以进行不同的 Activity

java - 如何使用 Ubuntu 11.04 +标题中的 Java Swing/SWT 菜单(如 Mac OS 中)?

java - JTable 中的按钮不会执行操作

java - JTable 中的乘法值

java - 根据文本大小自动调整 JTable 列的大小

java - 如何获取列表的多个页面?