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;
}
};
JAVA天堂

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



if(columnHeader.equals("Table Name")){
tableNameColumn=i;
break;
}
}

/**
* 取得表名并弹出菜单
*/
if(tableNameColumn!=-1){ JAVA天堂
/**
* 修改菜单首条的名称
*/
String tableName=(String)table.getValueAt(row,tableNameColumn);
tableNameItem.setText(tableName);

// 弹出菜单
popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
}
}
}
}

4.实现的效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值