免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3798 | 回复: 2
打印 上一主题 下一主题

带java反射的动态菜单生成类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-20 18:05 |只看该作者 |倒序浏览
/*
* createObjectMenu.java
*
* Created on 2005年4月16日, 下午10:28
*/

package src;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import java.lang.reflect.*;
/**
*
* @author  ForTest
*/
public class createObjectMenu {
   
    /** Creates a new instance of createObjectMenu */
    public createObjectMenu() {        
    }
   
    public JMenuBar createFunction(String user) throws SQLException{
        Connection con=cc.getConn();
        String sql="select mname,paren,mtype,mjb from Menu where user='"+user+"'and mtype='Menu';";
        try{
            Statement stmt= con.createStatement();
            ResultSet rs=stmt.executeQuery(sql);
            while(rs.next()){
                if(rs.getInt("mjb"==1){
                MenuBarTest.add(getUserMenu(user,rs.getString("mname"));
                }
            }
        }catch(SQLException e){
            System.err.println("createFunction:"+e.getMessage());
        }
        return MenuBarTest;
    }   
   
    public JMenu getUserMenu(String user,String paren) throws SQLException{   //得到MENU子菜单
         Connection con=cc.getConn();
         String sql="select mname,mtype from Menu where user='"+user+"'and paren='"+paren+"';";         
        JMenu tmpMenu=new JMenu(paren);
         try{
            Statement stmt=con.createStatement();
            ResultSet rs=stmt.executeQuery(sql);
            while(rs.next()){
                if(rs.getString("mtype".equals("Item"){
                    tmpMenu.add(getUserItem(rs.getString("mname"));                    
                }else{
                    tmpMenu.add(getUserMenu(user,rs.getString("mname"));
                }
            }
         }catch(SQLException e){
            System.err.println("getUserMenu:"+e.getMessage());
         }
         return tmpMenu;
    }
   
    public JMenuItem getUserItem(String mname){
       JMenuItem tmpItem =new JMenuItem(mname);
       tmpItem.addActionListener(tmpListener);                                //添加监听
       return tmpItem;
    }
  
    ActionListener tmpListener = new ActionListener() {                        //创建一个监听器
                public void actionPerformed(ActionEvent event) {
                    JMenuItem tmpItem=(JMenuItem)event.getSource();
                    String addAction=tmpItem.getText()+"Action";
                    getListener(addAction);                    
               }
    };
   
    public void getListener(String methListener){                             //java反射应用,通过函数名称来动态调用函数
        try{
        Class cls=Class.forName("src.MenuItemListener";                        //得到要在其中查找方法的类
        Class partypes[] = new Class[]{};                                       //函数调用的参数类型,这里为空。      
        Method moth=cls.getMethod(methListener, partypes);                     //得到方法        
        MenuItemListener ml=new MenuItemListener();                           //以MenuItemListener创造一个新的对象
        Object[] obj=new Object[]{};                                            //生成函数要调用的数据,这里为空。        
        Object r=moth.invoke(ml, obj);                                         //调用得到的函数。
        }catch(Throwable e){
            System.err.println(e);                                             //抛出异常。
        }
    }

    JMenuBar MenuBarTest=new JMenuBar();   
    ConnClass cc=new ConnClass();
}
/*
本类同过Access数据库中一个Menu表建立菜单,表结构如下
mid:菜单的id号,自动增加
manme:菜单名称
mtype:菜单类型
paren:上一级菜单名称
mjb:菜单级别

ConnClass 类为一个只用来做数据库连接的类,方法getConn()返回一个连接
getListener(String methListener)是一个java反射的应用,用来通过一个给定的字符串查找一个方法并执行
主要参照的是下面的网址:
http://herald.seu.edu.cn/blog/bigseal/articles/16758.aspx
*
本类只是将我心里面的一点想法表达了出来,方法很笨,但是我希望能有人和我一起学习探讨
本类用NetBean IDE3.6编译
*/

论坛徽章:
0
2 [报告]
发表于 2005-04-21 22:53 |只看该作者

带java反射的动态菜单生成类

收藏中。。。。。。。。。。

论坛徽章:
0
3 [报告]
发表于 2005-04-22 19:29 |只看该作者

带java反射的动态菜单生成类

鼓掌.........
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP