Button Text mit Action Listener [Hilfe!]

TaCqz

Mitglied
Hallo Leute,

Ich bin relativ neu mit Java. Ich habe jetzt versucht einen Frame mit drei Buttons zu erstellen. Das hat auch geklappt. Jetzt habe ich aber zwei Fragen:

1. Wie kann ich mithilfe eines ActionListeners den Text auf dem Knopf wechseln?

2. Wie kann ich per Knopfdruck ein JPopupMenu öffnen?

Ich habe 1. schon ausprobiert, jedoch funktioniert das nicht ganz :/

Hier der Quelltext:

Java:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPopupMenu;
import javax.swing.plaf.basic.BasicButtonListener;


public class ProgrammStart {

JPopupMenu go;
JFrame frame;
JButton startKnopf;
JButton trolled;
	
	
	
	
	public static void main(String[] args) {
		
		ProgrammStart gui = new ProgrammStart ();
		
		gui.los();
		
	}	
		
		public void los() {
		
		JFrame menu = new JFrame("Jump it!    Hauptmenu");
		
		JButton startKnopf = new JButton("Spiel Starten");
		
		startKnopf.addActionListener(new JButtonListener());		
		
		
		JButton optionen = new JButton("Optionen");
		JButton trolled = new JButton("HAHA");
		JButton info = new JButton("Info");
		
		
		menu.setSize(600, 400);
		menu.getContentPane().add(BorderLayout.WEST, startKnopf);
		menu.getContentPane().add(BorderLayout.EAST, optionen);
		menu.getContentPane().add(BorderLayout.SOUTH, info);
		
		
		go.setSize(800, 600);
		
		
		menu.setVisible(true);

		

	}


	class JButtonListener implements ActionListener {
		public void actionPerformed(ActionEvent event) {
			
			startKnopf.setText("HAHA");
			
			
			
			
			
			
		}
	
	
	
	
	}
}

Danke im voraus,
TaCqz
 

Fab1

Top Contributor
Ich habe das Gefühl, du kommst etwas durcheinander. Versuch immer ein Problem nach dem anderen zu lösen.

Zum Beispiel versuchst du das PopupMenu "go" zu ändern obwohl noch kein Objekt davon erzeugt wurde. Somit bekommst du natürlich den angezeigten Fehler. (NullPointerException)

Dein Ansatz zum ändern des Button Texts war ganz vernünftig, nur das du zweimal eine Variable "startknopf" initialisiert hast. Es reicht hier wenn du nur die globale äußere Variable benutzt.
 

TaCqz

Mitglied
Dann erklär mir das bitte mal :D Ich bin noch ein anfänger.

Ich kriege immer eine Fehlermeldung wenn ich den startknopf drücke.

Diesen hier:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at ProgrammStart$JButtonListener.actionPerformed(ProgrammStart.java:67)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 
Zuletzt bearbeitet:

Fab1

Top Contributor
Ach ne, echt? ;)

Ich habe doch geschrieben, dass du diese Fehlermeldung bekommst und dir auch gesagt warum du diese erhältst.

Ich versuche es nochmal:

Du hast in deinem Code die Variable "go" initialisiert mit dem Typen JPopupMenu. Diese Variable ist eine Klassenvariable und somit in der kompletten Klasse verfügbar.
Java:
JPopupMenu go;

Zu diesem Zeitpunkt existiert allerdings noch kein Objekt von JPopupMenu. Ein Objekt dieser Klasse erstellt man mit
Code:
new
also
Java:
JPopupMenu go = new JPopupMenu();

Erst jetzt, nachdem das Objekt existiert kannst du die Eigenschaften des Objekts ändern.

So wie du es z.B. hier in der Methode los() gemacht hast.
Java:
go.setSize(800, 600);

[TIPP]Eine NullPointerException (kurz NPE) wird geworfen, wenn man auf ein Objekt, welches noch nicht existiert (also null ist), eine Methode aufruft um dessen Zustand zu ändern.[/TIPP]
 

TaCqz

Mitglied
Ich habe das JPopupMenu go schon lange entfernt. Trotzdem wird mir diese Fehlermeldung hingeworfen. Und zwar dann, wenn ich den Knopf drücke welcher seinen Text ändern soll.

Edit: Hat sich alles gelöst. Ich habs jetzt verstanden :D Danke für deine Geduld :D
 
Zuletzt bearbeitet:

anti-held

Bekanntes Mitglied
In deiner los-Methode erstellst du ein JButton-Objekt namens startKnopf und diesem fügst du den JButtonListener hinzu.
Wenn der ActionListener dann ausgelöst wird weil du auf den Button drückst, führt er den Code in der actionPerformed-
Method aus. Dort verwendest du aber die Membervariable aus deiner gesamten Klasse, die startKnopf heißt!
Diese ist aber noch nicht initialisiert!

Lösung:
entferne das JButton vor dem Variablennamen startKnopf.
dadurch verwendest du die Membervariable.

Java:
public void los() {
                JFrame menu = new JFrame("Jump it!    Hauptmenu");
                startKnopf = new JButton("Spiel Starten");
                startKnopf.addActionListener(new JButtonListener());

                ...
 

TaCqz

Mitglied
In deiner los-Methode erstellst du ein JButton-Objekt namens startKnopf und diesem fügst du den JButtonListener hinzu.
Wenn der ActionListener dann ausgelöst wird weil du auf den Button drückst, führt er den Code in der actionPerformed-
Method aus. Dort verwendest du aber die Membervariable aus deiner gesamten Klasse, die startKnopf heißt!
Diese ist aber noch nicht initialisiert!

Lösung:
entferne das JButton vor dem Variablennamen startKnopf.
dadurch verwendest du die Membervariable.

Java:
public void los() {
                JFrame menu = new JFrame("Jump it!    Hauptmenu");
                startKnopf = new JButton("Spiel Starten");
                startKnopf.addActionListener(new JButtonListener());

                ...

Geklärt! Vielen Dank :D
 
Zuletzt bearbeitet:

Fab1

Top Contributor
Das kommt daher, dass du wahrscheinlich den gleichen Listener für beide Buttons benutzt hast. Hierbei gibt es zwei Möglichkeiten zur Abhilfe.

1. Du erstellst für jeden Button einen eigenen Listener. (also wieder eine neue eigene interne Klasse so wie du es schon einmal gemachst hast.

2. Du prüfst in deiner ActionListener Klasse welcher Button das Event ausgelöst hat. (mit If-Anweisung)
Und entsprechend musst du dann halt die Fallunterscheidung machen. getSource() oder so ähnlich soll die Methode heißen die das ActionEvent anbieten soll. (weiß es grad nicht auswendig)
 

TaCqz

Mitglied
Danke. Das habe ich aber mitlerweile gelöst :D Jetzt das nächste problem :DD Der Knopf Spiel Starten öffnet jetzt einen neuen Frame. Jetzt möchte ich, das beim drücken vom knopf "Einstellungen" kein neuer Frame geöffnet wird, sondern der gleiche Frame geleert und mit neuen Inhalten gefüllt wird. Wie mach ich das dann? So hab ich das, aber dann hängt das Programm sich auf:

Java:
               class JButtonListener2 implements ActionListener {
		
			public void actionPerformed(ActionEvent event) {
				
				menu.removeAll();
				menu.add(vollbild);
				
				
				}
		}

Ich mache aber fortschritte :D

GL TaCqz
 

geqoo

Bekanntes Mitglied
Hört sich eher danach an, als wäre ein JTabbedPane das, wonach du suchst?

Im Falle des weiteren Vorgehens in diesem Fall würde ich erstmal das Menü neu initialisieren (bin mir aber nicht sicher, ob das wirklich notwendig ist) und dann mittels der add-Methode die Elemente drauf schieben, die du benötigst.

Java:
public void actionPerformed(ActionEvent event) {
  menu.removeAll();

  menu = new JFrame("Jump it!    Einstellungen");
  JButton knopf = new JButton("Sonstewas");
  knopf.addActionListener(new JButtonListener()); // Welchen Listener auch immer man hier registriert.

  menu = new JPanel();
  menu.add(knopf);

  // ...
}
 
Zuletzt bearbeitet:

TaCqz

Mitglied
Vielen Dank! Ich habe jetzt das Menu fertig. Jetzt gehts an das eigentliche Spiel! Es soll ein Jumpo & Run game werden. Hat hier einer eine Ahnung wie ich den SPieler als person, welcher sich auf einer fläche frei ´bewegen kann, programmieren kann? So wie in mirrors edge, nur nicht so schön udn ersstmal nur mit laufen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
JavaBeginner22 Button Text verändern Java Basics - Anfänger-Themen 1
H Text in einen Button quetschen Java Basics - Anfänger-Themen 3
Chava Testprojekt.Text.Image.Button Java Basics - Anfänger-Themen 4
M Button mit Bild und Text Java Basics - Anfänger-Themen 2
M Text auf JTextField auslesen per Button Java Basics - Anfänger-Themen 4
L Text einlesen nach Mausdruck auf Button Java Basics - Anfänger-Themen 12
1 Button Text von ButtonIcon überdeckt Java Basics - Anfänger-Themen 6
B Text per Button von ein textfeld in das andere? Java Basics - Anfänger-Themen 9
M Button Text Java Basics - Anfänger-Themen 3
B Button Text auf Knopfdruck verändern Java Basics - Anfänger-Themen 3
D Text auf dem Aktuell gedrückten Button auslesen Java Basics - Anfänger-Themen 5
D Button Text will einfach nicht erscheinen Java Basics - Anfänger-Themen 6
M Text in Label per Button Java Basics - Anfänger-Themen 4
Maxq Klassen Actionen in Button implementieren Java Basics - Anfänger-Themen 6
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
B Zurück Button erstellen Java Basics - Anfänger-Themen 1
Tom/S Button info Java Basics - Anfänger-Themen 2
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
T JSP, Button-Color change. Java Basics - Anfänger-Themen 1
L hilfe run button funktioniert nicht Java Basics - Anfänger-Themen 13
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
S Counter Label Button Java Basics - Anfänger-Themen 4
J Button über Pfeiltasten bewegen Java Basics - Anfänger-Themen 8
J Button als Feld nutzen Java Basics - Anfänger-Themen 17
A JOPtionPaneOptionDialog Abfrage welcher Button gedrückt wurde? Java Basics - Anfänger-Themen 8
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
B Button soll sowohl auf Klicken als auch auf die Enter-Taste reagieren Java Basics - Anfänger-Themen 9
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
G JTextField per Button speichern und an andere Klasse übergeben Java Basics - Anfänger-Themen 2
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
X TextField-Inhalt mit Button in .txt-Datei speichern Java Basics - Anfänger-Themen 16
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
S JFrame mit Hintergrundbild und Button Java Basics - Anfänger-Themen 4
P Upload Button funktioniert nicht Java Basics - Anfänger-Themen 13
I Ordnung JLayeredPane mit Button ändern Java Basics - Anfänger-Themen 5
A JLabel mit button drücken verändern Java Basics - Anfänger-Themen 6
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
CptK mit javafx button erstellen Java Basics - Anfänger-Themen 1
AppGuruCode962 Button mit Textfield verbinden Java Basics - Anfänger-Themen 13
L Java gui reset button Fehler!? Java Basics - Anfänger-Themen 2
L Java reset button Problem Java Basics - Anfänger-Themen 3
L Java reset button Problem Java Basics - Anfänger-Themen 9
L Erste Schritte AndroidStudio Button - Nur Großbuchstaben Java Basics - Anfänger-Themen 2
V JAVA Button Java Basics - Anfänger-Themen 4
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
S OOP Button erst nach 2x klicken deaktivieren Java Basics - Anfänger-Themen 4
J Button in anderer Klasse ändern Java Basics - Anfänger-Themen 3
A Fenster mit Button aufrufen Java Basics - Anfänger-Themen 3
V Button/Event wird nicht ausgeführt, was tun? Java Basics - Anfänger-Themen 2
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
I GUI Button Postition festlegen Java Basics - Anfänger-Themen 4
Tacofan Welcher Button wurde zuerst gedrückt? Java Basics - Anfänger-Themen 4
K Interface Fenster mit 3 ComboBoxen und 1 Button Java Basics - Anfänger-Themen 13
J Best Practice Button isPressed o.ä. auswerten Java Basics - Anfänger-Themen 10
S zahl hoch und runter zählen per button Java Basics - Anfänger-Themen 25
G Email-sending Button Java Basics - Anfänger-Themen 9
K Input/Output JCheckBox mit Bestätigungs-Button Java Basics - Anfänger-Themen 22
A Nach Druck eines Buttons reagieren andere Button nicht Java Basics - Anfänger-Themen 3
P Auf Button-Klick außerhalb der GUI-Klasse reagieren Java Basics - Anfänger-Themen 10
C Ein Button soll Focus rausfinden und Methode starten Java Basics - Anfänger-Themen 9
S mit Java HTML Button drücken "lassen" Java Basics - Anfänger-Themen 8
GadgetSofa jComboBox mit dem Button verbinden. Aber wie?? Java Basics - Anfänger-Themen 4
R Button soll Wert 1 in Variable schreiben Java Basics - Anfänger-Themen 4
D Zurück Button -- Background wird nicht angezeigt Java Basics - Anfänger-Themen 4
S Button "Berechnen" geht nicht Java Basics - Anfänger-Themen 3
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
B Home Button ausbleden ? Java Basics - Anfänger-Themen 8
M JMenuItem per Button hinzufügen Java Basics - Anfänger-Themen 2
T Eclipse kennt mein Button nicht... Java Basics - Anfänger-Themen 5
G Button Event Java Basics - Anfänger-Themen 6
S Methode pausieren bis Button gedrückt wird Java Basics - Anfänger-Themen 5
K Button's mit versch. Aufgaben/ActionListener Java Basics - Anfänger-Themen 12
J Button erstellen mit for-Schleife Java Basics - Anfänger-Themen 10
llabusch Fenster per Button verschieben Java Basics - Anfänger-Themen 5
J Button wird nicht angezeigt (GUI) Java Basics - Anfänger-Themen 7
I Button abfragen ob er geklickt wurde Java Basics - Anfänger-Themen 4
S Eigenen Listener zu eigenen Button! Java Basics - Anfänger-Themen 5
P Aktion ausführen wenn Button geklickt wird Java Basics - Anfänger-Themen 7
N Mehrere berechnungen auf einem Button legen? Java Basics - Anfänger-Themen 19
T aktivieren und deaktivieren von Radio Button Java Basics - Anfänger-Themen 2
K Compiler-Fehler Button cannot be resolved or is not a field Java Basics - Anfänger-Themen 6
G Button Prototyp erstellen Java Basics - Anfänger-Themen 5
A Erkennung eines Button im aktiven Fenster Java Basics - Anfänger-Themen 2
P JTabel größe ändern und button anzeigen Java Basics - Anfänger-Themen 5
V Robot kann Button nicht drücken warum? Java Basics - Anfänger-Themen 6
D Durch Button klick wert in JTextField einfügen Java Basics - Anfänger-Themen 5
C GUI - SWT - Button-Fehlermeldung Java Basics - Anfänger-Themen 5
A Button-Actions Java Basics - Anfänger-Themen 4
C Android APP - Load More Button und beschleunigung... Java Basics - Anfänger-Themen 2
J Klick auf Button -> JFrame öffnet sich erneut. & Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 7
J Button in extra Klasse festlegen und in anderer Klasse einfügen? Java Basics - Anfänger-Themen 3
J Schleife verzögern mit Button Java Basics - Anfänger-Themen 14
J GUI Button Klasse in anderer Klasse einfügen Java Basics - Anfänger-Themen 3
A Button in eine bestimmte Spalte platzieren Java Basics - Anfänger-Themen 4
Bluedaishi Klassen Thread über if Anweisung starten und von anderer Klassen über Button Beenden Java Basics - Anfänger-Themen 34
N CaretListener: leere Textfelder = Button sperren Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben