Action Listener

Status
Nicht offen für weitere Antworten.
A

Alerion

Gast
Hallo,

Ich habe bei meinem Programm eine Menüleiste und möchte natürlich, dass das Programm reagiert, wenn ich auf einen der Menüeinträge klicke. Irgendwie funktioniert das aber nicht so, wie ich mir das vorstelle.

Code:
public class SimpleTableFrame extends JFrame implements ActionListener
{ 

    //Path variable
    private static final String path = "PATH/";
    //JTable table 
    private JTable m_simpleTable; 
    //JTable model 
    private SimpleTableModel m_simpleTableModel; 

[...]

    public static void main(String[] arg) 
    { 
        SimpleTableFrame m = new SimpleTableFrame(); 
         
        m.setVisible(true); 
        m.setSize(new Dimension(600, 300)); 
        m.validate(); 
        
        // Menübalken einfügen
        JMenuBar jMenuBar1 = new JMenuBar();
		m.setJMenuBar(jMenuBar1);
		{
			JMenu jMenu1 = new JMenu();
			jMenuBar1.add(jMenu1);
			jMenu1.setText("Menü");
			{
				JMenuItem MenNewFile = new JMenuItem("Neue Einkaufsliste");		
				JMenuItem MenOpenFile = new JMenuItem("Öffne Einkaufliste");
				JMenuItem MenSaveFile = new JMenuItem("Einkaufsliste speichern");
				JSeparator MenSep = new JSeparator();
				JMenuItem MenExit = new JMenuItem("Beenden");
				
				jMenu1.add(MenNewFile);
				jMenu1.add(MenOpenFile);			
				jMenu1.add(MenSaveFile);
				jMenu1.add(MenSep);	
				jMenu1.add(MenExit);
				
				MenOpenFile.addActionListener(m);
				MenNewFile.addActionListener(m);
				MenSaveFile.addActionListener(m);
				MenExit.addActionListener(m);
			}

		}
		
    }

    public void actionPerformed(ActionEvent evt)
    {
    
    	System.out.println("Menüeintrag" + evt.getSource()+ "gewählt");
    	// Code
    		
    }

In actionPerformed geht der anscheinend gar nicht rein. Kann mir jemand erklären, was ich da verdreht habe und wie ich es in Ordnung bringe?

Gruß
Alerion
 

foobar

Top Contributor
Hab den Code mal etwas aufgeräumt:
Code:
import java.awt.Dimension;
import java.awt.event.*;

import javax.swing.*;

public class SimpleTableFrame extends JFrame implements ActionListener
{
    //Path variable
    private static final String path = "PATH/";
    //JTable table
    private JTable simpleTable;
    //JTable model
    
    public SimpleTableFrame()
    {
            JMenuBar jMenuBar1 = new JMenuBar();
            setJMenuBar(jMenuBar1);
            JMenu jMenu1 = new JMenu();
            jMenuBar1.add(jMenu1);
            jMenu1.setText("Menü");
            JMenuItem MenNewFile = new JMenuItem("Neue Einkaufsliste");      
            JMenuItem MenOpenFile = new JMenuItem("Öffne Einkaufliste");
            JMenuItem MenSaveFile = new JMenuItem("Einkaufsliste speichern");
            JSeparator MenSep = new JSeparator();
            JMenuItem MenExit = new JMenuItem("Beenden");
            
            jMenu1.add(MenNewFile);
            jMenu1.add(MenOpenFile);         
            jMenu1.add(MenSaveFile);
            jMenu1.add(MenSep);   
            jMenu1.add(MenExit);
            
            MenOpenFile.addActionListener(this);
            MenNewFile.addActionListener(this);
            MenSaveFile.addActionListener(this);
            MenExit.addActionListener(this);
            
            setSize(new Dimension(600, 300));
            setVisible(true);
            
    }
    
    

    public void actionPerformed(ActionEvent evt)
    {
       System.out.println("Menüeintrag" + evt.getSource()+ "gewählt");
       // Code
    }
    
    public static void main(String[] arg)
    {
        new SimpleTableFrame();
    }
}
 
A

Alerion

Gast
Hm, warum finde ich das dann bei mir nirgendwo? Ich benutze Eclipse, müsste ich das dann nicht auf der Console finden?

@foobar

Danke für's Aufräumen, werde das bei mir auch gleich mal machen. :)
 

Redfrettchen

Bekanntes Mitglied
Jo, eigentlich schon. Versuch mal die Console ganz zu schließen und starte dann deine Anwendung aus Eclipse heraus nochmal.
 
A

Alerion

Gast
Ok... Anscheinend war ich einfach zu doof, jetzt steht es bei mir plötzlich auch da.

Kann mir jemand einen Tipp geben, wie ich am besten feststelle, auf welchen Menüeintrag geklickt wurde? Ich möchte bei "öffnen" gern einen FileChooser öffnen. Ich mach sowas zum ersten Mal und bin ein bisschen am Schwimmen.
 

foobar

Top Contributor
Da gibt es mehrere Möglichkeiten:
- für jeden Menüeintrag einen anonymen ActionListener implementieren:

Code:
mniFoo = new JMenuItem("Foo");
mniFoo.addActionListener(new ActionListener()
{
   public void actionPerformed(ActionEvent e)
  {
     // do something
  }
}

- du hast einen globalen ActionListener, so wie du das auch gemacht hast. Dann mußt du jedem MenuITem einen ActionCommend geben und in der actionPerformed-Methode überprüfen welcher ActionCommand übergeben wurde.

Ich finde die Variante mit den anonymen Klassen am überscihtlichsten, aber das ist Geschmacksache.
 
A

Alerion

Gast
Vielen Dank für die Hilfe. Ich denke, ich versuche es mal mit dem anonymen ActionListener, der scheint mir für den Moment auch übersichtlicher.
 

Redfrettchen

Bekanntes Mitglied
Also ich mach das immer mit einem ActionListener, der entweder eine anonyme oder eine innere Klasse ist. Man kann sich auch eine Action bauen, aber das find ich persönlich übertrieben. Also zum Beispiel sähe das mit dem Datein öffnen so aus:
Code:
public Menubar extends JMenubar {

    private JMenuItem open;

    public Menubar() {
        open= new JMenuItem("Öffnen");
        open.addActionListener(new OpenAction());
        add(open);
    }

    class OpenAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            JFileChooser fc = new JFileChooser();
            if (chooser.showOpenDialog(mainFrame)!=JFileChooser.APPROVE_OPTION) {
		return false;
            }
            // machste was...
        }
    }
}

Die innere Klasse kannst du natürlich auch als anonyme modellieren, wenn nicht ganz so viel drinn steht.
 

Alerion

Mitglied
*jetzt doch mal registriert*

Also ich habe das jetzt so geschrieben:

Code:
MenOpenFile.addActionListener(new ActionListener(){
					public void actionPerformed(ActionEvent e) 
					  { 
						System.out.println("Anonym: Menüeintrag: " + e.getSource()+ "gewählt");
						JFileChooser FileChooser = new JFileChooser(path);
						int returnVal = FileChooser.showOpenDialog(null);
						if (returnVal == JFileChooser.APPROVE_OPTION)
						{
							//do whatever
						}
						// do something 
					  }
				});

Was ist da besser?
 

Redfrettchen

Bekanntes Mitglied
Ah, jetzt ja! :)

Naja, der meiste Code liegt ja wahrscheinlich im APPROVE-Zweig, während wenn der Benutzer abbricht, kaum etwas passieren sollte. Deshalb hab breche ich ab, wenn der Benutzer Abbruch drückt, damit ich nicht so viel eingerückten Code habe (die heilige 80 Zeichen Grenze!) ;)

Derselbe Grund liegt auch bei der Bevorzugung der inneren Klasse zu Grunde. Außerdem kannst du den Listener auch nochmal für z.B. einen Toolbar-Button wiederverwenden.

Das mit dem Zwischenspeichern des Rückgabewerts ist natürlich auch noch sinnvoll, da hab ich einfach mal ein bissel geschludert, aber damit kann man natürlich auch die 80 Zeichen einhalten ohne hässliche Zeilenumbrüche.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
J Action Listener Rückgabewert AWT, Swing, JavaFX & SWT 14
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
F In Action Listener TextFields einlesen und prüfen. Abbruch bei falschen Eingaben. Wie mache ich das? AWT, Swing, JavaFX & SWT 2
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
H Problem mit dem Action listener.... AWT, Swing, JavaFX & SWT 2
S Action Listener in innerer Klasse ausführen. AWT, Swing, JavaFX & SWT 8
L Action listener in bestimmter spalte AWT, Swing, JavaFX & SWT 2
J AWT Action Listener etc. AWT, Swing, JavaFX & SWT 7
S Combo Box action listener AWT, Swing, JavaFX & SWT 2
A Action listener von Button AWT, Swing, JavaFX & SWT 5
0 (Action)Listener auslagern? AWT, Swing, JavaFX & SWT 9
F Problem mit Action Listener in privater inneren Klasse AWT, Swing, JavaFX & SWT 6
G Action Listener erzeugen AWT, Swing, JavaFX & SWT 6
M JavaFX Button action abhängigkeit von Tab AWT, Swing, JavaFX & SWT 1
Z Befehl Action Event Verlassen AWT, Swing, JavaFX & SWT 4
3 JComboBox - Action - Auslesen & Umwandeln AWT, Swing, JavaFX & SWT 9
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
K Swing KeyBinding: Action wird nicht ausgelöst AWT, Swing, JavaFX & SWT 3
K Array von einer Action zur anderen bringen AWT, Swing, JavaFX & SWT 7
T action für Button übergeben - bitte um Segen AWT, Swing, JavaFX & SWT 1
G mehrere Action-Abfolgen erfassen AWT, Swing, JavaFX & SWT 6
I Button Action AWT, Swing, JavaFX & SWT 6
C Swing MenuItem feuert Action nur wenn disabled AWT, Swing, JavaFX & SWT 2
J SWT Rechteck Füllfarbe wird bei Action falsch gefüll AWT, Swing, JavaFX & SWT 2
D Drag-Action: Innerhalb meiner View? AWT, Swing, JavaFX & SWT 3
alex_fairytail Swing Textfeld Action wenn geschrieben wird? AWT, Swing, JavaFX & SWT 6
R innere Action -> auf äußeres this zugreifen AWT, Swing, JavaFX & SWT 3
P Action Event abfangen etwas anders? AWT, Swing, JavaFX & SWT 2
N Swing nach Fensterrand Action ausführen? HILFE AWT, Swing, JavaFX & SWT 7
L ComboBox in Action AWT, Swing, JavaFX & SWT 4
M SWT Jface Action und localised Strings AWT, Swing, JavaFX & SWT 6
I Button Action AWT, Swing, JavaFX & SWT 4
K GUI, Action AWT, Swing, JavaFX & SWT 4
B Frage zu Button-Action AWT, Swing, JavaFX & SWT 3
J Action before actionPerformed! AWT, Swing, JavaFX & SWT 4
K Swing Wie ändere ich die default action für Drag&Drop AWT, Swing, JavaFX & SWT 6
M JButton Action Problem AWT, Swing, JavaFX & SWT 3
K Action.MNEMONIC mit char belegen. AWT, Swing, JavaFX & SWT 2
M Action.DISPLAYED_MNEMONIC_INDEX_KEY geht nicht mehr AWT, Swing, JavaFX & SWT 2
O Action Event auslösen bei unbekanntem JTextField AWT, Swing, JavaFX & SWT 3
G SWT ApplicationActionBarAdvisor Action AWT, Swing, JavaFX & SWT 11
G Action? AWT, Swing, JavaFX & SWT 2
K kleine frage zum Spinner (bezüglich Action) AWT, Swing, JavaFX & SWT 2
S Action Handler JButton AWT, Swing, JavaFX & SWT 15
S Buttons werden nach action grau AWT, Swing, JavaFX & SWT 4
S Action mit 2 verschiednen texten AWT, Swing, JavaFX & SWT 2
A SWT: Action über Hotkey ausführen AWT, Swing, JavaFX & SWT 2
G Action.setCheck(boolean)? AWT, Swing, JavaFX & SWT 6
A Mit der Combobox eine Action auslösen AWT, Swing, JavaFX & SWT 2
X Action aktivieren AWT, Swing, JavaFX & SWT 2
J mehrere Action Buttons mit einer ActionListener Methode AWT, Swing, JavaFX & SWT 7
S JMenuBar mit Action belegen! AWT, Swing, JavaFX & SWT 5
R action performed und IOException AWT, Swing, JavaFX & SWT 4
F Wo kann ich eine Action einsetzen? AWT, Swing, JavaFX & SWT 2
F Action ausführen? AWT, Swing, JavaFX & SWT 3
C tree action AWT, Swing, JavaFX & SWT 8
W Bei hinzufügen der Action verliert Button Text,Tooltip, etc AWT, Swing, JavaFX & SWT 5
B Problem mit Übergabe bei action in andere Klasse AWT, Swing, JavaFX & SWT 4
X Action und Frame AWT, Swing, JavaFX & SWT 3
K Jtree und Action Event AWT, Swing, JavaFX & SWT 6
padde479 MenuItem MouseEvent/-Listener AWT, Swing, JavaFX & SWT 5
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
J Key-Listener in Java AWT, Swing, JavaFX & SWT 37
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
M List Listener AWT, Swing, JavaFX & SWT 37
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
U Funktionsweise Listener AWT, Swing, JavaFX & SWT 1
L TextField Listener AWT, Swing, JavaFX & SWT 13
K Nullpointer Combobox Listener AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Salo JTabel Selection listener Bsp. AWT, Swing, JavaFX & SWT 5
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
MaxG. Swing JMenu einen Listener Hinzufügen AWT, Swing, JavaFX & SWT 25
L JavaFX Verbindung zwischen Beschreibung und Listener (Codebehind Klasse) AWT, Swing, JavaFX & SWT 4
T Swing Methode in Listener aufrufen AWT, Swing, JavaFX & SWT 3
S Swing Tabellen - Listener & richtige Row AWT, Swing, JavaFX & SWT 3
S Erste Schritte mit GUI - Fileverarbeitung, Listener,... AWT, Swing, JavaFX & SWT 10
M JButton - Listener AWT, Swing, JavaFX & SWT 1
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
K JavaFX Focus Listener für gesamte Scene AWT, Swing, JavaFX & SWT 1
M Key Listener reagiert nicht AWT, Swing, JavaFX & SWT 4
M Listener funktioniert nicht AWT, Swing, JavaFX & SWT 7
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
llabusch Event Handling Listener spielt verrückt AWT, Swing, JavaFX & SWT 8
kaoZ Swing Architektonisches Problem / Listener / MVC AWT, Swing, JavaFX & SWT 14
H org.eclipse.swt.widgets.Scale MouseRelease listener AWT, Swing, JavaFX & SWT 1
MaDDin-94 Swing Listener reagiert nicht immer AWT, Swing, JavaFX & SWT 2
A JLabel im Listener färben AWT, Swing, JavaFX & SWT 11
M Key-,... Listener funktioniert nicht immer AWT, Swing, JavaFX & SWT 2
P Event Handling Listener beim öffnen von einem JPopupMenu AWT, Swing, JavaFX & SWT 3
A Listener für JGTextField AWT, Swing, JavaFX & SWT 2
J Programmierstil: Kommunikation Listener und GUI AWT, Swing, JavaFX & SWT 3
B JTable Renderer / Listener AWT, Swing, JavaFX & SWT 7
M Swing JList Listener AWT, Swing, JavaFX & SWT 20

Ähnliche Java Themen


Oben