MenuBar ActionListener Event ...

  • Themenstarter Themenstarter slip1
  • Beginndatum Beginndatum
S

slip1

Gast
Hallo Leute,

ich bin ganz neu hier, also mal ein kräftiges Hallo!
Hab auch gleich ein Problem mitgebracht. Beim klick auf den das MenuItem bekomme ich leider kein Event.

Hier ist meine Menü.

Java:
import java.awt.*;
import java.awt.event.*;

public class PrototypMenuBar extends MenuBar implements ActionListener {
	public PrototypMenuBar() {
	
	}
	
	// create menu bars
	protected MenuBar getMenubar() {
		MenuBar menueLeiste = new MenuBar ();
		Menu users = new Menu("Benutzer verwalten");	 
		MenuItem addUser = new MenuItem("Benutzer hinzufügen/sperren");
		addUser.setActionCommand("addUser");
		addUser.addActionListener(this);
		MenuItem updateUser = new MenuItem("Benutzerdaten aktualisieren");
		addUser.setActionCommand("updateUser");
		addUser.addActionListener(this);
		users.add(addUser);	
		users.add(updateUser);
		menueLeiste.add(users);

		Menu menu = new Menu("Speisekarte verwalten");
		MenuItem areas = new MenuItem("Bereiche erstellen/löschen");
		areas.setActionCommand("createArea");
		areas.addActionListener(this);
		MenuItem meals = new MenuItem("Hauptspeise hinzufügen/löschen");
		areas.setActionCommand("addMeal");
		areas.addActionListener(this);
		menu.add(areas);
		menu.add(meals);
		menueLeiste.add(menu);
    
		Menu orders = new Menu("Bestellungen");
		MenuItem orderToday = new MenuItem("Heutige Bestellungen");
		orderToday.setActionCommand("showOrders");
		orderToday.addActionListener(this);
		orders.add(orderToday);
		menueLeiste.add(orders);
	
		return menueLeiste;
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		 if (e.getActionCommand() == "addUser") {
			 System.out.println("Item clicked: "+e.getActionCommand());
		 }		
	}
}

Ich bin diese Klasse hier ein:

Java:
import java.awt.*;
import java.awt.event.*;

public class PrototypeFrame extends Frame {
	 
	PrototypMenuBar pmb = new PrototypMenuBar();
	
	public PrototypeFrame() {
		super("");
		
		setMenuBar(pmb.getMenubar());
				
		setSize(600, 600);
		setVisible(true);
		
		addWindowListener(new WindowAdapter() {
			public void windowClosing(final WindowEvent e) {
				System.exit(0);
			}
		});
	}
}

Aber es tut sich nichts.

Mein Ziel wäre das wenn ich ein Menüelement klicke, ein neuer Frame der PrototypeFrame erweitert erzeugt wird und der "alte" Frame geschlossen wird.

Kann mir hierzu vielleicht jemand helfen?

Gruß, slip1
 
Java:
...
addUser.setActionCommand("addUser");
addUser.addActionListener(this);
MenuItem updateUser = new MenuItem("Benutzerdaten aktualisieren");
addUser.setActionCommand("updateUser");
...
Du hast zweimal dem addUser ein ActionCommand zugewiesen, als letztes "updateUser". Dann kann der ActionListener ja auchnicht auf "addUser" reagieren.
 
Java:
...
MenuItem addUser = new MenuItem("Benutzer hinzufügen/sperren");
addUser.setActionCommand("addUser");
addUser.addActionListener(this);
MenuItem updateUser = new MenuItem("Benutzerdaten aktualisieren");
addUser.setActionCommand("updateUser");
addUser.addActionListener(this);
...
Ach, ich seh gerade, du hast wahrscheinlich ein copy&paste-Fehler gemacht und nur vergessen, das addUser durch updateUser zu ersetzen.
 
Vielen Dank! Und ich suche schon die ganze Zeit an was es liegt ....

Gleich noch eine Frage hinterher 😉

Wie kann ich es jetzt schaffen, dass ich im ActionEvent jetzt das "alte" Frame schließe?

Java:
@Override
	public void actionPerformed(ActionEvent e) {
		 if (e.getActionCommand() == "addUser") {
			 //System.out.println("Item clicked: "+e.getActionCommand());
			 UserFrame uf = new UserFrame();
			 uf.setVisible(true);
		 }		
	}

Ich kann das neue erstellen, aber wie das zuvor erstellte schließen? Bzw. der neue Frame öffnet sich an einer anderen Position. Wie bleibt die Position an der gleichen Stelle?
 
Zuletzt bearbeitet von einem Moderator:
Zum Beispiel so:
Java:
...
public class PrototypeFrame extends Frame {
     
    PrototypMenuBar pmb = new PrototypMenuBar(this);
...
Dann hast du den Frame auch in der MenuBar und kannst drauf zugreifen.
 
Bei mir funktioniert das so aber nicht.

Es gibt bei mir noch andere Frames die den PrototypFrame erweitern, zb:

Java:
import java.awt.*;
import java.awt.event.*;

import javax.swing.Box;
import javax.swing.BoxLayout;

public class AreaFrame extends PrototypeFrame {
	private Label areaLabel;
	private TextField areaTextField;
	private Button addButton;
	private Button deleteButton;
	 	
	public AreaFrame() {
		setTitle("Bereiche verwalten");
		
		setLayout(new FlowLayout());
		
		areaLabel = new Label("Bereich:");
		add(areaLabel);
		
		areaTextField = new TextField(25);
		add(areaTextField);
		
		addButton = new Button("hinzufügen");
		add(addButton);
		deleteButton = new Button("löschen");
		add(deleteButton);
	}
}

Und jetzt will ich, dass in der actionPerformed der alte Frame geschlossen wird und der neue an derselben Position neu geöffnet wird. Kannst du mir das etwas genauer erklären?
 
Sorry, hat ein bisschen länger gedauert. Ich kenn deine genaue Programmstruktur nicht, aber wenn du über den ActionListener im Menu den Frame schliessen willst, dann musst du diesen Frame irgendwie der MenuBar übergeben oder bekanntmachen, damit dort darauf zugegriffen werden kann. Aber vielleicht hat ja noch wer anderes eine bessere Idee...
 

Neue Themen


Zurück
Oben