Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe ein Array von Choices mit 10 Elementen erzeugt. Nun soll beim Auswählen eines Choice-Items zwei weitere Choices erstellt werden. Das klappt auch soweit, aber nur für das erste Choice, also choice[0]. Wenn ich es aber mit einer For-Schleife für die anderen Choice-Elemente tun will, passiert alles mögliche. Es entstehen auf einmal 3 choices für verschiedene Elemente und so weiter.
Hier der Code:
Code:
public void itemStateChanged(ItemEvent ie) {
if(ie.getStateChange() == ItemEvent.SELECTED) {
for (int i=0; i<choices.length; i++) {
String gewaehlt = choices[i].getSelectedItem();
if(gewaehlt.equals("ADD")) {
if (cADD1 !=null) panel[i].remove(cADD1);
if (cADD2 !=null) panel[i].remove(cADD2);
if (cLOAD1 !=null) panel[i].remove(cLOAD1);
if (cLOAD2 !=null) panel[i].remove(cLOAD2);
cADD1= new Choice();
cADD2= new Choice();
cADD1.add("R 1");
cADD2.add("R 2");
panel[i].add(cADD1);
panel[i].add(cADD2);
}
else if(gewaehlt.equals("LOAD")) {
if (cLOAD1 !=null) panel[i].remove(cLOAD1);
if (cLOAD2 !=null) panel[i].remove(cLOAD2);
if (cADD1 !=null) panel[i].remove(cADD1);
if (cADD2 !=null) panel[i].remove(cADD2);
cLOAD1= new Choice();
cLOAD2= new Choice();
cLOAD1.add("R 1");
cLOAD2.add("3");
panel[i].add(cLOAD1);
panel[i].add(cLOAD2);
}
else if (gewaehlt.equals("NOP")){
if (cNOOP !=null) panel[i].remove(cNOOP);
if (cADD1 !=null) panel[i].remove(cADD1);
if (cADD2 !=null) panel[i].remove(cADD2);
if (cLOAD1 !=null) panel[i].remove(cLOAD1);
if (cLOAD2 !=null) panel[i].remove(cLOAD2);
}
}
repaint();
validate();
}
So sollte es nach Wählen der Items für jede Choice aussehen:
ich bezweifle zwar, dass es am Layout manager liegt. Denn das Problem ist ja die Anzahl an Choices, die nach dem Auswählen erzeugt werden und nicht die Darstellung, aber ich verwende GridLayout.
Das ganze klappt ja auch für den ersten Choice. Das Problem tritt auf, wenn ich die For-Schleife einsetze.
Ganz durchschaue ich das Problem nicht, aber m.E. müssten für cADD1 etc. auch Arrays verwendet werden, denn so legst Du ja in der Schleife eine Choice an, hängst sie mit add() in panel ein und versuchst dann im nächsten Durchlauf, das Objekt, das in panel eingehängt wurde, mit remove aus panel[i+1] - wo es aber niemals eingehängt wurde - zu entfernen.
Außerdem werden die Choice-Objekte durch das remove ja nicht auf null gesetzt; das müsste wohl auch noch explizit passieren.