repaint() funktioniert nicht

Supermario

Mitglied
Hallo,
ich habe folgendes Problem. Ich habe eine JList in der Daten aus einer DB eingelesen werden. In einem anderen Panel (auch andere Klasse) hab ich ein Formular wo man Daten zu der DB hinzufügen kann. Nun möchte ich, wenn man den Button drück das die JList neu gezeichnet wird. Aber es klappt nicht ? ich habs mit repaint, updateUI und validate versucht. (Bei den letzten Beiden weiss ich nicht mal genau was die machen). Aber die JList wird nie aktualisiert. Nur wenn ich das Panel schließe und neu öffne, dann sehe ich die neuen Daten. Hat jemand eine idee?

2.te Frage, wenn ich ein Panel neuzeichne, auf dem mehrere Komponenten liegen. Werden die dann auch automatisch nochmal aktualisiert?

Gruß Supermario
 
Moin!
Eigentlich ist ein repaint aufruf nicht nötig... aber
wie fügst du die Daten aus deinem Formular in die JList ein?
Hast du ein eigenes ListModel für die JList? Falls ja, führe mal die "fireIntervallAdded()" Methode aus.

Und falls es immer noch net klappt.. zeige mal die entsprechenden Codestellen..

*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
hey, erstmal danke für die schnelle antwort - ich fülle meine JList wie folgt:

Java:
Swimmer[] s = DataAccess.DbReadAllSwimmer();
final String[] listenElement = new String[s.length];
for(int i=0; i < s.length; i++)
{
      listenElement[i] = s[i].toString();
}
list1.setModel(new javax.swing.AbstractListModel()
 {
     public int getSize() { return listenElement.length; }
     public Object getElementAt(int i) 
     { 
           return listenElement[i]; 
     }
});
scroll.setViewportView(list1);

mein JList besitzt die Methode fireIntervallAdded() gar nicht wie es aussieht. Binaber auch eher ein Anfänger kann sein, dass ich selber noch andere fehler gemacht habe .... Aber es geht immernoch nicht :(

gruß
 
Moin!
Sehe ich das richtig.. beim ersten Einlesen aus der Datenbank wird die Liste so gefüllt.. Und wenn du über das Formular Daten zur Datenbank hinzufügst, führst du wieder diesen Codeteil aus? Das wäre nämlich ein wenig unschön.

Erstelle dir besser einmal ein eigens ListModel (am besten erbst du von DefaultListModel).
In dieses Model liest du dann beim ersten Mal die Daten ein und fügst das Model deiner List hinzu..

Falls neue Datensätze entstehen, durch das Formular, änderst du die Daten nur in deinem ListModel, anstatt wie bisher jedes mal ein neues Model zu erstellen... Eventuell ist es dann nötig(eigentlich net, aber schaden kann es ja nicht), auf diesem Model die bereits genannten fireIntervallAdded() Methode aus..

Hab leider net so viel Zeit, sonst würd ich ein kleines Beispiel posten.. Aber vielleicht schaffst du es ja auch so.. Ansonsten halt wieder hier melden..

*grüssle*
MeinerEiner
 
hmm naja eigentlich führe ich den code nur einmal aus beim panel zeichnen. und jetzt wollte ich halt mit repaint diese einfach neu zeichnen wenn neue werte in der db sind, um nicht immer das panel zu schließen und wieder zuöffnen. mit JList kenn ich mich selber nicht so aus, wie gesagt bin da eher ein anfänger, also geht das nur über ein eigenes JListModel? gibt es keine möglichkeiten die einfach zu refreshen?

gruß
 
Okay, wenn du diesen Code nur ein einziges mal ausführst, wo ist dann der Code, der ausgeführt wird, nachdem du über das Formular neue Daten eingetragen hast? Das musst du ja auch programmatisch irgendwie geregelt haben...
Denn nur weil du ein reapint() aufrufst, werden da noch lange net Daten neu eingelesen...

*grüssle*
MeinerEiner
 
ich habs hinbekommen, danke für die ansetze, ich hab zunächst die liste geleert (mit remove) und dann einfach neu gefüllt. danke nochmal!
 
Zurück