[英]how to get the name of a JMenu when a JMenuItem is clicked
如何获得持有被单击的JMenuItem的JMenu的名称? 我尝试这样做:
public void actionPerformed(ActionEvent arg0) {
JMenu menuthing = (JMenu)(arg0.getSource());
String menuString = menuthing.getText();
JMenuItem source = (JMenuItem)(arg0.getSource());
String colorType = source.getText();
但这给了我这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JMenuItem cannot be cast to javax.swing.JMenu
那么,有没有一种方法可以强制转换为JMenu或其他确定名称的方法? 谢谢。
我建议向您的JMenu
添加一个MenuListener
,并将您的代码添加到public void menuSelected(javax.swing.event.MenuEvent evt)
。
由于这是一个MenuEvent
,因此getSource()
方法将返回JMenu
对象。
如果要从ActionEvent
获取它,请尝试如下操作:
JPopupMenu menu = (JPopupMenu) ((JMenuItem) evt.getSource()).getParent();
JMenu actMenu = menu.getInvoker();
而不是强制转换为JMenu,而是强制转换为JMenuItem。 然后从中获取JMenu。
JMenuItem jmi = (JMenuItem) arg0.getSource();
JPopupMenu jpm = (JPopupMenu) jmi.getParent();
JMenu menu = (JMenu) jpm.getInvoker();
假设JMenuItems是JMenu的子级,您仍然可以使用ActionEvent来做到这一点:
JPopupMenupopup = new JPopupMenu();
popup.setName("popup");
....
@Override
public void actionPerformed(ActionEvent e) {
JMenuItem source = (JMenuItem)(e.getSource());
try{
JMenuItem menuItem = (JMenuItem) e.getSource();
JPopupMenu popupMenu = (JPopupMenu) menuItem.getParent();
Component invoker = popupMenu.getInvoker();
JPopupMenu popup = (JPopupMenu) invoker.getParent();
System.out.println("NAME OF JMENU: "+popup.getName());
//If you need the selection of cell(s)
JTable table = (JTable)popup.getInvoker();
int row = table.getSelectedRow();
int col = table.getSelectedColumn();
System.out.println("Selected cell: "+row+"-"+col);
}catch(Exception ex){
ex.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.