2012-08-16 3 views
0

클릭 한 JMenuItem을 보유하고있는 JMenu의 이름을 어떻게 얻을 수 있습니까? 나는이 일을 시도 :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를 캐스팅하는 방법, 또는 이름을 결정하는 다른 방법이 있습니까? 감사합니다. .

+1

는 * "어떻게 하나의 이름을 얻을 것 클릭 한 JMenuItem을 보유하고있는 JMenu? "* 더 나은 질문은 문장 일 것이지만 'How'는 'How'를 교환하는 것입니다. –

+0

+1 @ 앤드류 톰슨 여기에. 게시 한 코드로 판단 할 때 JMenu를 실제로 가져와야하는 이유에 대해서는 알 수 없습니다. 정교하게하고 싶습니까? – Sujay

+0

콘 박스의 게임에 익숙하지 않은 분들을 위해, 살아있는 위치의 색상을 설정하는 메뉴가 필요합니다. 그리고 죽은 위치의 색상을 설정하는 메뉴입니다. 그래서 Alive 메뉴와 Dead 메뉴를 구별하기 위해 메뉴의 이름이 필요합니다. – Jeeter

답변

3

JMenuMenuListener을 추가하고 public void menuSelected(javax.swing.event.MenuEvent evt)에 코드를 추가하는 것이 좋습니다.

JPopupMenu menu = (JPopupMenu) ((JMenuItem) evt.getSource()).getParent(); 
JMenu actMenu = menu.getInvoker(); 
+0

소스를 얻으려면 evt.getSource()? – Jeeter

+0

@Jeeter : yip!이 필요합니다. :) – Sujay

+0

대단히 감사합니다. :) – Jeeter

2

대신 JMenu를에 캐스팅이 이후

getSource() 방법은 당신이 당신의 ActionEvent에서 그것을 얻을하려면 JMenu 객체를

를 돌려 같은 것을 시도 할 것이다하는 MenuEvent입니다 JMenuItem에 캐스트하면됩니다. 그런 다음 JMenu를 가져옵니다. JMenuItems 가정

JMenuItem jmi = (JMenuItem) arg0.getSource(); 
JPopupMenu jpm = (JPopupMenu) jmi.getParent(); 
JMenu menu = (JMenu) jpm.getInvoker(); 
+0

Yip! 나는 동의한다 (+1). 그러나 그것, 당신이 정말로'ActionEvent'에서 그것을 얻어야한다면. 그러나 @andrewthomson이 지적했듯이, OP가 왜 JMenu의 이름을 얻고 싶어하는지에 대해서는 여전히 확신이 없습니다. – Sujay

0

는 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(); 
    } 
} 
관련 문제