hab gerade ein kleines problem mit einer JList und zwar:
ich hab eine Klasse A in der eine JList und eine andere klasse B in der ein ListModel ist.
der JList habe ich dem ListModel aus der klasse B übergeben.
Wenn ich nun während der laufzeit des programms irgend etwas in das ListModel einfüge, dann müsste die Jlist das sofort anzeigen oder? bei mir tut sie das leider nicht.
weiß einer von euch woran das evtl liegen könnte?
die anwendung ist leider etwas umfangreicher. grob:
[JAVA=42]
class A{
DefaultListModel ListModel = new DefaultListModel();
public DefaultListModel getListModel(){
return this.ListeModel;
}
class B{
import A;
JList Liste = new JList();
Liste.setModel(A.getListModel());
}
[/code]
alle änderungen an ListModel in weiteren methoden der klasse A, zB das hinzufügen eines elements etc, sollen direkt in die JList Liste aus klasse B übernommen werden.
also mit anderen worten soll die JList eine visualisierung des ListModels sein, klappt aber leider nicht
"alle änderungen an ListModel in weiteren methoden der klasse A" .. zeig mal bitte .. in der Regel überschreibt man dazu das DefaultListModel ... denn da wird dann durch fireXXXEvent die jeweilige Änderung an alle Listener (in dem Fall deine JList) propagiert
[JAVA=42]
class A{
DefaultListModel ListModel = new DefaultListModel();
public DefaultListModel getListModel(){
return this.ListeModel;
}
public addElem(String elem){
ListModel.addElement(elem);
}
}
class B{
import A;
JList Liste = new JList();
Liste.setModel(A.getListModel());
}
[/code]
sowas in der art. würde ich jetzt addElem aufrufen, würde ListModel um einen Wert erweitert werden, der erscheint aber nicht in der JList der klasse B
ich hoffe mal das der Code nur frei-hand getippt wurde, denn ListModel ist wie man erkennt bereits in Java vorhanden und kann nicht als Attributbezeichner verwendet werden ... Aber der TO würde ja gar nicht zur Aussage kommen, dass etwas zur Laufzeit nicht klappt, wenn er nicht mal durch den Compiler kommt .. von daher sage ich mal das Prinzip an sicht ist korrekt, bzw sehe ich nix an dem Bsp-Code ... im Zweifelsfall poste bitte mal ein KSKB an dem dein Problem sichtbar wird.
jo sorry war freihand eben runtergetippt habt aber denke ich verstanden was ich meine
falls es von bedeutung ist, "addElem" soll den rückgabewert "void" haben.
was ist ein KSKB?
ich poste einfach mal die klassen:
[JAVA=42]
public class Ereignisse {
UmfragenMap Speicher = new UmfragenMap();
DefaultListModel Liste = new DefaultListModel();
[JAVA=42]
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* UmfragenListeFrame.java
*
* Created on 20.12.2009, 21:22:12
*/
package umfragesystem.GUI;
import umfragesystem.Geschaeftslogik.*;
import umfragesystem.Datentypen.*;
/**
*
* @author ari
*/
public class UmfragenListeFrame extends javax.swing.JFrame {
Ereignisse ereignis = new Ereignisse();
/** Creates new form UmfragenListeFrame */
public UmfragenListeFrame() {
super("Auswahl");
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
UmfrageListeL = new javax.swing.JList();
NeueUmfrageB = new javax.swing.JButton();
der kann ja schonmal raus, da du das Model später wieder nochmal setzt .. ich bau mal was kleines was hoffentlich funktioniert, runtergebrochen auf deine Anforderungen
die liste sehe ich ja nur die einträge in der liste nicht hab mich sicher etwas unglücklich formuliert. kann das evtl mit der scrollpane zusammenhängen?
und der text der die item1... definiert ist von dem gui builder. der will sich irgendwie nicht löschen lassen
das is mir bewusst, meine anmerkung galt ja auch meinem Bsp ... gut an sich sollte dieser Item-teil aber nicht stören, da er ja kurz darauf wieder überschrieben wird, wär nur ein versuch
ok, nach nochmaligen drüberschauen, fällt mir auf das "AnlegenB" nie aufgerufen wird, oder überseh ich den Aufruf gerade?
ich hab mal in die klasse in der das ListModel ist im konstruktor mal was in das ListModel eingefügt, da klappt das wunderbar mit der JList. ich hab auch überprüft ob wirklich die AnlegenB aufgerufne wird (habe ne System.out.println("bla bla bal ") mit reingeschrieben das ist auch der fall. also in irgendwie will die JList wohl die dinger die in das ListModel kommen nicht einzeichnen
genau so habe ich mir die element der liste ausgeben lass und sie kamen auch genau so raus wie erwartet. nur in der dummen jlist erscheinen keine einträge
also in dem listmodel, dass der jlist übergeben wird stehen definitiv elemente drin.
und ja, ich übergebe nur strings, die beim auslesen der liste auch alle korrekt auf der konsole dargestellt werden
hab ich gerade gemacht, das bleibt leer. zumindest gibt die .toString() nur [] aus.
woran kann ads denn liegen? das model die jlist mir zurückliefert sollte doch das model sein, dass ihm zugewiesen wird oder zumindest genau diese elemente enthalten oder?
es ist zwar nicht schön, aber eigentlich müsste danach dennoch das 2. Model, also eigentlich das richtige Model, vorliegen. Das hatte ich ja schon gesehen.