Fehler bei Button Array

Status
Nicht offen für weitere Antworten.

dahaack

Mitglied
Hallo Leute!

Ich habe hier einen Button-Array...

Code:
import java.util.ArrayList;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;


public class Pokercheat {
	static int farbe, wert;
	public static void main(String[] args) {
		
		Karte karte = new Karte(0,0);
		
    	// Display wird erstellt
        Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setText("Kartenspiel");
        shell.setBounds(0, 0, 900, 600);
        
        final Button[][] buttonArray = new Button[4][13];
        ArrayList<Karte> gesamtKarten = new ArrayList<Karte>();
        
        
        for(farbe=0;farbe<=3;farbe++) {
        	for(wert=0;wert<=12;wert++) {
        		karte.setFarbe(farbe);
        		karte.setWert(wert+2);
        		gesamtKarten.add(karte);
        		buttonArray[farbe][wert] = new Button(shell, SWT.PUSH);
        		buttonArray[farbe][wert].setText(karte.toString());
        		buttonArray[farbe][wert].setBounds(20+100*farbe, 20+40*wert, 80, 30);
        	}
        }
        
        for(farbe=0;farbe<=3;farbe++) {
        	for(wert=0;wert<=12;wert++) {
		        buttonArray[farbe][wert].addSelectionListener(new SelectionAdapter() {
		        	public void widgetSelected(SelectionEvent e) {	
		        		System.out.println("Button gedrückt");
					System.out.println(buttonArray[farbe][wert].getText());   <<=== Hier spackt er ab.
		        	}
		        });
        	}
        }
        
        shell.open();
        while (!shell.isDisposed())
            if (!display.readAndDispatch())
                display.sleep();
	}
}

Code:
public class Karte {
	private int farbe;	// 0: Karo, 1: Hertz, 2: Kreuz,, 3: Piek
	private int wert;	// 2 = Zwei, 11 = Bubbe, 14 = Ass
		
	public Karte(int farbe, int wert) {
		super();
		this.farbe = farbe;
		this.wert = wert;
	}

	public String toString() {
		StringBuffer sb = new StringBuffer();
		// Farbe im StringBuffer speichern
		if(farbe==0) {
			sb.append("Karo").append(" ");
		} else if(farbe==1) {
			sb.append("Hertz").append(" ");
		} else if(farbe==2) {
			sb.append("Kreuz").append(" ");
		} else if(farbe==3) {
			sb.append("Piek").append(" ");
		}
		// Wert im StringBuffer speichern
		if(wert<=10) {
			sb.append(wert);
		} else if(wert==11) {
			sb.append("B");
		} else if(wert==12) {
			sb.append("D");
		} else if(wert==13) {
			sb.append("K");
		} else if(wert==14) {
			sb.append("A");
		}
		return sb.toString();
	}

	// Setters & Getters
	public int getFarbe() {
		return farbe;
	}
	public void setFarbe(int farbe) {
		this.farbe = farbe;
	}
	public int getWert() {
		return wert;
	}
	public void setWert(int wert) {
		this.wert = wert;
	}	
}

Der Fehler:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4

Wenn ich die Zeile 42 rausnehme gibt es keinen Fehler.


Wäre sehr nett, wenn mir jemand helfen könnte!
 
S

SlaterB

Gast
in dem SelectionAdapter ist farbe nicht etwa der Wert bei der Erzeugung des Objektes,
sondern der Inhalt der statischen Variable zum Zeitpunkt des Ausführens der Operation,

egal von welchem Button der SelectionAdapter aufgerufen wird, da die statische Variable 4 enthält wird immer an Position 4 geschaut

nun hast du ein oder vielleicht zwei Probleme:
1.) wieso ist farbe zum Zeitpunkt der Exception 4? an deinem Code kann man es nicht erkennen,
irgendwann wird diese statische Variable auf 4 gesetzt, was wahrscheinlich falsch ist
2.) deine SelectionAdapter sollen sich wahrscheinlich auf den jeweilen Button im Array beziehen, nicht von der statischen Variable abhängen,
das geht entweder mit

for(farbe=0;farbe<=3;farbe++) {
for(wert=0;wert<=12;wert++) {

final int farbeFinal = farbe;
final int wertFinal = wert;

buttonArray[farbe][wert].addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
System.out.println("Button gedrückt");
System.out.println(buttonArray[farbeFinal ][wertFinal ].getText());
}
});
}
}


oder etwas sinnvoller mit

for(farbe=0;farbe<=3;farbe++) {
for(wert=0;wert<=12;wert++) {

final Button b = buttonArray[farbe][wert];

b.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
System.out.println("Button gedrückt");
System.out.println(b.getText());
}
});
}
}


wichtig ist das final
 

dahaack

Mitglied
Es funktioniert! Vielen Dank!


Aber so ganz hab ich nicht gecheckt, warum die Farbe immer den Wert 4 hatte.


Das liegt vielleicht daran dass ich nicht so genau weiß wann etwas static / final gehört und wann nicht.


Bei dem ButtonArray wird ein final int benötig, dass kann man ja nochmal so hinnehmen, aber wann mach ich etwas static und wann nicht?


Vielen Dank nochmal für deine schnelle Hilfe!
 
S

SlaterB

Gast
wenn du keinen Sinn für static sieht, dann verwende gar kein static,
so einfach ist das,

static nutzt mn z.B. für Konstanten,
darauf wollte ich dich vorhin schon hinweisen:
in deinem Code steht 3x 12 bzw. dreizehn,

da definierst du
static int NUMBER_CARDS = 4;
und verwendest überall nur diese Variable,

hier wird sich der Wert vielleicht nie mehr ändern, an anderen Stellen ist es leichter, so den Wert zu ändern/ zu verfolgen, wo er verwendet wird

----------


> final Button[][] buttonArray = new Button[4][13];
> for(farbe=0;farbe<=3;farbe++) {
> for(wert=0;wert<=12;wert++) {


wenn überhaupt ohne statische Konstante, dann schreibt man sowas übrigens

final Button[][] buttonArray = new Button[4][13];
for(farbe=0;farbe<4;farbe++) {
for(wert=0;wert<13;wert++) {

mit gleichen Zahlen
 

dahaack

Mitglied
Danke nochmal! :toll:


Aber wo ist dann der Unterschied zwischen static und final.

Ich benutzer static oder final immer nur, wenn mir das von eclipse empfohlen wird um einen Fehler zu berichtigen. :oops:

da definierst du
static int NUMBER_CARDS = 4;


Kannst du mir sagen in welcher Zeile? Ich blick es nicht.
 
S

SlaterB

Gast
na ich empfehle langsam in einem Buch nachzuschlagen, das sind ja Fachbegriffe

> Kannst du mir sagen in welcher Zeile?

das war nur ein Beispiel, kannst dir selber aussuchen
 

dahaack

Mitglied
In dem Buch, das ich habe steht leider nichts genaues darüber, wann man es anwenden muss und wann nicht.

Hier hätte ich noch eine kleine die glaub ich damit auch zu tun hat:

Code:
public class Test {
	final ArrayList<String> al = new ArrayList<String>();
	public Test() {
		for(int i=0;i<5;i++) {;
			al.add(String.valueOf(i));
			System.out.println(al.get(al.size()-1));
		}
		for(int i=0;i<5;i++) {;
		System.out.println(al.get(al.size()-1));
	}
	}
	
}

Es wird ausgegeben:

0
1
2
3
4
4
4
4
4


Warum gibt er bei der 2ten Schleife immer eine 4 aus?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
E Fehler bei Button AWT, Swing, JavaFX & SWT 1
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
J Fehler bei jFame.setTitle() AWT, Swing, JavaFX & SWT 8
thor_norsk SpringBoot-Fehler AWT, Swing, JavaFX & SWT 7
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
T ListView nach Erweiterung Fehler in CellFactory AWT, Swing, JavaFX & SWT 8
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
parrot JavaFX Fehler AWT, Swing, JavaFX & SWT 4
H JavaFX JavaFX Import Fehler AWT, Swing, JavaFX & SWT 4
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
A eine Fehler AWT, Swing, JavaFX & SWT 9
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
W fillRect() in Schleife spukt nur Fehler aus AWT, Swing, JavaFX & SWT 3
S Fehler: Hauptklasse neon.Main konnte nicht gefunden oder geladen werden AWT, Swing, JavaFX & SWT 5
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
L Unbekannter Fehler AWT, Swing, JavaFX & SWT 13
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
I Fehler bei Alert AWT, Swing, JavaFX & SWT 6
J Fehler bei PixelColor erkennung AWT, Swing, JavaFX & SWT 4
T Fehler bei ActionEvent? AWT, Swing, JavaFX & SWT 3
V Fehler bei Würfelsimulator GUI AWT, Swing, JavaFX & SWT 2
Z GUI-Problem, finde meinen Fehler nicht! AWT, Swing, JavaFX & SWT 11
Seikuassi SWING - (Hoffentlicher) simpler Color-Fehler AWT, Swing, JavaFX & SWT 4
M Swing finde den fehler nicht AWT, Swing, JavaFX & SWT 9
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
D Unlogischer Fehler? AWT, Swing, JavaFX & SWT 2
L Eclipse Fehler besser zu verstehen!!! AWT, Swing, JavaFX & SWT 4
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
H GUI-Textausgabe Fehler AWT, Swing, JavaFX & SWT 5
S String is null Fehler AWT, Swing, JavaFX & SWT 2
P Swing GroupLayout() Fehler? AWT, Swing, JavaFX & SWT 3
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
N Touchscreen-Scrollen, wo liegt der Fehler? AWT, Swing, JavaFX & SWT 3
N Fehler Inhalt von JTable wird gelöscht AWT, Swing, JavaFX & SWT 5
S Fehler beim Zweites 3D Bild AWT, Swing, JavaFX & SWT 2
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
M GEF tutorial Fehler finden AWT, Swing, JavaFX & SWT 4
S Grafik Fehler AWT, Swing, JavaFX & SWT 15
M Fehler bei Arrayübergabe an JComboBox AWT, Swing, JavaFX & SWT 10
J Fehler beim Einklappen eines Trees AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Fehler beim Laden eines Bildes AWT, Swing, JavaFX & SWT 25
S LayoutManager Fehler gesucht 18.6.2011 AWT, Swing, JavaFX & SWT 4
C Fehler nur bei manchen Usern AWT, Swing, JavaFX & SWT 8
Screen Fehler bei Get-Methode für ArrayList AWT, Swing, JavaFX & SWT 8
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
I Fehler bei JFileChooser AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Fehler beim Farbe auslesen AWT, Swing, JavaFX & SWT 3
J Fehler beim Gif Datei öffnen AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Fehler beim Überzeichnen von Linien AWT, Swing, JavaFX & SWT 11
E Swing Fehler nach Befüllen einer JTable mit gesetzem Rowsort?! AWT, Swing, JavaFX & SWT 10
P Swing Misteriöser Fehler JTable AWT, Swing, JavaFX & SWT 5
Y Swing JPasswordField Fehler AWT, Swing, JavaFX & SWT 14
A Swing Unknown Source Fehler AWT, Swing, JavaFX & SWT 9
N Fehler bei Grouplayout AWT, Swing, JavaFX & SWT 17
S ActionPerformed Fehler... AWT, Swing, JavaFX & SWT 9
C BufferedImage-Fehler? Falsches Bild wir gezeichnet AWT, Swing, JavaFX & SWT 5
A Tabellen Überschriften ändern -setColumnIdentifiers()- Fehler AWT, Swing, JavaFX & SWT 7
hdi Swing JTable: Fehler beim Nutzen von RowSorter#setRowFilter AWT, Swing, JavaFX & SWT 4
M.F.G. Fehler bei der Anzeige Grafischer Elemente AWT, Swing, JavaFX & SWT 13
D Swing Verwirrender Fehler AWT, Swing, JavaFX & SWT 7
J Fehler in fillRoundRect AWT, Swing, JavaFX & SWT 2
D Probleme mit Spiel-Engine. Komische Fehler. AWT, Swing, JavaFX & SWT 5
W fehler jedoch ka wo AWT, Swing, JavaFX & SWT 14
F Fehler in der Startklasse AWT, Swing, JavaFX & SWT 13
A Fehler bei der Parametereingabe? AWT, Swing, JavaFX & SWT 16
P finde den Fehler im JTable nicht AWT, Swing, JavaFX & SWT 2
Spin Fehler in Vergleich AWT, Swing, JavaFX & SWT 6
K Swing: ContentPane von JDialog ist transparent (Fehler) AWT, Swing, JavaFX & SWT 10
Dragonfire ZoomImage flackert -> Fehler: repaint-Aufruf [gelöst] AWT, Swing, JavaFX & SWT 5
T Invalid Range - Fehler bei TableRowSorter / Tabelle AWT, Swing, JavaFX & SWT 17
DasDogma Fehler bei getText() AWT, Swing, JavaFX & SWT 10
I Fehler bei verschachtelten JScrollPanes AWT, Swing, JavaFX & SWT 2
M Fehler beim Zugriff von awt-KeyListener auf swt-Shell AWT, Swing, JavaFX & SWT 2
GilbertGrape Fehler bei HTML in JTextPane AWT, Swing, JavaFX & SWT 2
K Textfelder auslesen gibt immer Fehler AWT, Swing, JavaFX & SWT 2
P Fehler beim Einlesen eines JTextFields AWT, Swing, JavaFX & SWT 2
G Viele Fehler beim zeichen AWT, Swing, JavaFX & SWT 5
M Fehler mit Jigloo AWT, Swing, JavaFX & SWT 3
M setColor mit Fehler cannot fiend symbol (java.awt.Color) AWT, Swing, JavaFX & SWT 2
Z habe code, habe fehler, habe keine lösung AWT, Swing, JavaFX & SWT 7
R JComboBox Fehler AWT, Swing, JavaFX & SWT 7
B NPE-Fehler AWT, Swing, JavaFX & SWT 11
A Fehler beim Auslesen aus einem Textfeld AWT, Swing, JavaFX & SWT 2
P JRadioButton in Schleife erstellen > wo liegt mein Fehler AWT, Swing, JavaFX & SWT 2
R setIcon löst Fehler aus AWT, Swing, JavaFX & SWT 4
B Durch Auslesen der Zwischenablage folgt Fehler im Excel AWT, Swing, JavaFX & SWT 2
spacegaier Fehler beim Aufrufen von Dialog aus ActionListener AWT, Swing, JavaFX & SWT 12
D Fehler bei JTable AWT, Swing, JavaFX & SWT 8
S TextField fehler AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben