JMenuItem ActionListener

Status
Nicht offen für weitere Antworten.

Coder21

Aktives Mitglied
Hallo,

ich habe mehrere JMenuItems, alle mit dem gleichen ActionListener.
Nun will ich herausfinden von welchem JMenuItem das Event ausgeht.

Folgendes habe ich schon ausprobiert, hat aber nicht funktioniert:
Code:
JMenuItem gelb=new JMenuItem("Gelb");
JMenuItem rot=new JMenuItem("Rot");
gelb.addActionListener(this);
rot.addActionListener(this);
...

public void actionPerformed(ActionEvent event)
{
     if(event.getSource()==rot)
     ...
}

Ich habe mir schon das Tutorial hier durchgelesen, bei dem diese Methode beschrieben wird, aber irgendwie klappt's bei mir einfach nicht!

Da ich mehrere JMenuItems mit gleichem Text habe, kann ich event.getActionCommand() nicht verwenden.

Danke schonmal für eure Antworten! :wink:
 
was heißt "klappt nicht"? Fehlermeldung? Fehlverhalten? Normal sollte das so gehen. Code schaut korrekt aus.
 
ich will mich jez nicht auf all zu dünnes eis begeben, aber probier mal statt dem doppel-ist-gleich ein equals()
 
dürfte eigentlich kein unterschied machen aber veruschs mal mit equals
 
Auch equals() funktioniert nicht und der ActionListner ist implementiert, sonst würde ja
Code:
rot.addActionListner(this);
eine Fehlermeldung erzeugen.
 
Es macht auch keinen Unterschied. Lass dir in der actionPerformed doch einfach mal das aktuelle Objekt anzeigen. Dann siehst du ja, welches selektiert wurde.
 
Naja, z. B. den Text des Elements ausgeben lassen. Damit kannst du überprüfen, ob auch das richtige übergeben wird.
 
debuge doch einfach mal durch und schau mit inspect deine bedinung an!!!
oder hast du nach dem if() ';' gesetzt
 
Also bei folgendem:
Code:
public void actionPerformed(ActionEvent e)
{
     System.out.println(e);
}

erhalte ich die Ausgabe:
java.awt.event.ActionEvent[ACTION_PERFORMED,cmd=Rot,when=1188817911078,modifiers=Button1] on javax.swing.JMenuItem[,1,87,111x21,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@a39137,
flags=264,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,
margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,
pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Rot]
 
Code:
public void actionPerformed(ActionEvent event)
{
     	if(event.getSource()==rot)
		System.out.println("Rot");
}

Ich bin jetzt nur etwas durcheinander gekommen mit rot und gelb.
 
ja und? Ich wollte wissen ob es jetzt geht ...

Wie kann man mit rot und gelb durcheinander kommen? :lol: es sei denn du hast sowas fabriziert

Code:
rot = new JMenuItem("Gelb");
gelb = new JMenuItem("Rot");
rot.setForeground(Color.red);
rot.setBackground(Color.yellow);
gelb.setForeground(Color.yellow);
gelb.setBackground(Color.red);

😉
 
oder versuch es mal so in der art....
Code:
public class test extends JFrame implements ActionListener
{
	private JMenu menu;
	private JMenuBar bar;
	private JMenuItem rot;
	private JMenuItem gelb;
	public test()
	{
		bar=new JMenuBar();
		
		menu=new JMenu("Rot/Gelb");
		rot=new JMenuItem("Rot");
		rot.addActionListener(this);
		gelb=new JMenuItem("Gelb");
		gelb.addActionListener(this);
		menu.add(rot);
		menu.add(gelb);
		bar.add(menu);
	setJMenuBar(bar);
	setSize(400,400);
	setVisible(true);
	}
	


	public void actionPerformed(ActionEvent event) {
		if(event.getSource()==rot)
		{
			System.out.println("ROT");
		}
		
	}
	
	public static void main(String [] args)
	{
		new test();
	}

	
}
 
Hier ein KSKB:

Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Beispiel extends JFrame implements ActionListener
{
	JTextField tf=new JTextField("Farbe auswählen");
	JMenuBar mbr=new JMenuBar();
	public Beispiel()
	{
		setSize(400,200);
		setLayout(new GridLayout(4,1));
		mbr.add(Farbe());
		setJMenuBar(mbr);
		add(tf);
		setVisible(true);
	}
	JMenuItem rot;
	JMenuItem gelb;
	public JMenu Farbe()
	{
		JMenu Farbe = new JMenu("Farbauswahl");
		JMenuItem rot=new JMenuItem("Rot");
		JMenuItem gelb=new JMenuItem("Gelb");
		rot.addActionListener(this);
		gelb.addActionListener(this);
		Farbe.add(rot);
		Farbe.add(gelb);
		return Farbe;
	}
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==gelb)
			tf.setText("GELB ausgewählt");
		else if(e.getSource()==rot)
			tf.setText("ROT ausgewählt");
	}
	public static void main(String[] args)
	{
		new Beispiel();
	}
}
 
Also dein erstes Beispiel funktioniert bei mir ohne Probleme. Deshalb hab ich dein zweites auch erst gar nicht ausprobiert.

[edit] Achso, das 1. is ja gar net von dir ^^. Mom
 
das 1. ist von mir 🙂

1. attribute schreibt man klein genausowie der methoden anfang
2. attribute schreibt man am anfang einer klasse und warum schreibst du
JMenuItem rot=.....

lass das JMenuItem weg....
 
Das erste Beispiel ist nicht von mir. Das funktioniert auch bei mir, aber mein Beispiel funktioniert nicht!
 
Code:
package test;
import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 

public class Beispiel extends JFrame implements ActionListener 
{ 
   JTextField tf;
   JMenuBar mbr=new JMenuBar(); 
   JMenuItem rot; 
   JMenuItem gelb; 
   public Beispiel() 
   { 
      
      setLayout(new GridLayout(4,1));
      
      tf=new JTextField("Farbe auswählen");
      mbr.add(getMenu() ); 
      setJMenuBar(mbr); 
      getContentPane().add(tf); 
      setSize(400,200); 
      setVisible(true); 
   } 

   public JMenu getMenu() 
   { 

    //Schau dir das hier nochmal an und vergleich es mit deinem 
      JMenu farbe = new JMenu("Farbauswahl"); 
      rot=new JMenuItem("Rot"); 
      gelb=new JMenuItem("Gelb"); 
      rot.addActionListener(this); 
      gelb.addActionListener(this); 
      farbe.add(rot); 
      farbe.add(gelb); 
      return farbe; 
   } 
   public void actionPerformed(ActionEvent e) 
   { 
      if(e.getSource()==gelb) 
         tf.setText("GELB ausgewählt"); 
     
      if(e.getSource()==rot) 
         tf.setText("ROT ausgewählt"); 
   } 
   public static void main(String[] args) 
   { 
      new Beispiel(); 
   } 
}
 
Dein Beispiel kann auch gar nicht funktionieren, da rot und gelb keine Klassenvariablen sind. Bzw. weil du die Klassenvariablen nicht verwendest, sondern neue Objekte erzeugst.
 
doch sie sind klassenvariabeln schau mal vor die Methode Farbe 🙂 🙂 er hat sie mitten rein geschrieben 🙂
 
Wie konnte ich das nur übersehen! 😳

Danke für eure Antworten!
Funktioniert alles. 😀 😀 😀 😀
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben