我是相当新的Java编程。我创建了一个JMenu并添加了actionlisten,但是没有触发。 JPaneljpCommentMainPane,被添加到JFrameJFrame也有自己的菜单栏和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;


}

最佳答案

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());

10-05 17:56