Zum Inhalt springen

Auf ein MenuEvent reagieren. (swing)


Empfohlene Beiträge

Geschrieben

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

	}

}

Geschrieben

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

Geschrieben

Hat geklappt, danke.

Mal eine Folgefrage: Auf was reagiert denn der MenuListener? Dem MenuItem kann ich leider keinen MenuListener hinzufügen, nur den ActionListener.

Geschrieben

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 :)

Geschrieben

Danke, hat auch funktioniert, ich möchte aber, das er mir auf ein MenuItem reagiert, also auf "Programm"->"beenden" und nicht auf "Programm".

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...