ArrayIndexOutOfBounds! Wie gehts anders?

Status
Nicht offen für weitere Antworten.

Man-e-Faces

Aktives Mitglied
Hallo!
Ich möchte in einer for-Schleife ein paar Buttons anlegen, bis die Länge des ButtonArrays erreicht ist.
Will ich aber in dieser Schleife auch Events einbauen, bekomme ich eine ArrayIndexOutOfBoundsException:


Code:
for (i=0;i<MenuButtons.length;i++){

MenuButtons[i].setFocusTraversal(MenuButtons[i-1],MenuButtons[i+1],null,null);
}
Das leuchtet mir schon ein, dass es so nicht klappt, weil er ja schon beim ersten
Durchlauf abstürzen muss, wegen [i-1], was es ja gar nicht gibt..
Trotzdem habe ich keine Lösung für dieses Problem gefunden...
Könnte mir bitte jemand weiterhelfen?
Mir fällt nur ein, so etwas zu tun (was aber umständlich ohne Ende ist):
Code:
if(MenuButtons.length==3)
MenuButtons[0].setFocusTraversal(MenuButtons[2],MenuButtons[1],null,null);
MenuButtons[1].setFocusTraversal(MenuButtons[0],MenuButtons[2],null,null);
MenuButtons[2].setFocusTraversal(MenuButtons[1],MenuButtons[0],null,null);
und dass dann eben für jede mögliche Länge des Arrays durchspielen..
Das kann doch nicht die einzige Lösung sein?
Danke im voraus,

Alex.
 

dotlens

Top Contributor
Code:
for (i=0;i<MenuButtons.length;i++){
if(i==0){
   MenuButtons[i].setFocusTraversal(MenuButtons[MenuButtons.length - 1],MenuButtons[i + 1],null,null);
}
else{
   MenuButtons[i].setFocusTraversal(MenuButtons[i-1],MenuButtons[i+1],null,null);
}
}
und für das letzte halt n bischen abändern
 

meez

Top Contributor
Irgendwie so:

Code:
MenuButtons[i].setFocusTraversal(MenuButtons[i-1 < 0? 0:i-1],MenuButtons[i+1 >= MenuButtons.length  ? MenuButtons.length -1: i+1],null,null);

Aber es wär bedeutend einfacher, wenn ich wüsste, wo du die Methode setFocusTraversal() gefunden hast?
 
G

Gast

Gast
es ist eine Anwendung für digitales Fernsehen (MHP), vielleicht gibt es die methode nur für diese speziellen Buttons (sie heissen HTextButtons..)
 

Man-e-Faces

Aktives Mitglied
Sorry, aber keine Lösung klappt so..Die Fehler werden zwar aufgefanen, jedoch passiert nichts..Habt ihr noch einen anderen Vorschlag? Die Parameter bedeuten(Pfeiltaste hoch,runter,links.rechts)..Vielleicht hilft das weiter.
Wie bekomme ich diese Methode zum laufen, ohne ein ArrayInexoutofBounds-Fehler zu verursachen und so, dass der Focus von einem Button zum nächsten bei Pfeiltaste runter und zum vorigen bei Pfeiltaste hoh wechselt??
 

kopfsalat

Bekanntes Mitglied
Code:
for (i=0;i<MenuButtons.length;i++){
  MenuButtons[i].setFocusTraversal(MenuButtons[i-1],MenuButtons[i+1],null,null);
}
Für i=0 (erster Durchlauf) gibt es eine Exception, da ein Zugriff per MenuButtons[i-1] auf den ungültigen Array-Index -1 stattfinden soll.
Für i=MenuButtons.length-1 (letzter Durchlauf) gibt es eine Exception, da ein Zugriff per MenuButtons[i+1] auf den ungültigen Array-Index MenuButtons.length stattfinden soll.

Jetzt kannst Du dir frei überlegen, was soll also mit den Buttons 'am Rand' geschehen soll, wenn man die jeweilige Pfeiltaste drückt ? Soll dann der erste Button mit dem letzten verbunden werden ? Hier ein Template:

Code:
for (i=0;i<MenuButtons.length;i++){
  MenuButtons[i].setFocusTraversal( i>0 ? MenuButtons[i-1] : "WASANDERES",
                                    i<MenuButtons.length-1 ? MenuButtons[i+1] : "NOCHWASANDERES",
                                    null,null);
}
 

PhantomXXL

Bekanntes Mitglied
Code:
for (i=0;i<MenuButtons.length;i++){ 
if(i-1<0) x=MenuButtons.length-1;
else x=i-1;
if(i+1>=MenuButtons.length) y=0;
else y=i+1;
MenuButtons[i].setFocusTraversal(MenuButtons[x],MenuButtons[y],null,null); 
}

wenn ich das richtig verstanden habe mit dem umständlichen weg würds so gehen?
 

kopfsalat

Bekanntes Mitglied
@Phantom
Sollte wohl. Dasselbe ohne x,y (ich liebe diese Kurzschreibform für 'if' mit dem '?', für das zweite bietet sich modulo an):

Code:
for (i=0;i<MenuButtons.length;i++){
  MenuButtons[i].setFocusTraversal( MenuButtons[ (i>0) ? i-1 : MenuButtons.length - 1 ],
                                    MenuButtons[ i % MenuButtons.length ],
                                    null,null);
}
 
G

Gast

Gast
Vielen dank ihr zwei!
kann es leider gerade nicht ausprobieren, sag Euch aber Bescheid, sobald ichs hinbekommen habe!
 

Man-e-Faces

Aktives Mitglied
Sorry, aber diese Variante klappt auch nur halb:
Code:
for (int i=0; i<MenuButtons.length; i++) {
   int y = 0;
   int z = 0;
   x+=50;
   MenuButtons[i]= new HTextButton()
   MenuButtons.setBounds(0,x,100,50);
   MenuButtons[i].addKeyListener(this);
   MenuButtons[i].addFocusListener(this);
   MenuButtons[i].addActionListener(this);
  
   //vom ersten Button bei Pfeiltaste hoch zurück zum letzten:
   if (i-1<0) y = MenuButtons.length-1;//kein Fehler, aber klappt auch nicht
   //sonst springe einen  Button nach oben
   else y = i-1;//klappt!
   
   //vom letzten Button bei Pfeiltaste runter zum ersten:
   if(i+1>=MenuButtons.length) z = 0;//klappt!
   //sonst einen Button weiter:
   else  z = i+1;//kein Fehler, aber klappt auch nicht!
   
   MenuButtons[i].setFocusTraversal(MenuButtons[y],MenuButtons[z],null,null);//hoch,runter,links,rechts
Habt ihr noch ne Idee? Sonst spring ich bald ausm Fenster ;-[
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E ArrayIndexOutOfBounds - mehrdimensionale Arrays Allgemeine Java-Themen 6
G Finde den Grund für ArrayIndexOutOfBounds nicht Allgemeine Java-Themen 2
E iReport: ArrayIndexOutOfBounds Allgemeine Java-Themen 9
O "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBounds Allgemeine Java-Themen 6
Thallius Delegation in Java. Wie gehts? Allgemeine Java-Themen 1
P Input/Output Datei einlesen per Scanner(f) - mit Cron gehts nicht Allgemeine Java-Themen 1
F Checkbox in JTable , eigener Cellrenderer -wie gehts weiter? Allgemeine Java-Themen 2
G In Eclipse läufts, aber bei java Start.class gehts nicht Allgemeine Java-Themen 8
D Gehts praktischer? Thema:Verschiedene Instanzen einer Klasse Allgemeine Java-Themen 3
P Wie gehts weiter? Allgemeine Java-Themen 10
S Gehts schneller? Allgemeine Java-Themen 10
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
E Anwendung verhält sich unter Mac anders als Unter Windows. Allgemeine Java-Themen 4
M liste von listen anders ausgeben Allgemeine Java-Themen 1
O RSA (JCE) anders als RSA in C ? Allgemeine Java-Themen 6
U Math.Random anders verteilen Allgemeine Java-Themen 4
X Websiten auslesen, Browser stellt Links anders da. Allgemeine Java-Themen 10
G experten gefragt? regx oder irgendwie anders . Allgemeine Java-Themen 3
reibi Klassenpfad mal anders - dynamisches Laden einer Klasse Allgemeine Java-Themen 7
L UnsatisfiedLinkError mal anders Allgemeine Java-Themen 4
A Warum verhält sich a+=b anders als a=a+b? Allgemeine Java-Themen 5
A StringTokenizer oder doch anders? Formelinterpretieren. Allgemeine Java-Themen 4
D gewisse Zeichen sind nach dem entschlüsseln anders Allgemeine Java-Themen 2
S ein taschenrechner, aber etwas anders. Allgemeine Java-Themen 2
8 Was ist denn jetzt anders? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben