在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.實現的效果如下:
posted on 2007-06-12 22:23 sitinspring 閱讀(8157) 評論(1) 編輯 收藏 所屬分類: Swing