Swing IndexOutOfBoundsException, aber warum?!

Status
Nicht offen für weitere Antworten.

Developer_X

Top Contributor
Hi, wenn ich den Code starte, dann komtm da eine IndexOutOfBoundsException, aber warum?
Java:
package Main;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

@SuppressWarnings("serial")
public class Main extends JFrame
{
	Field[] f = new Field[36];
	int i = 0;
	
	public Main()
	{
		setLayout(new GridLayout(6,6));

		setGame();
		
		setSize(200,200);
		setVisible(true);
	}
	public void setGame()
	{
		i = 0;
		while(i<=f.length-1)
		{
			f[i] = new Field(""+i);
			add(f[i]);
			f[i].addActionListener(new ActionListener()
			{
				public void actionPerformed(ActionEvent arg0) 
				{		
					f[i].set();
					f[i].setBackground(Color.black);
					f[i].setForeground(Color.cyan);
				}			
			});			
			i++;
		}

	}
	public static void main(String[]args)
	{
		new Main();
	}
}

PS: Field ist eine Instanz von JButton
 
S

SlaterB

Gast
Java:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {

        new Main();
    }

}
class Field extends JButton {

    public Field(String string)
    {
    }

    public void set()
    {
    }
    
}
class Main extends JFrame
{
    Field[] f = new Field[36];
    int i = 0;
    
    public Main()
    {
        setLayout(new GridLayout(6,6));
 
        setGame();
        
        setSize(200,200);
        setVisible(true);
    }
    public void setGame()
    {
        i = 0;
        while(i<=f.length-1)
        {
            f[i] = new Field(""+i);
            add(f[i]);
            f[i].addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent arg0) 
                {       
                    f[i].set();
                    f[i].setBackground(Color.black);
                    f[i].setForeground(Color.cyan);
                }           
            });         
            i++;
        }
 
    }
}
keine Exception

-----

nebenbei:
while(i<=f.length-1)

->

while(i<f.length)
 

Ebenius

Top Contributor
Wann genau kommt die Exception? Wenn Du auf den Button drückst, oder? Warum ist [c]i[/c] ein Feld und keine lokale Variable in einer [c]for[/c]-Schleife? Dann könnte das nämlich gar nicht passieren. Mal sehen, ob Du's rausfindest...

Ebenius
 

M4x0r

Aktives Mitglied
Tipp:
In der while Schleife fügst du zwar einen ActionListener hinzu, aber die Schleife ist durchgelaufen wenn du per Klick ein ActionEvent auslöst ;)
 

Developer_X

Top Contributor
Wann genau kommt die Exception? Wenn Du auf den Button drückst, oder? Warum ist [c]i[/c] ein Feld und keine lokale Variable in einer [c]for[/c]-Schleife? Dann könnte das nämlich gar nicht passieren. Mal sehen, ob Du's rausfindest...

Ebenius

die Klasse Field brauche ich public, weil ich mit diesem Array ein paar sachen wo anders, in ner anderen methode anstellen muss
 

Ebenius

Top Contributor
Lies meine Frage nochmal! Deine Antwort hat mit meiner Frage nichts zu tun. Ggf. ersetze das Wort "Feld" durch "Member-Variable", wenn es sich dann besser verstehen lässt.

Ebenius
 

Developer_X

Top Contributor
hey, wenn ich am ende so mache:
Java:
 public void setGame()
    {
        i = 0;
        while(i<=f.length-1)
        {
            f[i] = new Field(""+i);
            add(f[i]);
            f[i].addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent arg0) 
                {       
                    f[i].set();
                    f[i].setBackground(Color.black);
                    f[i].setForeground(Color.cyan);
                }           
            });         
            i++;
        }
        i= 0;
    }
dann funktionierts, ein problem dabei ist nur, dass wenn man auf irgendeinen button zmum ersten mal klickt, dass dann der button f[0] und der angeklickte button sich ändern, das ist ärgerlich.
 

Ebenius

Top Contributor
Mach [c]i[/c] aus der Klasse raus:
Java:
        for(int i = 0; i < f.length; i ++
        {
            final int buttonIndex = i;
            f[buttonIndex] = new Field(""+buttonIndex);
            add(f[buttonIndex]);
            f[buttonIndex].addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent arg0) 
                {       
                    f[buttonIndex].set();
                    f[buttonIndex].setBackground(Color.black);
                    f[buttonIndex].setForeground(Color.cyan);
                }           
            });         
        }
Ebeniu
 

Developer_X

Top Contributor
ich will ein vier gewinnt spiel machen,
so da hatte ich mir gedacht, bevor ich alle initialisiere und dann auch noch die actionlistener einzeln mache, mach ich das ganze in ner schleife, so, und nun funktioniert das ganze nicht richtig, weil die schleife beim klicken neu durchlaufen wird, wie max40 schon gesagt hat, da dachte ich mir, ich machs so, dass ich nach der schleife "i" wieder "0" setzte.

Jetzt gehts aber wieder net

@Edit: danke ebenius
 
S

SlaterB

Gast
Java:
for(int i = 0; i < f.length; i ++
        {
            final Field fi = new Field(""+buttonIndex);
            f[buttonIndex] = fi;
            add(fi);
            fi.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent arg0) 
                {       
                    fi.set();
                    fi.setBackground(Color.black);
                    fi.setForeground(Color.cyan);
                }           
            });         
        }

;)

die Source des ActionEvents wäre auch noch ne Variante
 

M4x0r

Aktives Mitglied
Hallo,
was hätte es denn bringen sollen i=0 zu setzen?
wenn du zum beispiel auf den 20. Button klickst, dann wird der ActionListener des 20.Buttons aktiviert.
in diesem steht dann sowas wie field.... aber i ist 0 und es müsste eigentlich 20 sein.
PS: wenn du im ActionListener nicht mehr machst als das was du bisher geschrieben hast, ist es denke ich für die Performance besser wenn du einfach einen einzigen ActionListener in die klasse einbindest. da könntest du dann mit if( e.getSource() instanceof Field) arbeiten. wird wahrscheinlich wenig, wenn überhaupt einen unterschied machen, aber who knows...:oops:

EDIT: Bei Vier Gewinnt gibts üblicherweise 7 Spalten...d.h. 42 "Fields"
 
Zuletzt bearbeitet:

roque

Mitglied
die Frage ist nur, ob es sich auf nem 6x6 Feld auch so gut spielen lässt...

und für jeden einzelnen Button einen Actionlistener ist, denke ich, nicht nur für die Performance schlecht sondern auch überflüssig oder? Macht doch keinen Unterschied an welche Stelle ner Spalte du klickst? Man wirft ja immer oben rein..
 

M4x0r

Aktives Mitglied
ja, also ich hätte es vielleicht so gemacht:

Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

public class Main extends JFrame implements ActionListener {
	private static final long serialVersionUID = 1L;
	Field[] f = new Field[36];

	public Main() {
		setLayout(new GridLayout(6, 6));
		setGame();
		setSize(200, 200);
		setVisible(true);
	}

	public void setGame() {

		for (int i = 0; i < f.length; i++) {
			f[i] = new Field("" + i);
			add(f[i]);
            f[i].addActionListener(this);

		}

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() instanceof Field) {
			Field current = (Field) e.getSource();
			current.set();
			current.setBackground(Color.black);
			current.setForeground(Color.cyan);
		}

	}

	public static void main(String[] args) {
		new Main();
	}

}
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D java.lang.IndexOutOfBoundsException: AWT, Swing, JavaFX & SWT 18
G JavaFX ChoiceBox selectFirst IndexOutOfBoundsException AWT, Swing, JavaFX & SWT 7
A JTable und java.lang.IndexOutOfBoundsException AWT, Swing, JavaFX & SWT 3
Ollek IndexOutOfBoundsException bei neuen Daten in JTable AWT, Swing, JavaFX & SWT 13
L FreeChart java.lang.IndexOutOfBoundsException AWT, Swing, JavaFX & SWT 4
E Swing TableModel fireTableDataChanged führt zu IndexOutOfBoundsException AWT, Swing, JavaFX & SWT 9
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
G JavaFX , Duplicate erzeugt aber ich weis nicht wo AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
J Injection - Aber Controller sind null AWT, Swing, JavaFX & SWT 3
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
X JavaFX Einfache FX Application, aber wie alte Features umgehen? AWT, Swing, JavaFX & SWT 10
M Swing Code funktioniert auf Windows aber nicht Linux... AWT, Swing, JavaFX & SWT 3
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
K Swing Textfeld verstecken aber benutzen AWT, Swing, JavaFX & SWT 15
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
D Swing JFreeChart Crosshair Label - setPreferredSize oder ähnliches, aber wo ? AWT, Swing, JavaFX & SWT 1
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
P jtabel Zeilen auswählbar, aber nicht editierbar AWT, Swing, JavaFX & SWT 3
D Passwort [Aber mit 3 Versuchen] Funktioniert nicht wie erwartet AWT, Swing, JavaFX & SWT 4
A Swing Koordinatensystem wird gezeichnet verschwindet aber und die Einteilungen bleiben nicht bestehen AWT, Swing, JavaFX & SWT 5
C Applet Applet funktioniert in Eclipse aber nicht in Browser AWT, Swing, JavaFX & SWT 1
Tom299 JavaFX AnchorPane resizen, aber wie? AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Transparenter Hintergrund aber sichtbare Buttons AWT, Swing, JavaFX & SWT 6
J JavaFX Anwendung läuft in eclipse, nicht aber exportiert AWT, Swing, JavaFX & SWT 2
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
X AWT Graphics2D zum LWJGL Display hinzufügen aber wie? AWT, Swing, JavaFX & SWT 4
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
TheJavaKid JFrame defokusieren aber im Vordergrund behalten AWT, Swing, JavaFX & SWT 0
brunothg Swing JTable -> AUTO_RESIZE_OFF aber das Fenster ausfüllen AWT, Swing, JavaFX & SWT 0
J JFrame maximierbar aber nicht resizable AWT, Swing, JavaFX & SWT 6
D JTable markier- aber nicht veränderbar AWT, Swing, JavaFX & SWT 10
E Angehängtes Layout, aber wie? AWT, Swing, JavaFX & SWT 12
O getValueAt liefert "", aber es wird was angezeigt AWT, Swing, JavaFX & SWT 12
S JTable Zellinhalt markierbar aber nicht editierbar AWT, Swing, JavaFX & SWT 4
V Swing Wochenplaner in Swing erstellen! Aber wie? AWT, Swing, JavaFX & SWT 13
M Swing eigene Dialoge, aber wie genau? AWT, Swing, JavaFX & SWT 5
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
D JDialog alwaysOnTop, aber nur innerhalb der Applikation AWT, Swing, JavaFX & SWT 3
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
L SWT Drop erfolgreich, aber GUI-Aktion abgebrochen AWT, Swing, JavaFX & SWT 4
G Swing resizeable aber nur y-Achse nur wie? AWT, Swing, JavaFX & SWT 5
M Swing JMenu verdeckt durch Komponente (aber kein AWT und Swing mix!?) AWT, Swing, JavaFX & SWT 3
N Swing JSpinner mit Datum aber ohne Uhrzeit AWT, Swing, JavaFX & SWT 2
propra Doppelklick von Einzelklick unterscheiden, aber richtig ... AWT, Swing, JavaFX & SWT 10
J Swing JTable: Komplette Zeile aber ohne Spalten markieren AWT, Swing, JavaFX & SWT 11
T speichern funktioniert,aber öffnen nicht AWT, Swing, JavaFX & SWT 2
C JFrame ohne Titelleiste, aber mit Borders AWT, Swing, JavaFX & SWT 2
M Fenster aufteilen, aber mit welchem LayoutManager? AWT, Swing, JavaFX & SWT 10
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
M Swing MVC Pattern verstanden, aber Probleme bei der Umsetzung AWT, Swing, JavaFX & SWT 5
S Bilddatei kopieren, aber ohne verluste und ohne zu großen Speicherverbrauch AWT, Swing, JavaFX & SWT 17
J Mehrere JRadioButtons, aber nur 1 darf ausgewählt sein AWT, Swing, JavaFX & SWT 4
F JTable soll mit Buttons befüllt werden, aber nicht in jede Zelle einer Spalte AWT, Swing, JavaFX & SWT 3
S Swing Grundprinzip String ausgeben, aber wie? AWT, Swing, JavaFX & SWT 6
J Swing JCheckBox enabled, aber graues Kästchen AWT, Swing, JavaFX & SWT 2
F Bild auf JPanel, aber wie? AWT, Swing, JavaFX & SWT 6
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
G SWT-App läuft nicht unter OSX, unter Win aber problemlos AWT, Swing, JavaFX & SWT 3
F ActionListener von JButton funktioniert mit JFrame aber nicht mit JDialog AWT, Swing, JavaFX & SWT 2
L Swing Serverbrowser, aber welche componenten? AWT, Swing, JavaFX & SWT 2
F In Textfeld Kommazahl anzeigen aber ohne Komma eingeben AWT, Swing, JavaFX & SWT 14
T JTable: editieren bei Doppelklick deaktivieren, aber... AWT, Swing, JavaFX & SWT 2
data89 PopUp-Panel bauen - aber wie? AWT, Swing, JavaFX & SWT 2
D Swing JEditorPane mit HTML aber ohne Bilder AWT, Swing, JavaFX & SWT 3
T JSpinner, 3 JSpinner aber nur ein SpinnerDateModel AWT, Swing, JavaFX & SWT 7
B JTable: Zeilen sortieren, aber bestimmte Zeilen fest lassen AWT, Swing, JavaFX & SWT 9
O Transparenz mit AWTUtilities aber nur das Fenster nicht die Buttons AWT, Swing, JavaFX & SWT 8
E Layout, aber welches? AWT, Swing, JavaFX & SWT 8
E Starten meiner GUI, aber wie? AWT, Swing, JavaFX & SWT 7
Pithecanthropus [gelöst] JTree, aber nicht mit Strings, sondern mit Objects? AWT, Swing, JavaFX & SWT 2
T Choice "gezielt" darstellen aber wie - mit Koordinaten aber wie? AWT, Swing, JavaFX & SWT 6
T [Applet] startet in Eclipse aber nicht im Browser AWT, Swing, JavaFX & SWT 2
M MVC: Grundidee verstanden aber was machen mit mehreren Model AWT, Swing, JavaFX & SWT 2
T JComboBox 2 Spaltig, aber nur eine Anzeigen AWT, Swing, JavaFX & SWT 13
T Scrollbar wird nicht angezeigt - aber warum? AWT, Swing, JavaFX & SWT 3
J MouseEvts durch JLabel fallen lassen aber trotzdem Tooltips? AWT, Swing, JavaFX & SWT 5
T jtabel - Zeile selktierbar aber nicht editierbar AWT, Swing, JavaFX & SWT 2
S Will einen Punkt zeichnen aber krieg das net hin. AWT, Swing, JavaFX & SWT 2
I TrayIcon aber bitte nur einmal AWT, Swing, JavaFX & SWT 2
S JTable audrucken, aber mit mehreren Footers und Headers AWT, Swing, JavaFX & SWT 2
J JScrollPane aber Scrollbars nicht sichtbar! *grrrrr* AWT, Swing, JavaFX & SWT 10
M DragAndDrop-Waypoints bewegen, ABER Bildschirm flackert AWT, Swing, JavaFX & SWT 3
L GUI, aber wie? AWT, Swing, JavaFX & SWT 2
C Jar Datei ist ausführbar aber zeigt keine icon's an AWT, Swing, JavaFX & SWT 18
A mehrere GridbagLayouts, aber wie? AWT, Swing, JavaFX & SWT 7
X JTextArea Text ausgeben mit setText(a) aber wie? AWT, Swing, JavaFX & SWT 3
L Dynamische Buttons erstellt, aber wie ein Event zuweisen? AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben