G
Guest
Gast
Hallo,
ich erzeuge ein JPopupMen. Darin liegt ein JMenu und ein paar JMenuItems.
Jetzt lege ich einen ActionListener auf das JMenu und die JMenuItems.
Die ActionListener auf den JMenuItems funktionieren, der auf dem JMenu wird nicht ausgelöst
Hier ein Minimalbeispiel, das das Problem zeigt:
Warum wird der ActionListener auf dem JMenu nicht ausgelöst wenn man darauf klickt?
ich erzeuge ein JPopupMen. Darin liegt ein JMenu und ein paar JMenuItems.
Jetzt lege ich einen ActionListener auf das JMenu und die JMenuItems.
Die ActionListener auf den JMenuItems funktionieren, der auf dem JMenu wird nicht ausgelöst
Hier ein Minimalbeispiel, das das Problem zeigt:
Code:
public class Demo extends JFrame{
public Demo(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuItem child1 = new JMenuItem("child1");
child1.addActionListener(new MyActionListener());
JMenuItem child2 = new JMenuItem("child2");
child2.addActionListener(new MyActionListener());
JMenu parentMenu = new JMenu("top");
parentMenu.addActionListener(new MyActionListener());
parentMenu.add(child1);
parentMenu.add(child2);
JPopupMenu menu = new JPopupMenu("menu");
menu.add(parentMenu);
this.getContentPane().addMouseListener(new PopupListener(menu));
this.pack();
this.setSize(500,300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
new Demo().setVisible(true);
}
});
}
class MyActionListener implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.println(e.getSource());
}
}
class PopupListener extends MouseAdapter {
private JPopupMenu popup;
public PopupListener(JPopupMenu popup){
this.popup = popup;
}
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
}
}
Warum wird der ActionListener auf dem JMenu nicht ausgelöst wenn man darauf klickt?