ActionListen没有触发JMenu

时间:2014-05-14 21:58:37

标签: java swing jpanel jmenu

我是一个相当新的java编程。我创建了一个JMenu并添加了actionlisten,但它没有触发。 JPaneljpCommentMainPane已添加到JFrame。此外,JFrame还有自己的菜单栏和actionlistener。有人会告诉我如何使它工作。提前谢谢。

我的代码将JMenu添加到JPanel

jpCommentMainPane=new JPanel();         
jpCommentMainPane.setLayout(new BorderLayout(10,10));
JPanel totalCommentPane=new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel jpFindPane=new JPanel(new FlowLayout(FlowLayout.LEFT));      
totalCommentPane.setPreferredSize(new Dimension(rightPaneWidth,20));        
jpFindPane.add(sortMenu());  //add menubar
JPanel topPane=new JPanel();
topPane.setLayout(new BorderLayout());
topPane.add(jpFindPane, BorderLayout.SOUTH);
jpCommentMainPane.add(topPane, BorderLayout.NORTH);

有返回JMenuBar的方法

//Create sort menu bar
private JMenuBar sortMenu(){

    JMenuBar menuBar=new JMenuBar();
    JMenu menu=new JMenu("Sort");
    JRadioButtonMenuItem menuItemType=new JRadioButtonMenuItem("Type");
    menu.add(menuItemType);
    JRadioButtonMenuItem menuItemPage=new  JRadioButtonMenuItem("Page");
    menu.add(menuItemPage);
    JRadioButtonMenuItem menuItemAuthor=new  JRadioButtonMenuItem("Author");
    menu.add(menuItemAuthor);
    JRadioButtonMenuItem menuItemDate=new  JRadioButtonMenuItem("Date");
    menu.add(menuItemDate);
    menu.addActionListener(new ActionListener(){            
    @Override
        public void actionPerformed(ActionEvent e){ 
             Utility.DisplayErrorMsg(pageErrorPrefix+ "line 145");
            String command=e.getActionCommand().trim().toUpperCase();
            if (command.equals(SortItem.TYPE)){
                pageSortBy=SortItem.TYPE;
            }else if (command.equals(SortItem.PAGE)){
                pageSortBy=SortItem.PAGE;
            }else if(command.equals(SortItem.TYPE)){
                pageSortBy=SortItem.TYPE;
            }else if(command.equals(SortItem.CREATOR)){
                pageSortBy=SortItem.CREATOR;
            }else if (command.equals(SortItem.DATE)){
                pageSortBy=SortItem.DATE;
            }

            getListCommentPane();

        }

    }

            );
    menuBar.add(menu);
    return menuBar;


}

2 个答案:

答案 0 :(得分:2)

好的,我现在肯定。您可以将ActionListener添加到JMenu,但与JMenuItem不同,它不起作用。相反,如果JMenu对象需要一个监听器,则应该向JMenu添加一个MenuListener。

答案 1 :(得分:0)

JMenus需要MenuListeners而不是ActionListeners来处理事件。 JMenuItems将使用ActionListeners,但我不确定JRadioButtonMenuItems。

要尝试的一件事是为每个JRadioButtonMenuItem使用内部类。

例如,对于menuItemType

public class menuItemTypeListener implements ActionListener{
     public void ActionPerformed(ActionEvent ae){
         //Do Something here
     }
}

menuItemType.addActionListener(new menuItemTypeListener());