JList + ListModel

M

MatheStein

Gast
Hey leute,

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?

gruß :)
 
M

MatheStein

Gast
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 :(

gruß
 

diggaa1984

Top Contributor
"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
 
M

MatheStein

Gast
das ging ja schnell :)

eigentlich ganze simple änderungen, zB:

[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 :(

gruß
 

Spin

Top Contributor
Hey ho , von was für ein Typ soll denn deine Methode

Java:
public addElem(String elem){
    ListModel.addElement(elem);
}
sein?


, void , primitiver Datentyp, oder Object.
?


Weiterhin schreibt man import immer über die Klasse. ;)

grüße
 

diggaa1984

Top Contributor
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.
 
M

MatheStein

Gast
jo sorry war freihand eben runtergetippt :D 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();

public Ereignisse(){
String[] Umfragen = Speicher.getAllTitel();
for(int i=0;i<Umfragen.length;i++){
Liste.addElement(Umfragen);
}
}

public DefaultListModel getListModel(){
return this.Liste;
}

public UmfrageDT UmfrageGewaehlt(String Umfrage){
return Speicher.getUmfrage(Umfrage);
}

public void NeueUmfrageB(){

}

public void AnlegenB(String Titel, String Umfragetext, String Enddatum){
//System.out.println("Titel: "+Titel+"Umfragetext: "+Umfragetext+"Enddatum: "+Enddatum);
UmfrageDT NeueUmfrage = new UmfrageDT(Titel,Umfragetext,Enddatum);
Speicher.addUmfrage(NeueUmfrage);
Liste.addElement(Titel);
System.out.println("erreicht");
System.out.println(Speicher.getAllTitel()[0]);
}

public UmfrageDT AbstimmenB(String Titel, boolean JN, String EmailAdresse, String Passwort){
Speicher.getUmfrage(Titel).addUser(EmailAdresse, JN);
return Speicher.getUmfrage(Titel);
}
}
[/code]

und die klasse mit der JList:

[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();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jLabel1.setText("Es gibt XXXX Umfragen in der Datenbank:");

UmfrageListeL.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings; }
});
UmfrageListeL.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
UmfrageListeL.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
UmfrageListeLMouseClicked(evt);
}
});
jScrollPane1.setViewportView(UmfrageListeL);
UmfrageListeL.setModel(ereignis.getListModel());

NeueUmfrageB.setText("Neue Umfrage");
NeueUmfrageB.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
NeueUmfrageBActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 355, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(NeueUmfrageB, javax.swing.GroupLayout.PREFERRED_SIZE, 193, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addContainerGap(32, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(18, 18, 18)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(NeueUmfrageB)
.addContainerGap(24, Short.MAX_VALUE))
);

pack();
}// </editor-fold>

private void NeueUmfrageBActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//ereignis.NeueUmfrageB();
new NeueUmfrageFrame().setVisible(true);
//Liste aktualisieren!
}

private void UmfrageListeLMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:+
if((!UmfrageListeL.isSelectionEmpty()) && evt.getClickCount()==2){
String TitelSelElem=this.UmfrageListeL.getSelectedValue().toString();
UmfrageDT selUmfrage=this.ereignis.UmfrageGewaehlt(TitelSelElem);
new AbstimmenFrame(selUmfrage);
}

this.UmfrageListeL.updateUI();
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new UmfragenListeFrame().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JButton NeueUmfrageB;
private javax.swing.JList UmfrageListeL;
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration

}
[/code]
 

diggaa1984

Top Contributor
Java:
UmfrageListeL.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });

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
 

diggaa1984

Top Contributor
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ListModelTest extends JFrame {
	
	public ListModelTest() {
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setLayout(new FlowLayout());
		JList list = new JList(ModelContainer.getModel());
		JButton addElem = new JButton("addElem");
		addElem.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				ModelContainer.addElem("foo");
			}
		});
		
		add(addElem);
		add(list);
		pack();
	}
	
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new ListModelTest().setVisible(true);
			}
		});
	}
	
	
	private static class ModelContainer {
		static DefaultListModel model = new DefaultListModel();
		
		public static DefaultListModel getModel() {
			return model;
		}
		
		public static void addElem(Object e) {
			model.addElement(e);
		}
	}
}

also das mal ganz rustikal ... mach das Fenster am Anfang ein wenig größer dann siehst auch die Liste .. und das klappt soweit :bahnhof:

das is übrigens ein KSKB .. ein "kleines selbstkompilierbares Beispiel" .. nur das hier dein Fehler nicht enthalten ist :)
 
Zuletzt bearbeitet:
M

MatheStein

Gast
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 :(
 

diggaa1984

Top Contributor
die liste sehe ich ja nur die einträge in der liste nicht
das is mir bewusst, meine anmerkung galt ja auch meinem Bsp :D ... 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?
 
M

MatheStein

Gast
der ist in noch einen anderen klasse :D

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 :(
 
M

MatheStein

Gast
hab auch mal gerade während der laufzeit das listmodel ausgelesen und auf der konsole ausgegeben. da stehn definitiv elemente drin
 

diggaa1984

Top Contributor
ok dann die Frage was du explizit in die Liste jagst :D nur Strings?

edit: aso .. hm das ja noch blöder ^^ @2. post

nutzt du eclipse oder dergleichen? dann lass dir mal sowas ausgeben wie:
Code:
meineEigensinnigeListe.getListModel().toString
.. oder sowas .. notfalls die Elemente in einer Schleife einzeln ausgeben lassen
 
M

MatheStein

Gast
:D:D:D ich nutze netbeans.

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
 

diggaa1984

Top Contributor
Java:
meineEigensinnigeListe.getListModel().toString
mit der liste da oben ist meine ich die JList .. deren Model hast du auch ausgegeben?!
 
M

MatheStein

Gast
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?
 
M

MatheStein

Gast
jo danke :)


also das model wird der JList direkt in dem konstruktor von der JFrame, in der die JList sich befindet, übergeben.
 

diggaa1984

Top Contributor
Java:
UmfrageListeL.setModel(new javax.swing.AbstractListModel() {
    String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
    
    public int getSize() { return strings.length; }

    public Object getElementAt(int i) { return strings[i]; }
});

<...>

UmfrageListeL.setModel(ereignis.getListModel());

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.
 
M

MatheStein

Gast
also mein code ist in etwas genau so wie deiner, nur das ich ihm den model erst später durch "setModel" übergebe und nicht im konstruktor
 
M

MatheStein

Gast
ich habs schon geändert und auch so übergeben wie du, also direkt beim erstellen der JList. tuts immer noch nicht :(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S ListModel - Anzeige im JList Java Basics - Anfänger-Themen 4
hdi Synchronisation zwischen JList und ListModel Java Basics - Anfänger-Themen 6
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
Soloeco JList/DefaultListModel: Wie kann ich ein Panel hinzufügen? Java Basics - Anfänger-Themen 1
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
D JList ListSelectionEvent entfernen? Java Basics - Anfänger-Themen 13
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
S Export aus JList Java Basics - Anfänger-Themen 6
M Erste Schritte JList einträge Java Basics - Anfänger-Themen 1
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
M Erste Schritte Auswahl in einer JList Java Basics - Anfänger-Themen 2
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
N JList + DefaultListModel + JScrollPane --> ensureIndexIsVisible funktioniert nicht immer Java Basics - Anfänger-Themen 1
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
J Element zu jList hinzufügen NullPointerExcepetion Java Basics - Anfänger-Themen 2
S jList --> Array einfügen und Liste löschen Java Basics - Anfänger-Themen 5
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
I in listFiles() oder JList Dateiendungen entfernen Java Basics - Anfänger-Themen 14
N Erste Schritte MySQL Tabelle in JList darstellen Java Basics - Anfänger-Themen 1
O JList aktualisieren während Dateieinlesung Java Basics - Anfänger-Themen 4
B JFileChooser und JList Java Basics - Anfänger-Themen 7
OnDemand Enumeration <> JList Java Basics - Anfänger-Themen 5
P Mehrfachauswahl in einer JList Java Basics - Anfänger-Themen 2
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5
C .txt und Jlist Java Basics - Anfänger-Themen 10
J Daten in eine JList einfügen Java Basics - Anfänger-Themen 6
A JList / toString modify Java Basics - Anfänger-Themen 2
K jlist an text anpassen Java Basics - Anfänger-Themen 3
D Erste Schritte JList + Checkbox Java Basics - Anfänger-Themen 5
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
A JList bearbeiten Java Basics - Anfänger-Themen 2
M Index einer JList ausgeben Java Basics - Anfänger-Themen 4
M Inhalt/Wert aus einer JList ablesen Java Basics - Anfänger-Themen 5
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
J Markierte Items in einer JLIST in einen Ordner verschieben Java Basics - Anfänger-Themen 2
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
H JList Java Basics - Anfänger-Themen 2
G JList Objekte richtig anzeigen in JDK 6 Java Basics - Anfänger-Themen 5
U JList Java Basics - Anfänger-Themen 6
L HashMap zu JList Java Basics - Anfänger-Themen 6
C Input/Output Inhalte von ArrayList und JList in Datei schreiben Java Basics - Anfänger-Themen 5
M Jlist Elemente hinzufügen Java Basics - Anfänger-Themen 2
F Koordinaten JList darstellen Java Basics - Anfänger-Themen 4
M BeanBinding Jlist an Jlabel Java Basics - Anfänger-Themen 2
M GUI JList - Objekte listen u. Feld anzeigen? Java Basics - Anfänger-Themen 16
E JList GUI aktualisieren? Java Basics - Anfänger-Themen 3
JAVAnnik JList Auswahl Java Basics - Anfänger-Themen 2
Z In JList per Doppelklick eine Datei öffnen (z.B. ein PDF) Java Basics - Anfänger-Themen 16
P Jlist + Popupmenu Java Basics - Anfänger-Themen 10
M Properties Eintrag löschen, welcher in der JList "ausgewählt" wurde Java Basics - Anfänger-Themen 2
c_sidi90 File Array an Jlist übergeben Java Basics - Anfänger-Themen 11
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
B JList und JTable: leere Zeilen bei listfiles(); Java Basics - Anfänger-Themen 5
N DefaultListModel auf JList sortieren Java Basics - Anfänger-Themen 7
A JList mit Überschrift Java Basics - Anfänger-Themen 2
K Scrollbalken in JList funktioniert nicht Java Basics - Anfänger-Themen 9
B JList wird nicht aktualisiert bzw hat keine Items Java Basics - Anfänger-Themen 2
D JList nicht sichtbar Java Basics - Anfänger-Themen 4
B JList mit Scrollbar? Java Basics - Anfänger-Themen 7
K Datenbindung an JTable, JList, Primärschlüssel verstecken Java Basics - Anfänger-Themen 4
M JList Event Java Basics - Anfänger-Themen 5
M JList Index selektieren ausschalten. Java Basics - Anfänger-Themen 7
M ArrayList<int[]> - Problem mit JList! Java Basics - Anfänger-Themen 27
L JList Aktualisieren funktioniert nur Zufällig Java Basics - Anfänger-Themen 3
T JList aktualisieren Java Basics - Anfänger-Themen 12
T alle Ordner in einem Ordner in JList anzeigen Java Basics - Anfänger-Themen 3
R .Jpg anzeigen lassen nach klick in JList Java Basics - Anfänger-Themen 11
F Hilfe! JList Inhalte vertauschen Java Basics - Anfänger-Themen 2
A Eintrag einer JLIST speichern Java Basics - Anfänger-Themen 3
A Anordnung von JList Elementen Java Basics - Anfänger-Themen 3
B JList wird nach Ändern weiß Java Basics - Anfänger-Themen 11
B Einträge im JList einfügen Java Basics - Anfänger-Themen 9
S JList mit icons UND strings für Dialogbox Java Basics - Anfänger-Themen 2
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
DStrohma Index einer markierten Zeile aus einer JList bekommen? Java Basics - Anfänger-Themen 5
P JList in JPanel anzeigen Java Basics - Anfänger-Themen 2
D Suche in JList nach dem ersten Buchstaben Java Basics - Anfänger-Themen 2
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
G Elemente aus jList entferne. Java Basics - Anfänger-Themen 2
G JList updaten Java Basics - Anfänger-Themen 7
K jList scrollPane Java Basics - Anfänger-Themen 2
7 Java Swing: Wie JScrollPane zur JList hinzufügen? Java Basics - Anfänger-Themen 12
K JList verschiebt sich Java Basics - Anfänger-Themen 7
G String in JList Java Basics - Anfänger-Themen 11
T Jlist Object hinzufügen Java Basics - Anfänger-Themen 2
B Auslesen der JList Java Basics - Anfänger-Themen 11
S jList Multiple Selection mit Klick Java Basics - Anfänger-Themen 2
M Dateien in einem Ordner, JList Java Basics - Anfänger-Themen 7
G JList größe verändert sich Java Basics - Anfänger-Themen 2
M JList Parameter verschieben Java Basics - Anfänger-Themen 3
C jList - Zeile Markieren - jList.setSelectedIndex(wert); Java Basics - Anfänger-Themen 3
G JList mit LinkedList füllen Java Basics - Anfänger-Themen 2
G JList Mehrfachselektion Java Basics - Anfänger-Themen 6
N 2 spaltige JList, mit dynamischen Inhalt Java Basics - Anfänger-Themen 4
P JList mit setListData(<Vector>) Java Basics - Anfänger-Themen 7
J GUI mit JList Java Basics - Anfänger-Themen 2
N drag and drop mit JList Java Basics - Anfänger-Themen 5
G 1. Buchstabe eines JList eintrages verschieden farbig machen Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben