JButton in JComponent abfragen

Status
Nicht offen für weitere Antworten.

Macki

Mitglied
Hallo zusammen,

habe folgende Frage: Gibt es eine möglichkeit innerhalb eines JComponent abzufragen, ob ein JButton gedrückt wurde, ohne den Umweg über actionPerformed?

Zur besseren Übersicht gebe ich mal ein einfaches Beispiel:

Code:
public JComponent Verbuendeter() {
freund.removeAll();
freund.repaint();
JLabel pic1 =new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/Verbündete/Simbah.jpg"));
JButton freundlich = new JButton("freundlich ansprechen");
freundlich.addActionListener(this);
freundlich.setActionCommand("freundlicha");
freundlich.setBounds(350,300,200,30);
pa1 = new JLabel("Euer Beobachter ist ein Waldgreif");
pa1.setBounds(150,0,1000,100);
pa1.setFont(f);
pic1.setLayout(null);
pic1.setOpaque(false);
pic1.add(pa1);
pic1.add(freundlich);
freund.add(pic1);
return freund;
}

So, ich möchte nun, wenn der Button freundlich gedrückt wurde, genau die gleiche Seite wieder aufrufen, alles bleibt gleich nur ein neues JLabel kommt an einer bestimmten Stelle dazu.

Normalerweise würde ich das über actionPerformed machen. Da ich aber über 180 solche Abfragen brauche (das ganze ist für ein Spiel, in dem der Held einen Verbündeten auf eine gewisse Art anreden muss um ihn in die Gruppe aufzunehmen) möchte ich ungerne 180x das gleich JComponent machen (mit jeweils einer Änderung, je nach Wahl des Knopfes) und diese dann über unmengen von actionPerformed abfragen.

Nochmal meine Frage:
Kann ich in einem JComponent abfragen ob, und wenn welcher Knopf ausgewählt wurde? (wenn das gehen sollte, wäre ein Beispiel lieb, damit ich weiß, wie man das implementiert!

Sollte das nicht gehen, ist hier vielleicht jemand, der eine bessere Lösung hat, als über die zig actionperformed.

Liebe Grüße
Macki
 

Wildcard

Top Contributor
wtf? :shock:
Eine falsch benannte Methode die wild auf nicht von ihr erstellten Komponenten Dinge entfernt/hinzufügt und unnötigerweise eine JComponent zurückliefert?
Versuch mal den größeren Kontext zu beschreiben, ich glaube da liegt was im Argen :?
 

Macki

Mitglied
Größerer Kontext...

Mhh das ist schwierig, da müsste ich ja nun den komplett Quellcode meines Spieles hier posten, mal abgesehen davon, dass es dann bald nicht mehr MEIN Spiel wäre, ist der Code auch mehr als hundert Seiten lang, und ich bezweifle stark, dass den dann noch jemand lesen will^^

Also mal schauen:

ich habe ein JPanel haupt
und ein JFrame Startseite

dann kommt folgendes:

Code:
startseite.getContentPane().add(haupt, BorderLayout.CENTER);
JFrame.setDefaultLookAndFeelDecorated(true);
startseite.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
startseite.setSize(1024, 768);
startseite.setVisible(true);

so und nun habe verschiedene (sehr viele) weitere JPanel, die ich über die Methode JComponent jeweils gestalte (wie ich die gestalte kann man ja in meinem ersten Post sehen) und dann dem JPanel haupt zuweise. Wie zum Beispiel so:

Code:
haupt.removeAll();
Gruppebetreuen();
haupt.add(gruppe);
haupt.validate();

Mittels JButton und actionperformed starte ich dann die jeweils gewünschte JComponent-Methode und bekomme so die nächste "Seite" des Spiels (sind jeweils quasi einzelne Bilder, durch die man sich zum Ziel klickt und ab und zu ein bischen kämpfen muss).

Zurück zu meiner anfänglichen Frage:

Ich will also mit den JButtons, gibt jeweils drei (freundlich, neutral, feindlich), ein neues JLabel dem gerade aktuellen JPanel zuweisen. Ich würde das eigentlich so machen, dass ich die alte JComponent-Methode (die mir die ursprüngliche Seite anzeigt) umbenenne und sie mir per Knopfdruck nochmal in neuer Version anzeigen lasse. Das ist mir aber (es gibt 26 Verbündete a 9 mögliche Auswahl-Methoden (3x Auswahl zwischen den 3 Buttons) macht ergo über 180 JComponents und das kann es ja nicht sein!). Ich weiß, dass meine Art diese Dinge zu lösen bei 80, wenn nicht mehr, % der Leute starkes Kopfschütteln hervorruft. Zu meiner Entschuldigung sei gesagt: ich hatte nur einen Einführungskurs in Java an der Uni, aber das proggen machte einfach zu viel Spaß.

Ich hoffe das hat geholfen!

Liebe Grüße
Macki
 

Azrahel

Bekanntes Mitglied
Hmm du kannst auch auf alle Buttons den gleichen Listener setzen, und dann mit getSource() aus dem event rausfischen welcher Button gedrückt wurde.

hab jetzt grad nur nen MouseListener zur Hand in dem ich so was mache:
Code:
		p.addMouseListener(new MouseListener(){

			public void mouseClicked(MouseEvent arg0) {
			}

			public void mousePressed(MouseEvent arg0) {				
			}

			public void mouseReleased(MouseEvent arg0) {
			}

			public void mouseEntered(MouseEvent arg0) {
				((JPanel)arg0.getSource()).setOpaque(true);
				((JPanel)arg0.getSource()).setBackground(Color.RED);
			}

			public void mouseExited(MouseEvent arg0) {
				((JPanel)arg0.getSource()).setOpaque(false);
				((JPanel)arg0.getSource()).setBackground(Color.GREEN);
			}
			
		});

in deinem Fall müssteste halt abfragen ob ((JPanel)arg0.getSource==myButton

sollte eigentlich gehen. Was du dazu halt brauchst ist noch ne Referenz auf jeden Button, damit du vergleichen kannst. Hilft dir das weiter?
 

Wildcard

Top Contributor
Warum lässt du es nicht bei einem Panel das seinen Inhalt ändert?
Du hast also immer 3 Buttons?
Setz den Buttons doch einfach Actions. Eine Action ruft dann Beispielsweise folgende Methoden auf:
Code:
label.setText("blah blah");
component.setImage("blah blah");
button1.setAction(new FaselAction());
button2.setAction(new FoobarAction());
button3.setAction(new BluppAction());
Jede deiner Seiten würde also nur durch eine Action repräsentiert und du brauchst keine Swing komponenten auszutauschen.
 

Macki

Mitglied
Azrahel hat gesagt.:
Hmm du kannst auch auf alle Buttons den gleichen Listener setzen, und dann mit getSource() aus dem event rausfischen welcher Button gedrückt wurde.


in deinem Fall müssteste halt abfragen ob ((JPanel)arg0.getSource==myButton

sollte eigentlich gehen. Was du dazu halt brauchst ist noch ne Referenz auf jeden Button, damit du vergleichen kannst. Hilft dir das weiter?

Mhh wie gesagt, bin eher noob mit viel Spaß an der Sache, von daher kann ich nicht genug beurteilen ob mir das hilft.

Code:
public JComponent Verbuendeter() {
	freund.removeAll();
	freund.repaint();
	JLabel pa1;
	JLabel pa2;
	JButton weiter = new JButton("Reise fortsetzen");
	weiter.addActionListener(this);
	weiter.setActionCommand("weiter");
	weiter.setBounds(550,650,200,30);
	JButton freundlich = new JButton("freundlich ansprechen");
	freundlich.addActionListener(this);
	freundlich.setActionCommand("freundlicha");
	freundlich.setBounds(350,300,200,30);
	JButton neutral= new JButton ("neutral ansprechen");
	neutral.addActionListener(this);
	neutral.setActionCommand("neutrala");
	neutral.setBounds(350,400,200,30);
	JButton feindlich = new JButton("aggressiv ansprechen");
	feindlich.addActionListener(this);
	feindlich.setActionCommand("feindlicha");
	feindlich.setBounds(350,500,200,30);
	JButton einladen = new JButton("In Gruppe einladen");
	einladen.addActionListener(this);
	einladen.setActionCommand("einladen");
	einladen.setBounds(100,500,200,30);
	int verbart =(int)Math.ceil(Math.random()*6);
	switch(verbart){
	case 1:
		JLabel pic1 =new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/Verbündete/Simbah.jpg"));
		pa1 = new JLabel("Euer Beobachter ist ein Waldgreif");
		pa1.setBounds(150,0,1000,100);
		pa1.setFont(f);
		pa2=new JLabel("Wie wollt Ihr ihn ansprechen?");
		pa2.setBounds(300,100,1000,100);
		pa2.setFont(f4);
		pic1.setLayout(null);
	    pic1.setOpaque(false);
		pic1.add(pa1);
		pic1.add(pa2);
		pic1.add(freundlich);
		pic1.add(neutral);
		pic1.add(feindlich);
		pic1.add(einladen);
		pic1.add(weiter);
		freund.add(pic1);
		verbundet=1;
		break;
	case 2:
		JLabel pic2 =new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/Verbündete/Emlog.jpg"));
		pa1 = new JLabel("Euer Beobachter ist ein Zentaure");
		pa1.setBounds(150,0,1000,100);
		pa1.setFont(f);
		pa2=new JLabel("Wie wollt Ihr ihn ansprechen?");
		pa2.setBounds(300,50,1000,100);
		pa2.setFont(f4);
		pa2.setForeground(hell);
		pa1.setForeground(hell);
		pic2.setLayout(null);
	    pic2.setOpaque(false);
		pic2.add(pa1);
		pic2.add(freundlich);
		pic2.add(neutral);
		pic2.add(feindlich);
		pic2.add(einladen);
		pic2.add(weiter);
		pic2.add(pa2);
		freund.add(pic2);
		verbundet=2;
		break;
	case 3:
		JLabel pic3 =new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/Verbündete/Nasalurk.jpg"));
		pa1 = new JLabel("Euer Beobachter ist eine junge Drachenreiterin");
		pa1.setBounds(50,0,1000,100);
		pa1.setFont(f);
		pa2=new JLabel("Wie wollt Ihr sie ansprechen?");
		pa2.setBounds(300,50,1000,100);
		pa2.setFont(f4);
		pic3.setLayout(null);
	    pic3.setOpaque(false);
		pic3.add(pa1);
		pic3.add(pa2);
		pic3.add(freundlich);
		pic3.add(neutral);
		pic3.add(feindlich);
		pic3.add(einladen);
		pic3.add(weiter);
		freund.add(pic3);
		verbundet=3;
		break;
	case 4:
		JLabel pic4 =new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/Verbündete/Lesara.jpg"));
		pa1 = new JLabel("Euer Beobachter ist ein Eisgreif");
		pa1.setBounds(150,0,1000,100);
		pa1.setFont(f);
		pa2=new JLabel("Wie wollt Ihr ihn ansprechen?");
		pa2.setBounds(300,50,1000,100);
		pa2.setFont(f4);
		pa2.setForeground(hell);
		pa1.setForeground(hell);
		pic4.setLayout(null);
	    pic4.setOpaque(false);
		pic4.add(pa1);
		pic4.add(pa2);
		pic4.add(freundlich);
		pic4.add(neutral);
		pic4.add(feindlich);
		pic4.add(einladen);
		pic4.add(weiter);
		freund.add(pic4);
		verbundet=4;
		break;
	case 5:
		JLabel pic5 =new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/Verbündete/Kubalmira.jpg"));
		pa1 = new JLabel("Euer Beobachter ist ein Chimären-Mündel");
		pa1.setBounds(150,0,1000,100);
		pa1.setFont(f);
		pa2=new JLabel("Wie wollt Ihr sie ansprechen?");
		pa2.setBounds(300,50,1000,100);
		pa2.setFont(f4);
		pa2.setForeground(hell);
		pa1.setForeground(hell);
		pic5.setLayout(null);
	    pic5.setOpaque(false);
		pic5.add(pa1);
		pic5.add(pa2);
		pic5.add(freundlich);
		pic5.add(neutral);
		pic5.add(feindlich);
		pic5.add(einladen);
		pic5.add(weiter);
		freund.add(pic5);
		verbundet=5;
		break;
	case 6:
		JLabel pic6 =new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/Verbündete/Kendor.jpg"));
		pa1 = new JLabel("Euer Beobachter ein Auelb");
		pa1.setBounds(250,0,1000,100);
		pa1.setFont(f);
		pa2=new JLabel("Wie wollt Ihr ihn ansprechen?");
		pa2.setBounds(350,50,1000,100);
		pa2.setFont(f4);
		pic6.setLayout(null);
	    pic6.setOpaque(false);
		pic6.add(pa1);
		pic6.add(pa2);
		pic6.add(freundlich);
		pic6.add(neutral);
		pic6.add(feindlich);
		pic6.add(einladen);
		pic6.add(weiter);
		freund.add(pic6);
		verbundet=6;
		break;
	}
	return freund;

Dies ist die Klasse um die es sich handelt. Ich wüsste nun leider nicht genau, wie ich deinen Code da jetzt richtig implementiere.

Trotzdem auf jeden Fall schon einmal lieben Dank für eure Hilfe!

Liebe Grüße
Macki
 

Macki

Mitglied
Ähem....

will wirklich nicht nerven, aber ich konnte dieses dumme Problem noch immer nicht lösen. Bin dank eurer Tipps zwar auf die Lösung eines anderes Problems gekommen. Konnte eure Tipps aber leider noch nicht in neuen Code umsetzen.

Kann mir da vielleicht noch einer von euch weiterhelfen?

Liebe Grüße
Macki
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
J Swing JFrame slideout, wenn JButton gedrückt wurde AWT, Swing, JavaFX & SWT 0
S Swing Rückmeldung für JButton AWT, Swing, JavaFX & SWT 4
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
E JButton füllt ganzes JPanel auf AWT, Swing, JavaFX & SWT 6
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
Kandum Swing JButton - onclick -> Grafikfehler AWT, Swing, JavaFX & SWT 2
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
M Problem mit FlowLayout, JLabel und JButton AWT, Swing, JavaFX & SWT 4
M JButton wird von JTree überdeckt AWT, Swing, JavaFX & SWT 4
D Swing JButton.setenabled(true) funktioniert nicht AWT, Swing, JavaFX & SWT 12
B JButton ausblenden AWT, Swing, JavaFX & SWT 12
G JButton deaktivieren greift nicht AWT, Swing, JavaFX & SWT 14

Ähnliche Java Themen

Neue Themen


Oben