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.
Hallo, ich habe hier ein kleines (wahrscheinlich recht blödes) Problem mit einer JList, finde aber den Fehler einfach nicht.
Code:
DefaultListModel model = new DefaultListModel();
jThemenListe = new JList( model );
jThemenListe.setBackground(java.awt.SystemColor.info);
JScrollPane jScrollingList = new JScrollPane(jThemenListe);
jScrollingList.setBounds(new java.awt.Rectangle(20,550,976,140));
jScrollingList.setBackground(java.awt.SystemColor.info);
jContentPane.add(jScrollingList);
Die Zeile "model.addElement(((Data)..." funktioniert nicht. Ich bekomme in der GUI nichts angezeigt. Die Konsolenausgabe darunter funktioniert wunderbar, also liegt es weder an der Schleife, noch am Inhalt der Liste, denke ich. Wenn ich "model.addElement("Test")" aus der Schleife herausnehme funktioniert dies, in der Schleife aber ebenfalls keine Anzeige.
Hat keiner eine Idee? Hab das Problem mal noch etwas eingegrenzt:
Code:
int jMax = derby.listeT.size();
System.out.println(jMax);
for (int s=0; s<jMax; s++){
model.addElement("Test");
System.out.println(jMax);
}
Die Schleife wird durchlaufen, so wie es sein soll, die Konsolenausgabe erfolgt auch dementsprechend. Nur das Hinzufügen zum model passiert einfach nicht.
Das Merkwürdige:
Wenn ich in den Schleifenkopf statt "jMax" als Grenze eine Zahl eintrage, dann funktioniert auch Letzteres.
// int jMax = derby.listeT.size();
int jMax = 3;
System.out.println(jMax);
for (int s=0; s<jMax; s++){
model.addElement("Test");
System.out.println(jMax);
}
also jMax einen normalen Integerwert zuweise, dann geht es.
Aber hier:
Code:
int jMax = derby.listeT.size();
mache ich doch auch nichts anderes. Und wie gesagt, wenn ich mir den Wert ausgeben lasse, dann sieht das auch gut aus. Außerdem wird alles in der Schleife ausgeführt, bis auf das "model.addElement".
Ja, wie ich schon geschrieben habe, in dem Fall funktioniert das. Da hast Du ja jMax aber auch wieder einen festen Wert zugewiesen. Ist blöd nachzustellen, wenn man die Liste nicht hat, aber das Problem scheint woanders zu liegen.
Hat aber mit dem Layout nichts zu tun, denn wie gesagt, Dein obiges Beispiel funktioniert - auch mit NullLayout.
Ja, wie ich schon geschrieben habe, in dem Fall funktioniert das. Da hast Du ja jMax aber auch wieder einen festen Wert zugewiesen. Ist blöd nachzustellen, wenn man die Liste nicht hat, aber das Problem scheint woanders zu liegen.
Hat aber mit dem Layout nichts zu tun, denn wie gesagt, Dein obiges Beispiel funktioniert - auch mit NullLayout.
Also das hat mit dem festen Wert kaum etwas zu tun. Welchen Wert bekommst du denn von derby.listeT.size()?
Aber mit NullLayout kann es nicht funktionieren weil wir ja keinen setBounds(..) machen.
Meinst Du dies hier? Oder "jContentPane.setBounds..."? Das mache ich wirklich nicht.
Aber wie schon gesagt. Sobald ich vor der Schleife z.B. jMax=5 setze, dann bekomme ich fünf mal "Test" in meine JList. Mache ich aber "int jMax = derby.listeT.size()", dann kommt selbst dann nichts dabei heraus, wenn mir die Konsole via "System.out.println(jMax)" sagt, das jMax ebenfalls 5 ist.
Ich denke André wollte darauf hinasu, das es vielleicht 0 o. ä. ist und die Schleife damit nicht durchgelaufen wird. Lass dir den Wert doch vorher einfach mal ausgeben.
Vergiss das mit dem setBounds, ich hatte übersehen dass da doch einer ist.
Bist du sicher was in derby.listeT.size() geschieht ?
Hast du die size()-Methode vielleicht überschrieben?
...
Mache ich aber "int jMax = derby.listeT.size()", dann kommt selbst dann nichts dabei heraus, wenn mir die Konsole via "System.out.println(jMax)" sagt, das jMax ebenfalls 5 ist.
Ich weise int jMax den Wert von derby.listeT.size() zu, lasse mir den ausgeben auf die Konsole, und verwende ihn dann als Abbruchkriterium für die Schleife. Ich weiß also welchen Wert ich zugewiesen habe.
Bist du dir sicher das auch so viele Werte in der Liste drin stehen wir dir der size() Wert ausgibt. Bei Vectoren kann es auch sein das sie größer sind als sie Werte enthalten. Welchen Listentyp benutz du denn? in JList ist size() deprecated. Eventuell da noch mal schauen.
Hallo, ja, da bin ich mir sicher. Ich lasse doch den Inhalt der List (JList) auch auf die Console ausgeben, und das funktioniert. Die Schleife wird auch entsprechend dem .Size()-Wert ausgeführt (Consolenausgabe). Nur bei model.addElement passiert scheinbar nix. Ich hab soetwas noch nicht erlebt ;-)
Code:
DefaultListModel model = new DefaultListModel();
jThemenListe = new JList( model );
jThemenListe.setBackground(java.awt.SystemColor.info);
JScrollPane jScrollingList = new JScrollPane(jThemenListe);
jScrollingList.setBounds(new java.awt.Rectangle(20,550,976,140));
jScrollingList.setBackground(java.awt.SystemColor.info);
model.clear();
jContentPane.add(jScrollingList);
jContentPane.validate();
jContentPane.repaint();
int jMax = derby.listeT.size();
//jMax = 5;
for (int s=0; s<=jMax; s++){
System.out.println("jMax: " + jMax);
System.out.println("s: " + s);
model.addElement("Test");
}
Ich weiß echt nicht mehr weiter. Ich muss doch weiterkommen und kann mich nicht solange an diesem Problem aufhalten. Weiß jemand eine Alternative für mich, vielleicht ohne JList? Es geht darum, dem Anwender als Resultat eines Fragenkataloges eine Menge von Lösungen zu präsentieren, aus denen er dann eine auswählen / öffnen können soll...
Das ist ja soweit schön, nur wenn ich model dann Elemente hinzufüge, aber diese Zeile gleich wieder aufrufe, dann wird meine JList wohl immer scheinbar leer sein, was?
Danke an alle, die sich die Mühe gemacht haben, mir zu helfen. Leider war der Fehler aus dem von mir geposteten Codeschnippsel nicht zu erkennen. Entschuldigung!