Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Auf ein MenuEvent reagieren. (swing)

Empfohlene Antworten

Veröffentlicht

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

	}

}

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

Hat geklappt, danke.

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

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

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

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

Danke, habe ich dann so realisiert.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.