1

クリックされた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にキャストする方法、または名前を判別する他の方法はありますか?ありがとう。

4

3 に答える 3

3

に を追加し、コードを に追加するMenuListenerことをお勧めします。JMenupublic void menuSelected(javax.swing.event.MenuEvent evt)

これは であるためMenuEvent、メソッドはオブジェクトgetSource()を返しますJMenu

から取得したい場合はActionEvent、次のようにしてください。

JPopupMenu menu = (JPopupMenu) ((JMenuItem) evt.getSource()).getParent();
JMenu actMenu = menu.getInvoker();
于 2012-08-16T02:14:28.250 に答える
2

JMenuにキャストする代わりに、JMenuItemにキャストするだけです。次に、そこからJMenuを取得します。

JMenuItem jmi = (JMenuItem) arg0.getSource();
JPopupMenu jpm = (JPopupMenu) jmi.getParent();
JMenu menu = (JMenu) jpm.getInvoker();
于 2012-08-16T02:32:21.667 に答える