Gast Geschrieben 19. Januar 2004 Geschrieben 19. Januar 2004 Hallo zusammen, ich habe mit mal ein Fenster gebastelt inkl. einem Menu und möchte nun, wenn der Benutzer auf "Programm"->"beenden" klickt, das sich das Programm beendet. Was mache ich hierbei falsch? package swing; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class Fenster extends JFrame implements WindowListener, ActionListener, MouseListener, KeyListener, MenuListener { //Attribute private JMenuBar jmbMenu = new JMenuBar(); private JMenu jmProgramm = new JMenu("Programm"); private JMenuItem jmiProgrammBeenden = new JMenuItem("beenden"); //Ende Attribute //ActionListener public void actionPerformed(ActionEvent event) {} //Ende Action Listener //MouseListener public void mouseClicked(MouseEvent event) {} public void mouseExited(MouseEvent event) {} public void mouseReleased(MouseEvent event) {} public void mouseEntered(MouseEvent event) {} public void mousePressed(MouseEvent event) {} //Ende MouseListener //WindowListener public void windowClosing(WindowEvent event) {} public void windowClosed(WindowEvent event) {} public void windowDeiconified(WindowEvent event) {} public void windowIconified(WindowEvent event) {} public void windowActivated(WindowEvent event) {} public void windowDeactivated(WindowEvent event) {} public void windowOpened(WindowEvent event) {} //Ende WindowListener //KeyListener public void keyPressed(KeyEvent event) {} public void keyReleased(KeyEvent event) {} public void keyTyped(KeyEvent event) {} //Ende KeyListener //MenuListener public void menuCanceled(MenuEvent event) {} public void menuDeselected(MenuEvent event) {} public void menuSelected(MenuEvent event) { if (event.getSource() == jmiProgrammBeenden) { System.exit(0); } else {}; } //Ende MenuListener public void createComponents() { this.setJMenuBar(jmbMenu); this.getContentPane().add(jmbMenu); this.getContentPane().add(jmProgramm); this.getContentPane().add(jmiProgrammBeenden); jmiProgrammBeenden.addActionListener(this); jmProgramm.add(jmiProgrammBeenden); jmbMenu.add(jmProgramm); } public Fenster(String strTitel, int intBreite, int intHoehe) { this.getContentPane().setLayout(null); this.setTitle(strTitel); this.setBounds(1,1,intBreite,intHoehe); this.createComponents(); this.setVisible(true); this.addWindowListener(this); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Zitieren
Morbid_Soul Geschrieben 19. Januar 2004 Geschrieben 19. Januar 2004 Moin, du hast zwar den ActionListener beim MenuItem registriert, den Code zum beenden Der Anwendung aber in den MenuListener gepackt. Dieser wird aber garnicht aufgerufen. Also den Code in den ActionListener packen und statt: if (event.getSource() == jmiProgrammBeenden) { System.exit(0); } glaube ich besser: if (event.getActionCommand().equals("beenden")) { //setVisible(false); //dispose() System.exit(0); } schreiben. Gruß, Peter Zitieren
Gast Geschrieben 19. Januar 2004 Geschrieben 19. Januar 2004 Hat geklappt, danke. Mal eine Folgefrage: Auf was reagiert denn der MenuListener? Dem MenuItem kann ich leider keinen MenuListener hinzufügen, nur den ActionListener. Zitieren
Morbid_Soul Geschrieben 19. Januar 2004 Geschrieben 19. Januar 2004 Moin, das stimmt. Dafür kannst du bei einem JMenu (bei Dir "jmProgramm") einen solchen Listener registrieren. jmProgramm.addMenuListener(new MenuListener() { public void menuCanceled(MenuEvent me) { System.out.println("menuCanceled"); } public void menuDeselected(MenuEvent me) { System.out.println("menuDeselected"); } public void menuSelected(MenuEvent me) { System.out.println("menuSelected"); } }); Zum Testen, die Methodennamen geben gut vor, worrauf der Listener reagiert. Gruß, Peter Zitieren
Gast Geschrieben 20. Januar 2004 Geschrieben 20. Januar 2004 Danke, hat auch funktioniert, ich möchte aber, das er mir auf ein MenuItem reagiert, also auf "Programm"->"beenden" und nicht auf "Programm". Zitieren
Morbid_Soul Geschrieben 20. Januar 2004 Geschrieben 20. Januar 2004 Moin, ich glaube für genau den Fall ist der Menulistener garnicht gedacht. Soweit ich weiß, was ja nicht richtig sein muss, ist die Methode mit dem ActionListener gängig, wenn es um das Ausführen von Menuitems geht. Gruß, Peter Zitieren
Gast Geschrieben 20. Januar 2004 Geschrieben 20. Januar 2004 Danke, habe ich dann so realisiert. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.