Button Action

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
Hallo,

also irgendwie komme ich mit denn Button da gerade nicht klar.

Code:
		for(int i=0;i<5;++i){
			for (int j = 0; j < 5; j++) {		
				for(int k=0;k<f.i.itemlist.size();++k){
					if(f.spieler.bag[nr][0]==f.i.itemlist.get(k).id){
						items[nr]=new JButton(new ImageIcon(f.i.itemlist.get(k).pfad));
						System.out.println(f.i.itemlist.get(k).name);
						setsizelocation(items[nr], x+i*50, y+j*50, 50, 50);
						itemid=k;
						items[nr].addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
								System.out.println(f.i.itemlist.get(itemid).name);
						}});	
					}					
				}				
				nr++;
			}
		}

Wenn ich auf denn button klicke, komt nicht der name. Er läst das "itemid" immer auf 1. Dabei wird es vor dem Button richtig angezeigt.

Nochwas...geht das nicht irgendwie, das ich nicht alle Variablen in der Klasse schreiben muss, welche ich in dem Button benötige?
Teills sinnlos abfragen und die dazu gehörtigen Variablen alles oben deklarieren...sieht doof aus.
 

Marco13

Top Contributor
itemid ist wohl eine Variable in der Klasse. Und die ist am Ende (nachdem die Schleife durchgelaufen ist, bzw. wenn später die actionPerformed aufgerufen wird) immer gleich.

Also nicht
Code:
class XXX 
{
    int itemid;

    void foo()
    {
         itemid = k;

         items[nr].addActionListener(new ActionListener() {
                     public void actionPerformed(ActionEvent evt) {
                        System.out.println(f.i.itemlist.get(itemid).name);
                  }});    
}
sondern
Code:
class XXX 
{
    //int itemid; //--------- WEG

    void foo()
    {
         final int itemid = k; //---------- lokal und final !!!

         items[nr].addActionListener(new ActionListener() {
                     public void actionPerformed(ActionEvent evt) {
                        System.out.println(f.i.itemlist.get(itemid).name);
                  }});    
}
Schau vielleicht auch nochmal hier
http://www.java-forum.org/de/viewtopic.php?p=310844



Btw:
f.i.itemlist.get(itemid).name
:autsch: sieht häßlich aus :autsch:
 

Marco13

Top Contributor
static? Wenn 'f' ein Klassenname ist, liegt NOCH mehr im Argen, als wenn es ein Variablenname ist :wink:
 

Titanpharao

Bekanntes Mitglied
f ist mein Fenster ;-)

Engine (spieler, gebiete, items)

aus engine wird menu aufgerufen new Menu(this

f.spieler....

Weis das man Getters und Setters benutzen soll. Aber was habe ich davon, abgesehen von ~10zeichen mehr Quelltext?
 

The_S

Top Contributor
Müssen wir jetzt hier wirklich nochmal den Sinn von Getter und Setter durchkauen? Dazu gibt es unzählich Beispiele im Forum und einen super Beitrag in den FAQ.

Aber EIN simples Beispiel:

Du hast eine Klasse, die z. B. Noten von Schülern speichert. Erlaubst du von außen direkten Zugriff auf die Variable "note", könnte man z. B. dem Schüler auch die Note 0 oder 7 geben. Das könnte dann in der weiteren Programmverarbeitung zu fehlern führen, mal ganz davon abgesehen, dass es extrem unlogisch ist. Ist "note" aber private und du verwendest Getter und Setter, könntest du z. B. sowas machen

Code:
public void setNote(int note) {
   if (note > 6) {
      this.note = 6;
   }
   else if (note < 1) {
      this.note = 1;
   }
   else {
      this.note=note;
   }
}
 

Leroy42

Top Contributor
Hobbit_Im_Blutrausch hat gesagt.:
Ist "note" aber private und du verwendest Getter und Setter, könntest du z. B. sowas machen

Code:
public void setNote(int note) {
   if (note > 6) {
      this.note = 6;
   }
   else if (note < 1) {
      this.note = 1;
   }
   else {
      this.note=note;
   }
}

Finde ich aber nicht so toll! :(
Eine Exception zu werfen, oder einfach System.err.println(...) aufzurufen,
ermöglicht immerhin die Erkennung, daß irgendwer setNote mit
unerlaubtem Argument aufgerufen hat. Bei soetwas wie oben, wird ein möglicher
Fehler einfach nur verschleiert.
 

Marco13

Top Contributor
Code:
public void setNote(int note) 
{
   if (note >= 5) 
   {
      flenn();
   }
   else if (note <= 2) 
   {
      freu();
   }
   else 
   {
      ignorier();
   }
}
Besser? :wink: (Es war ja nur ein Beispiel - vielleicht nicht das beste, aber die allgemeine Aussage, dass es SEHR oft vorkommt, dass beim Setzen einer Variablen "irgendwas" passieren soll (Gültigkeitsabfrage, Event werfen, Aktualisierungen etc) sollte damit schon angekommen sein)
 

Leroy42

Top Contributor
Code:
else if (note <= 2) 
   { 
      freu(); 
   }

Toll! Ich habe als Zensur eine -42 bekommen! :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
S Swing Speichern nach Button-Klick Allgemeine Java-Themen 5
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
M itext - Button der Text in Zwischenablage stellt Allgemeine Java-Themen 0
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M JavaFX Button mit mehreren Aktionen? Allgemeine Java-Themen 7
G Drop down Button Menü (Combobox) Allgemeine Java-Themen 7
E Swing Buttons auf knopfdruck(anderer Button) erstellen Allgemeine Java-Themen 6
K Mit Button neue Klasse öffnen Allgemeine Java-Themen 9
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
Tacofan Button nicht mehr anklickbar machen Allgemeine Java-Themen 8
L Nach Button drücken den Text festspeichern Allgemeine Java-Themen 9
J Java eigenen Button programmieren (ob Cursor im Rechteck ist oder nicht..../button pressed or not) Allgemeine Java-Themen 6
F Klassen Klasse bei Button klick öffnen Allgemeine Java-Themen 11
J JScrollPane und Button erscheinen nicht Allgemeine Java-Themen 13
L Label- & Textfelderzeugung durch Button Allgemeine Java-Themen 1
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
B Button im Web klicken Allgemeine Java-Themen 4
C Java Excel Button Allgemeine Java-Themen 2
J Swing Eigenes Button-design Allgemeine Java-Themen 2
H WAV abspielen nach Button-Klick Allgemeine Java-Themen 4
G Button-Registrierung beim ActionListener erst NACH Tastendruck Allgemeine Java-Themen 2
M JavaFX-Gegenstück zu Swing-Button-DoClick-Methode Allgemeine Java-Themen 5
A Button drücken Allgemeine Java-Themen 3
S Thread anhalten per Button ? Allgemeine Java-Themen 3
D Dialog soll sich beim Klick auf Button schließen Allgemeine Java-Themen 8
M HTTP Selenium button klicken Allgemeine Java-Themen 2
K GUI-Button Inhalte vergleich - TicTacToe Grundriss Allgemeine Java-Themen 11
X Button während Thread aktiv ist disablen Allgemeine Java-Themen 11
C Button geben Fehlermeldung aus Allgemeine Java-Themen 5
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
R [Android]Wie dynamischen Button-Feld erstellen? Allgemeine Java-Themen 3
F WebBrowser Button automatisch drücken Allgemeine Java-Themen 5
L mit Button jar.Datei öffnen? Allgemeine Java-Themen 5
1 URL mit Button öffnen Allgemeine Java-Themen 29
L Thread stoppen über Button funktioniert nicht Allgemeine Java-Themen 7
ModellbahnerTT Button mit Zahlen beschriften Allgemeine Java-Themen 1
E JTidy html "hidden" Button drücken Allgemeine Java-Themen 7
G Button-Array überschreiben und dem Container zufügen? Allgemeine Java-Themen 2
G Icon auf Button Allgemeine Java-Themen 5
N Button Allgemeine Java-Themen 3
G Schleife durch Button beenden Allgemeine Java-Themen 6
G wenn Button geklickt -> regelmäßig Aktion ausführen Allgemeine Java-Themen 7
G default button für enter taste Allgemeine Java-Themen 3
T JTabbedPane nach Button-Klick wechseln Allgemeine Java-Themen 3
E Button disablen Allgemeine Java-Themen 8
T Button Array verschieben klappt nicht. Allgemeine Java-Themen 6
G swt button Allgemeine Java-Themen 6
M Methode soll warten, bis Button gedrückt Allgemeine Java-Themen 2
P Button automatisch drücken Allgemeine Java-Themen 5
M bei Klick auf Button Datei einlesen Allgemeine Java-Themen 3
E Button mit 2zeiliger Beschriftung Allgemeine Java-Themen 3
ElViZ HTML-Button mit Java "drücken" lassen? Allgemeine Java-Themen 3
MQue Button setEnabled() Allgemeine Java-Themen 2
MQue Konzept- Frage zum Button-Aktualisieren Allgemeine Java-Themen 5
MQue Button Attribute setzen Allgemeine Java-Themen 14
MQue Button ansprechen Allgemeine Java-Themen 5
MQue Button erzeugen mit 3 Klassen Allgemeine Java-Themen 3
MQue Button mit Icon und Beschriftung Allgemeine Java-Themen 7
MQue Button Event beim drücken und beim auslassen Allgemeine Java-Themen 7
P JComponenten (Button, JSlider, usw) erweitern Allgemeine Java-Themen 12
E Button: Event auslösen Allgemeine Java-Themen 7
E Mit Button ein Fenster öffnen Allgemeine Java-Themen 4
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
P invoke per button Allgemeine Java-Themen 5
D Button-Sprache und windowClosing Allgemeine Java-Themen 6
G Text und Bild/Icon im Label/Button positionieren/ausrichten Allgemeine Java-Themen 2
A Wie mach ich, das mein Button schneller reagiert. Allgemeine Java-Themen 13
D Bild per Button painten Allgemeine Java-Themen 5
V Button schließen - NullPointerException Allgemeine Java-Themen 6
H Button ist nicht ansprechbar Allgemeine Java-Themen 4
S 100 Fehler bei Button machen :) Allgemeine Java-Themen 9
G Fenster durch eigenen Button minimieren Allgemeine Java-Themen 6
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
Meeresgott Input/Output Polling mit (Action)-Listenern? Allgemeine Java-Themen 3
R Servelt mit <form action=""> aufrufen (.jsp) Allgemeine Java-Themen 7
D Action Listener Problem Allgemeine Java-Themen 3
X Action in Action aufrufen Allgemeine Java-Themen 2
S Action mehrmals klicken Allgemeine Java-Themen 3
N Action Events Allgemeine Java-Themen 12
I Action parallel abarbeiten Allgemeine Java-Themen 3
M Action-listener Allgemeine Java-Themen 6
C Anfaenger Problem mit Action Handling. Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben