我是一个相当新的java编程。我创建了一个JMenu
并添加了actionlisten
,但它没有触发。 JPanel
,jpCommentMainPane
已添加到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;
}
答案 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());