新闻正文

JTable上点击右键并弹出菜单的实现

来源:JAVA天堂  J2SE  2007-6-14 01:03:50 网友评论 0 条 字体:[ ] ~我要投稿!
本人在做一个在JTable上点击右键弹出菜单的程序时,遇到了这样的问题--菜单首项需要根据点击的表格行的"表名列"改变,这需要我们做一点小小的工作,其实就是根据点击的位置推算所在行,好了,废话少说,看代码吧.

1.表格的建立过程

    String[] headers = {  "No", "Table Name"  };
    Object[][] cellData = null;

    DefaultTableModel model = new DefaultTableModel(cellData, headers) {
      public boolean isCellEditable(int row, int column) {
        // 第N列可以编辑
        /*
         * if (column == N) { return false; }
         */

        // 整个表都不能编辑
        return false;
      }
    };

    table = new JTable(model);

2.菜单的建立
    popupMenu=new JPopupMenu();
   
    tableNameItem=new JMenuItem("");
    selectItem=new JMenuItem("Select SQL");
    insertItem=new JMenuItem("Insert SQL");
    deleteItem=new JMenuItem("Delete SQL");
    updateItem=new JMenuItem("Update SQL");
    hbmItem=new JMenuItem("hbm xml");
    hbmPojoItem=new JMenuItem("Pojo Class");
   
    popupMenu.add(tableNameItem);
    popupMenu.addSeparator();
    popupMenu.add(selectItem);
    popupMenu.add(insertItem);
    popupMenu.add(deleteItem);


    popupMenu.add(updateItem);
    popupMenu.addSeparator();
    popupMenu.add(hbmItem);
    popupMenu.add(hbmPojoItem);

3.菜单的弹出处理
    
      table.addMouseListener(new MouseAdapter() {
          public void mousePressed(MouseEvent evt) {
              if (evt.isPopupTrigger()) { 
                //
取得右键点击所在行
             
int row=evt.getY()/table.getRowHeight();
             
              /**
               * 取得是表名的那一列
               */
              int tableNameColumn=-1;
             
              for(int i=0;i<table.getColumnModel().getColumnCount();i++){
                TableColumn selColumn = table.getColumnModel().getColumn(i);
                String columnHeader=(String)selColumn.getHeaderValue();
               
                if(columnHeader.equals("Table Name")){
                  tableNameColumn=i;
                  break;
                }
              }
             
              /**
               * 取得表名并弹出菜单
               */
              if(tableNameColumn!=-1){


                /**
                 * 修改菜单首条的名称
                 */
                String tableName=(String)table.getValueAt(row,tableNameColumn);
                tableNameItem.setText(tableName);
               
                // 弹出菜单
                popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
              }

              }
          }
      }

        
4.实现的效果如下:



收藏到ViVi   收藏此页到365Key
上一篇:Merlin 的魔力: 另一个简单的 Frame
下一篇:Struts 2与AJAX初步入门(1)
用户名:新注册) 密码: 匿名评论 [所有评论]
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
本栏搜索
  • Google
   网站首页 -  网站地图 -  技术学习 -  网站投稿 -  帮助中心
Copyright 2003-2008 www.javah.net All Rights Reserved
2008 如果你喜欢本站 请收藏本站 并推荐给你的朋友一起分享