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.实现的效果如下:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 JTable实现鼠标右键菜单,可以按照以下步骤进行操作: 1. 创建 JPopupMenu 对象,用于作为右键菜单。 2. 在 JTable 上注册鼠标监听器,以便捕获鼠标右键点击事件。 3. 在鼠标右键点击事件中判断是否在 JTable 的有效区域内,并显示右键菜单。 下面是一个简单的示例代码: ```java import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class JTableRightClickMenuExample { public static void main(String[] args) { JFrame frame = new JFrame("JTable Right Click Menu Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建 JTable DefaultTableModel model = new DefaultTableModel(5, 5); JTable table = new JTable(model); // 创建 JPopupMenu JPopupMenu popupMenu = new JPopupMenu(); JMenuItem menuItem = new JMenuItem("菜单项"); popupMenu.add(menuItem); // 注册鼠标监听器 table.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3) { int row = table.rowAtPoint(e.getPoint()); int column = table.columnAtPoint(e.getPoint()); if (row >= 0 && row < table.getRowCount() && column >= 0 && column < table.getColumnCount()) { // 在有效区域内显示右键菜单 popupMenu.show(table, e.getX(), e.getY()); } } } }); // 将 JTable 添加到 JFrame 中 frame.add(new JScrollPane(table), BorderLayout.CENTER); frame.setSize(400, 300); frame.setVisible(true); } } ``` 在上面的示例代码中,我们创建了一个简单的 5x5 的 JTable,并在鼠标右键点击事件中显示了一个包含一个菜单项的右键菜单。你可以根据自己的需求来扩展和修改这个示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值