Swing Menue Event und This

janosch

Erfahrenes Mitglied
HI!

Ich bin ja grad dabei mir ein kleines Tool zu Programmieren. Jetzt habe ich da aber noch eine Frage. Um einen event den ich mit anclicken der Maus auf ein JMenuitem auslöse abfragen zu können benutze ich diese Funktion:
PHP:
			TXT.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("TXT wurde getrückt");
			}
			});
Es kann doch nicht sein das ich diese Funktion jetzt zich mal in den Code rein kopieren muß. Gibt es eine möglich dies mit dem "this" zeiger zu erstzen so das ich nur noch einmal die gesamte Funktion im gesamten Code habe

Hier ist noch der restliche Code schnipel :
PHP:
import java.awt.event.*;
import javax.swing.*;


public class GUI extends JFrame {
	
	private boolean DEBUG = false;
	
	public GUI(){
		
	    super("Study-Tool");
		greatMenuBar();
		greateButtons();

		}

	public void greatMenuBar(){
		    	
		JMenuBar   menuBar;
		JMenu      DateiMenu;
		JMenu      BearbeitenMenu;
		JMenu      EinstellungenMenu;
		JMenu      SuchenMenu;
		JMenu      HilfeMenu;
		JMenu      ExportMenu;
		JMenu      AnsichtMenu;
			
		menuBar = new JMenuBar();
		// Beginn Datei Menü
		DateiMenu = new JMenu("Datei");
		DateiMenu.add(new JMenuItem("Drucken"));
		DateiMenu.add(new JMenuItem("Drucker Einstellen"));
		DateiMenu.add(new JMenuItem("Speichern"));
		ExportMenu = new JMenu("Daten Exportieren als ...");
			// Beginn Sub Menü von "Daten Exportieren als ..."
			JMenuItem HTML =new JMenuItem("HTML");
			JMenuItem XML =new JMenuItem("XML");
			JMenuItem SQL =new JMenuItem("SQL");
			JMenuItem CSV = new JMenuItem("CSV");
			JMenuItem TXT = new JMenuItem("TXT");

			HTML.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("HTML wurde getrückt");
			}
			});
			XML.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("XML wurde getrückt");
			}
			});
			SQL.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("SQL wurde getrückt");
			}
			});
			CSV.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("CSV wurde getrückt");
			}
			});
			TXT.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("TXT wurde getrückt");
			}
			});

			ExportMenu.add(HTML);
			ExportMenu.add(XML);
			ExportMenu.add(SQL);
			ExportMenu.add(CSV);
			ExportMenu.add(TXT);
			// End Sub Menü von "Daten Exportieren als ..."
		DateiMenu.add(ExportMenu);
		DateiMenu.addSeparator();   // Trennlinie
		JMenuItem Beenden = new JMenuItem("Beenden");
		Beenden.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			System.exit(1);
		}
		});
		DateiMenu.add(Beenden);
		// End Datei Menü 
		// Menu Komponenten Registrieren
		menuBar.add(DateiMenu);

		add("North", menuBar);
		
	}
	public void greateButtons(){
	}
}

Vieleicht kann mir ja jemand helfen.

mfg janosch
 
Original geschrieben von janosch
HI!

Ich bin ja grad dabei mir ein kleines Tool zu Programmieren. Jetzt habe ich da aber noch eine Frage. Um einen event den ich mit anclicken der Maus auf ein JMenuitem auslöse abfragen zu können benutze ich diese Funktion:
PHP:
			TXT.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("TXT wurde getrückt");
			}
			});

Es kann doch nicht sein das ich diese Funktion jetzt zich mal in den Code rein kopieren muß. Gibt es eine möglich dies mit dem "this" zeiger zu erstzen so das ich nur noch einmal die gesamte Funktion im gesamten Code habe

Vieleicht kann mir ja jemand helfen.

mfg janosch

Was meinst Du mit zigmal? Es ist schon erforderlich, dass jeder Menüpunkt eine eigene Action bekommt. Oder meinst Du wegen System.out.println(...)? Dann mach das doch einfach so:

Code:
			TXT.addActionListener(new ActionListener()
                              {
			  public void actionPerformed(ActionEvent e)
                                {
			    doWhatIMean(e);
			  }
			});

private void doWhatIMean(ActionEvent ae)
{
 System.out.println("Quelle: " + ae.getSource().toString());
}
 
Moin!

Das jeder Menüpunkt eine eigene Action bekommt ist mir schon klar. Nur kann man es nicht irgendwie so machen das "eine" Funktion jeweils die Aktuelle Action abfrägt und dann darauf reagiert sprich das passende Ereignis dazu auslöst (weitere Funktions aufrufe z.B). Ich hätte da halt an this gedacht.
Bei dieser Funktion:
PHP:
			TXT.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("TXT wurde getrückt");
			}
			});

setze ich ja den "addActionListener" direkt auf das TXT JMenu. Kann man es den nicht z.B so machen:

PHP:
			this.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				prüfe was gedrückt wurde und führe weiter aktionen aus
			}
			});

Diese Funktion solte dan bei jedem Action neu aufgerufen werden. So mit kann man sich ja ein menge Code sparen.
Naja bin ja noch in den Java Kinderschuhen. Aber ich denk das geht irgendwie weiß nur nicht wie ich das umsetzen kann.
Man kann doch bestimmt irgendwie rausbekommen über welchen JMenu Eintrag ich grad mit der Maus drüber fahre bzw. ich grad anklicke.


mfg janosch
 
Zuletzt bearbeitet:
Moin,
this.addActionListener(...) ist eher unüblich. Actions werden normalerweise Komponenten zugefügt, die damit auch etwas anfangen können bzw. die auch Actions auslösen. Wie z.B. Buttons und MenuItems. Mein Vorschlag ist schon die sauberste Lösung, vor allem, wenn hinterher das Verhalten unterschiedlich sein soll.

Aber wenn Du unbedingt willst, kannst Du natürlich auch

this.addActionListener(...)

benutzen. Voraussetzung: Deine Klasse mit dem this implementiert das Interface ActionListener (class... implements ActionListener und implementierung der Methode public void actionPerformed(ActionEvent actionEvent)). In dieser actionPerformed kannst Du dann die Quelle ausfindig machen mit actionEvent.getSource() und auf die in Frage kommenden Komponenten vergleichen.
 

Neue Beiträge

Zurück