ActionListener mit JPanel?

Status
Nicht offen für weitere Antworten.

para_

Bekanntes Mitglied
Hi,

ich habe ein JPanel mit einem Button drauf (100% Size, er füllt das Panel komplett aus). (ist eine Extra Klasse) Kann ich dem JPanel einen ActionListener hinzufügen, so dass bei einem Klick auf den Button die Action ausgeführt wird?

das ganze sieht ungefähr so aus bei mir:

Code:
//...
class MyButton extends JPanel
implements ActionListener, MouseListener, MouseMotionListener{
    
        String text;
        JButton b;

        public MyButton(String s) {
            this.text = s;
            b = new JButton(s);
            add(b);
            b.addMouseListener(this);
            b.addMouseMotionListener(this);
        }

        // hab hier mal versucht zu überschreiben, damit der Button auch einen ActionListener bekommt
        public void addActionListener(ActionListener a) {
            b.addActionListener(a);                     // <- das müsste müll sein, mir ist aber nichts besseres eingefallen :(
                                                                       // müsste warscheinlich die source so setzen, dass das MyButton objekt als source
                                                                       // an das hauptprogramm übergeben wird.. nur wie mach ich das? 
        }

//...weiteres zeug
}

Im Hauptprogramm (implementiert ActionListener) habe ich dann so etwas:

Code:
       // ...
       MyButton b = new MyButton("test");
       b.addActionListener(this);
       // ...
       public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();
            if ( source == b ) machWas();
       }
       // ...

Leider passiert da garnichts :(

Bin für jede Hilfe dankbar :eek:
 

The_S

Top Contributor
Du musst die ActionListener beim Adden z. B. in einer collection speichern und wenn dann dein ActionEvent auftreten soll über alle geaddeden ActionListener iterieren und die jeweilige Methode aufrufen.
 

para_

Bekanntes Mitglied
Hm, ich habe irgendwie Probleme damit. Der Button verdeckt das ganze JPanel in meinem Programm (habe ich oben vergessen, das JPanel hat ein GridLayout), also kommt es nie zu einem actionPerformed im Hauptprogramm :(
Das mit der Collection versteh ich nich so recht. Die müsste ich ja im Hauptprogramm erstellen. Aber weil ich ja einen Button drücke und nicht wirklich das JPanel selbst, kommt, wie schon geschrieben nie ein actionPerformed. :(

Ich habe jetzt ausserdem die überschriebene Methode rausgenommen (addActionListener) und jetzt kann ich dem JPanel natürlich keinen ActionListener mehr hinzufügen.
Also habe ich einen MouseListener hinzugefügt, das GridLayout mit einem FlowLayout ersetzt und mouseClicked abgefragt, wenn ich nun in das JPanel klicke, aber halt außerhalb des Buttons bleibe, funktioniert alles wie ich möchte. Ich möchte halt dass ich den Button klicken kann.

Weisst was ich meine?
 

The_S

Top Contributor
Code:
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class ActionPanel extends JPanel implements MouseListener {
	
	private ArrayList<ActionListener> listener = null;
	
	public ActionPanel() {
		
		listener = new ArrayList<ActionListener>();
		addMouseListener(this);
	}
	
	protected void fireUpdate(ActionEvent evt) {
		
		for (ActionListener al : listener) {
			al.actionPerformed(evt);
		}
	}
	
	public void addActionListener(ActionListener al) {
		listener.add(al);
	}
	
	public void removeActionListener(ActionListener al) {
		listener.remove(al);
	}
	
	
	public void mouseClicked(MouseEvent evt) {
		fireUpdate(new ActionEvent(this, 0, "command"));
	}
	
	public void mousePressed(MouseEvent evt) {}
	public void mouseEntered(MouseEvent evt) {}
	public void mouseReleased(MouseEvent evt) {}
	public void mouseExited(MouseEvent evt) {}
	
	public static void main(String[] args) {
		
		JFrame frame = new JFrame();
		ActionPanel ap = new ActionPanel();
		frame.setContentPane(ap);
		frame.setSize(400, 300);
		ap.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent evt) {
				System.out.println("Da hat wer was geklickt");
			}
		});
		frame.setVisible(true);
	}
}

Zum Selbstauführen und lernen :D . Wenn de das ActionPanel dann verwendest schmeiße vorher natürlich die main-Methode raus ;) .
 

para_

Bekanntes Mitglied
Wow, das funktioniert schon beinahe so wie ich es möchte :D
Was jetzt noch nicht geht ist sicher ein nur ein kleinerer Fehler, das krieg ich bestimmt allein hin, vielen vielen Dank :)

(wieder was gelernt ^-^)
 

para_

Bekanntes Mitglied
So, ich musste natürlich statt
Code:
bt[i].addActionListener(new ActionListener() {
         
         public void actionPerformed(ActionEvent evt) {
               blablabla[i]=bla[i]+blabla[i];
               //mein zeugs
         }
      });
Code:
bt[i].addActionListener(this);
nehmen weil ich sonst eine ArrayOutOfBoundsException kriege (habe ein ganzes Array von diesen JPanels :D )
Ich gehe jetzt in meinem actionPerformed einfach alle JPanels im Array durch und frage ob das aktuelle== e.getSource() ist.

Jetzt geht alles. Nochmal danke :)
 

para_

Bekanntes Mitglied
Hm was meinst du? :)

Dein ActionPanel funktioniert super, habe die Methoden daraus in mein Panel eingebaut.

Da ich aber viele dieser Panel in mein JFrame einbaue, habe ich diese in ein Array gepackt (weil ich vorher nicht weiss, wieviele dieser Panels hinzugefügt werden, es liest nämlich alle Methoden der Klasse eines übergebenen Objektes aus und erstellt für jede public Methode solch ein Panel, wenn man dieses klickt wird die Methode ausgeführt, ich habe dann noch weitere Arrays zb. für die Parameter der Methoden. Darum gehe ich im actionPerformed des Hauptprogrammes (nicht des ActionPanels) alle ActionPanels durch und schaue, ob das geklickte das bt ist. Könnte den Quelltext posten zum besseren Verständnis, aber is ca. 800 Zeilen lang.)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Swing JPanel mit ActionListener mehrfach verwenden AWT, Swing, JavaFX & SWT 8
G ActionListener vom Menu zu JPanel AWT, Swing, JavaFX & SWT 4
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
L actionListener für Button AWT, Swing, JavaFX & SWT 97
R Actionlistener funktioniert nicht AWT, Swing, JavaFX & SWT 4
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
R ActionListener in Actionlistener AWT, Swing, JavaFX & SWT 6
S Swing Variable in Actionlistener aufrufen AWT, Swing, JavaFX & SWT 10
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
coolian ActionListener funktonirt nicht richtig auf JMenuItem AWT, Swing, JavaFX & SWT 4
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
Blender3D einzelner ActionListener vs anonyme ActionListener AWT, Swing, JavaFX & SWT 10
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
xYurisha ActionListener Methoden Buttons zuweisen! AWT, Swing, JavaFX & SWT 16
J ActionListener bei Buttons AWT, Swing, JavaFX & SWT 14
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
it_is_all ActionListener umlenken/ updaten mit AddActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 3
it_is_all Event Handling ActionListener in anderer Klasse klappt nicht AWT, Swing, JavaFX & SWT 4
F "ActionListener" funktioniert nicht AWT, Swing, JavaFX & SWT 4
Z ActionListener Variable übergeben AWT, Swing, JavaFX & SWT 12
T JProgressbar während actionListener updaten AWT, Swing, JavaFX & SWT 1
S While Schleife im Actionlistener AWT, Swing, JavaFX & SWT 1
S ActionListener für alle Buttons AWT, Swing, JavaFX & SWT 26
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
T ActionListener nimmt JTextField nicht mehr an. AWT, Swing, JavaFX & SWT 2
P ActionListener Graphics Einbauen AWT, Swing, JavaFX & SWT 0
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
Liondary GUI - ActionListener AWT, Swing, JavaFX & SWT 7
J ActionListener erkennt Variable nicht AWT, Swing, JavaFX & SWT 6
E ActionListener führt falsche Funktion aus AWT, Swing, JavaFX & SWT 6
Sin137 ActionListener in MVC AWT, Swing, JavaFX & SWT 7
M ActionListener und mathematische Methoden AWT, Swing, JavaFX & SWT 13
A Oberfläche mit zwei Klassen und actionlistener verbinden AWT, Swing, JavaFX & SWT 7
Paul15 ActionListener Variablen AWT, Swing, JavaFX & SWT 13
Y ActionListener AWT, Swing, JavaFX & SWT 2
K Ereignisbehandlung, ActionListener, ActionEvent AWT, Swing, JavaFX & SWT 3
A Gui für Vokabeltrainer (ActionListener) AWT, Swing, JavaFX & SWT 14
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
J Event Handling JOptionPane ActionListener setzen. AWT, Swing, JavaFX & SWT 3
S ActionListener Klasse aufrufen AWT, Swing, JavaFX & SWT 4
R Swing Problem: IOException bei ActionListener AWT, Swing, JavaFX & SWT 1
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
T Einfaches Problem mit ActionListener AWT, Swing, JavaFX & SWT 2
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
K GUI, Button, ActionListener - ein paar Einsteigerprobleme AWT, Swing, JavaFX & SWT 1
W Verschachtelter ActionListener AWT, Swing, JavaFX & SWT 0
G gewünschte ActionListener bei RadioButton mit isSelected geht nicht AWT, Swing, JavaFX & SWT 2
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
K Swing JMenu und ActionListener AWT, Swing, JavaFX & SWT 4
A Swing ActionListener AWT, Swing, JavaFX & SWT 8
V ActionListener Abhängigkeitenproblem AWT, Swing, JavaFX & SWT 6
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
J ActionListener für Buttons AWT, Swing, JavaFX & SWT 3
M Event Handling ActionListener übergeben ich checks net AWT, Swing, JavaFX & SWT 4
C Swing ComboBox - ActionListener deaktivieren AWT, Swing, JavaFX & SWT 2
S Button (ActionListener) funktioniert nicht, wenn y-Koordinate verändert wird AWT, Swing, JavaFX & SWT 5
L Swing ActionListener führt seine Aufgabe nur teilweise aus. AWT, Swing, JavaFX & SWT 7
A Swing ActionListener kann nicht hinzugefügt werden AWT, Swing, JavaFX & SWT 4
P Actionlistener - 3 klassen - kompliziert - auf methoden zugreifen AWT, Swing, JavaFX & SWT 3
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
M ProgressBar in ActionListener AWT, Swing, JavaFX & SWT 4
D AWT eigenem Knopf ActionListener zuweisen AWT, Swing, JavaFX & SWT 24
E Wert aus ActionListener geben AWT, Swing, JavaFX & SWT 4
J ActionListener per Innere Klasse oder e.getActionCommand() if-Abfrage? AWT, Swing, JavaFX & SWT 12
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
P Swing Seltsames ActionListener-Verhalten AWT, Swing, JavaFX & SWT 7
Oliver530 ActionListener von eigener ButtonKlasse AWT, Swing, JavaFX & SWT 16
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 2
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 3
C In der Schleife ActionListener aktivieren AWT, Swing, JavaFX & SWT 3
B Swing Problem beim ActionListener AWT, Swing, JavaFX & SWT 5
1 ActionEvent generieren und an ActionListener weiterleiten AWT, Swing, JavaFX & SWT 12
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
N JCombobox und Actionlistener Aktion nur ausführen, wenn Useraktion ihn auslöst AWT, Swing, JavaFX & SWT 4
N Componente und Actionlistener AWT, Swing, JavaFX & SWT 5
C ActionListener AWT, Swing, JavaFX & SWT 6
Corben ActionListener Error AWT, Swing, JavaFX & SWT 2
F Wert durch ActionListener an Klasse übergeben AWT, Swing, JavaFX & SWT 3
I Swing Problem mit InputMap bei JButton (ActionListener) AWT, Swing, JavaFX & SWT 3
S Swing JButton mit ActionListener innerhalb einer JTable AWT, Swing, JavaFX & SWT 4
P Variablen in einem ActionListener zurücksetzen AWT, Swing, JavaFX & SWT 6
M AWT Problem mit ActionListener AWT, Swing, JavaFX & SWT 2
A Swing Bug in Swing? Wenn checkbox disabled reagiert ActionListener nicht AWT, Swing, JavaFX & SWT 5
S ActionListener "nach oben weitergeben" AWT, Swing, JavaFX & SWT 10
M Anonymer ActionListener AWT, Swing, JavaFX & SWT 4
L SWT Actionlistener Combobox öffnen AWT, Swing, JavaFX & SWT 4
S MenuBar ActionListener Event ... AWT, Swing, JavaFX & SWT 6
B Swing Formular mit mehreren Elementen - wie die ActionListener-Verarbeitung lösen? AWT, Swing, JavaFX & SWT 2
M getSource() findet Button nicht - ActionListener AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben