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

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

本人在做一个在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.实现的效果如下:
在JTable上点击右键并弹出菜单的实现_第1张图片

你可能感兴趣的:(在JTable上点击右键并弹出菜单的实现)