3.4k Aufrufe
Gefragt in Anwendungen(Java,C++...) von fabian030 Einsteiger_in (19 Punkte)
a bit of progress later ...

ich hab ein klassisches MVC aufgebaut.

im model hab ich meine LinkedList mit Kundendaten (Kundennummer und Kundenname)
und eine methode

public void kundenAusgeben() {
String alleKunden = null;
for (Kunde i : kundenListe) {
alleKunden += ""+i + "\n";
}
if (alleKunden == null){
controlString = "keine Kunden vorhanden";
fireModelEvent2(new ModelEvent(this));
}
else {
lastString = ""+alleKunden;
fireModelEvent(new ModelEvent(this));
}
}

controlString und lastString werden über return-String-Methoden zurückgegeben.


im Controller sieht der dazugehörige aufruf dann so aus:

if(e.getActionCommand().equals(Mete2View.KUNDEN)){
((Mete2Model)getModel()).kundenAusgeben();
}


und in der View passiert dann das:
JTextArea texfeld = new JTextArea(10, 100);

public void modelChanged(ModelEvent e) {
textfeld.setText((((Mete2Model) getMvcModel()).getLastString()));
textfeld.setText((((Mete2Model) getMvcModel()).getControlString()));
}

----------------

klappt super mit dem JTextArea

nun will ich aber den inhalt aus der LinkedList (also die Kundennummer und den Kundennamen) in ner JList darstellen (um dann später auf einen eintrag zu klicken und das was für den eintrag gespeichert wurde in einem zweiten JList anzuzeigen)

hat jemand ne idee wie das funktioniert? :/

7 Antworten

0 Punkte
Beantwortet von mr_x_hacker Mitglied (129 Punkte)
Hi,

nu, im einfachsten Fall mit
new JList(myLinkedList.toArray())

Alternativ kannst Du auch javax.swing.ListModel implementieren, und dort Deine Liste durchlaufen...

Ciao Sascha
0 Punkte
Beantwortet von fabian030 Einsteiger_in (19 Punkte)
mit new JList(myLinkedList.toArray());
kann ich halt nicht so einfach arbeiten, da ich erst in der modelChanged-Methode es an die JList geben würde

public void modelChanged(ModelEvent e) {
kundenListe.setText((((Mete2Model) getMvcModel()).getKunden().toArray()));
}

wobei getKunden() die LinkedList zurückgibt.

macht er aber nicht ...
setText mag er nicht. ich soll meine kundenListe casten. ^^
0 Punkte
Beantwortet von mr_x_hacker Mitglied (129 Punkte)
Nu, setText() ist jetzt auch nicht die Methode der Wahl um eine Liste zu befüllen ^^

Versuch mal: setListData(kundenListe.toArray())

Und siehe auch die API-Doc der Liste...
0 Punkte
Beantwortet von fabian030 Einsteiger_in (19 Punkte)
joa. hab ich inzwischen auch rausbekommen ;)
dankööööööö :D

wenn ich jetzt n element anklicke, soll er mir für dieses element gespeicherte informationen in einer zweiten JList anzeigen.

wie kann man denn in der view den ActionListener für elemente dafür nutzen? ich kann mich erinnern darüber was gelesen zu haben bei google, find's aber nicht wieder :(

*jammer*
0 Punkte
Beantwortet von mr_x_hacker Mitglied (129 Punkte)
Würdest Du mal auf meinen Link klicken, fändest Du ganz oben in the "method summary" das hier:
addListSelectionListener(ListSelectionListener listener)
Adds a listener to the list that's notified each time a
change to the selection occurs.

:)

Du brauchst also keinen ActionListener, sondern einen ListSelectionListener - dieser hat eine Methode valueChanged(...), die jedes Mal aufgerufen wird, sobald jemand ein Listenelement selektiert... nu, und da drin machst Du dann das, was Du machen willst...
0 Punkte
Beantwortet von fabian030 Einsteiger_in (19 Punkte)
hmm
da hammas ja gehabt *unschuldigguck*

nunja.
ich hab dann halt meiner liste den listselectionlistener hinzugefügt

ListSelectionListener listListener;

kundenListe.addListSelectionListener(listListener);

in der valueChanged-Methode dann das:

public void valueChanged(ListSelectionEvent event) {
Kunde k = (Kunde)kundenListe.getSelectedValue();
kontenListe.setListData((k.getKonten()).toArray());
}

während einfach die hashmap zurückgibt, in der die Kundendaten des in JList kundenListe selektierten Kunden stehen ... zumindest theoretisch ^^ :)

public HashMap<Integer, Konto> getKonten(){
return meineKonten;
}

----
mag er aber auch nicht.
er will k.getKonten().toArray(); einen cast hinzufügen auf LinkedList oder List ...
und setListData für ne HashMap mag er erst recht nicht.
damn it.
0 Punkte
Beantwortet von mr_x_hacker Mitglied (129 Punkte)
Was willst Du denn aus der Map? Die Integers oder die Konten? Vermutlich letzteres... dann wäre es also

Map m = kunde.getKonten();
kontenListe.setListData(m.values().toArray());
...