java-forum.org
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org > Java - Programmierung > AWT, Swing & SWT

AWT, Swing & SWT Themen zur Programmierung von Benutzer-Oberflächen (GUI, Applet) sowie zur Grafikprogrammierung (2D / 3D)

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 29.07.2009, 15:48   #1 (permalink)
Stammbenutzer
Team RPGenesis
Megabyte
 
Benutzerbild von Developer_X
 
Registriert seit: 01.02.2009
Beiträge: 1.487
Abgegebene Danke: 2
Erhielt 12 Danke für 12 Beiträge
Standard IndexOutOfBoundsException, aber warum?!

Hi, wenn ich den Code starte, dann komtm da eine IndexOutOfBoundsException, aber warum?
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
__________________
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl
Developer_X ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 15:57   #2 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Beiträge: 27.714
Abgegebene Danke: 0
Erhielt 1.799 Danke für 1.780 Beiträge
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
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)
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 15:59   #3 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 17.11.2003
Beiträge: 4.796
Abgegebene Danke: 14
Erhielt 191 Danke für 180 Beiträge
Wann genau kommt die Exception? Wenn Du auf den Button drückst, oder? Warum ist i ein Feld und keine lokale Variable in einer for -Schleife? Dann könnte das nämlich gar nicht passieren. Mal sehen, ob Du's rausfindest...

Ebenius
__________________
The first rule of program optimization: don't do it. The second rule of program optimization (for experts only!): don't do it yet. [Michael Anthony Jackson]
Ebenius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 16:00   #4 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 17.11.2003
Beiträge: 4.796
Abgegebene Danke: 14
Erhielt 191 Danke für 180 Beiträge
Zitat: SlaterB
Beitrag anzeigen
keine Exception
Lügner

Ebenius
__________________
The first rule of program optimization: don't do it. The second rule of program optimization (for experts only!): don't do it yet. [Michael Anthony Jackson]
Ebenius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 16:01   #5 (permalink)
Stammbenutzer
Team RPGenesis
Megabyte
Themenstarter
 
Benutzerbild von Developer_X
 
Registriert seit: 01.02.2009
Beiträge: 1.487
Abgegebene Danke: 2
Erhielt 12 Danke für 12 Beiträge
ja so ist keine exception, wenn man aber auf die buttons klickt, dann fällt diese exception
__________________
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl
Developer_X ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 16:02   #6 (permalink)
Benutzer
int
 
Registriert seit: 13.05.2009
Beiträge: 63
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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
M4x0r ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 16:02   #7 (permalink)
Stammbenutzer
Team RPGenesis
Megabyte
Themenstarter
 
Benutzerbild von Developer_X
 
Registriert seit: 01.02.2009
Beiträge: 1.487
Abgegebene Danke: 2
Erhielt 12 Danke für 12 Beiträge
Zitat: Ebenius
Beitrag anzeigen
Wann genau kommt die Exception? Wenn Du auf den Button drückst, oder? Warum ist i ein Feld und keine lokale Variable in einer for -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
__________________
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl
Developer_X ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 16:03   #8 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 17.11.2003
Beiträge: 4.796
Abgegebene Danke: 14
Erhielt 191 Danke für 180 Beiträge
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
__________________
The first rule of program optimization: don't do it. The second rule of program optimization (for experts only!): don't do it yet. [Michael Anthony Jackson]
Ebenius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 16:06   #9 (permalink)
Stammbenutzer
Team RPGenesis
Megabyte
Themenstarter
 
Benutzerbild von Developer_X
 
Registriert seit: 01.02.2009
Beiträge: 1.487
Abgegebene Danke: 2
Erhielt 12 Danke für 12 Beiträge
hey, wenn ich am ende so mache:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
 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.
__________________
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl
Developer_X ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 16:10   #10 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 17.11.2003
Beiträge: 4.796
Abgegebene Danke: 14
Erhielt 191 Danke für 180 Beiträge
Mach i aus der Klasse raus:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        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
__________________
The first rule of program optimization: don't do it. The second rule of program optimization (for experts only!): don't do it yet. [Michael Anthony Jackson]
Ebenius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 16:10   #11 (permalink)
Stammbenutzer
Team RPGenesis
Megabyte
Themenstarter
 
Benutzerbild von Developer_X
 
Registriert seit: 01.02.2009
Beiträge: 1.487
Abgegebene Danke: 2
Erhielt 12 Danke für 12 Beiträge
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
__________________
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl
Developer_X ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 16:16   #12 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Beiträge: 27.714
Abgegebene Danke: 0
Erhielt 1.799 Danke für 1.780 Beiträge
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 29.07.2009, 16:20   #13 (permalink)
Benutzer
int
 
Registriert seit: 13.05.2009
Beiträge: 63
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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[i].... 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...

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

Geändert von M4x0r (29.07.2009 um 16:37 Uhr)
M4x0r ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.07.2009, 08:57   #14 (permalink)
Stammbenutzer
Team RPGenesis
Megabyte
Themenstarter
 
Benutzerbild von Developer_X
 
Registriert seit: 01.02.2009
Beiträge: 1.487
Abgegebene Danke: 2
Erhielt 12 Danke für 12 Beiträge
ich weiß, aber 6 6 gefällt mir besser, weil das dann gleich quadratisch ist,
__________________
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl
Developer_X ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.07.2009, 09:34   #15 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 04.03.2009
Beiträge: 8
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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..
roque ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 30.07.2009, 16:03   #16 (permalink)
Benutzer
int
 
Registriert seit: 13.05.2009
Beiträge: 63
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
ja, also ich hätte es vielleicht so gemacht:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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();
    }
 
}

Geändert von M4x0r (30.07.2009 um 16:19 Uhr)
M4x0r ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort    

Lesezeichen

Latex Maths & Physics Editor ...

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus



Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de