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); } }
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
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.
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
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".
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden