PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Darstellung der Daten in einer JList?


Durcairion
2006-07-31, 19:42:53
Ich soll ein Programm realisieren, welches mit einer Datenbank (Firebird) kommuniziert.

Nun soll es so sein das die Ergebnisse aus der DB in einem Vector gespeichert werden, als Objekte der Klasse Person.

Wenn ich nun aber setListData(vec) mache, dann werden die Objekte wie folgt angezeigt:

Person@ZEICHENFOLGE

Gibt es auch eine Möglichkeit das ich z.B. für die einzelnen Eintrage die Rückgabewerte der getName() Funktion des jeweiligen Objektes anzeigen lassen kann?

Weil mit Person@ZEICHENFOLGE kann ich nicht wirklich was anfangen :)

Monger
2006-07-31, 21:00:32
JList ruft intern die toString() Methode für jedes Objekt auf, und schmeißt dann den Text in jeder Zeile raus. Wenn du also die toString() Methode für deine Person überschreibst, kannst du damit genau das machen.

HellHorse
2006-07-31, 21:17:34
Oder du machst es gleich richtig und schreibst einen ListCellRenderer (http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/ListCellRenderer.html). Das ist eine Zeile Code, die du schreiben musst. Den Rest lässt du dir von der IDE generieren. Im Klassenkommentar ist sogar ein Beispiel.

Durcairion
2006-07-31, 21:24:45
Vielen Dank für die schnelle Hilfe, funktioniert einwandfrei.

Kann ich auch irgendwie direkt ausgeben lassen in dieser Fkt toString() das wievielte Element in der Liste es ist?

Also im Moment sieht die Fkt bei mir so aus:


public String toString()
{
return getSurname()+", "+getName();
}

getSurname() und getName() returnen wiederrum die Inhalte der privaten Variablen.

Nun wird die Liste angezeigt nach "Surname, Name". Kann ich nun irgendwie noch einfügen das er davor z.B. die aktuelle "ID" bzw die Position im Vector mit ausgibt?

mithrandir
2006-08-01, 07:58:15
Das Personen-Objekt weiß ja nicht, dass es in einer Liste steht, geschweige dennn seine Position. Also ist die Antwort auf deine Frage: Nein, geht so nicht.

Aber wie HellHorse schon andeutete, geht das sehr einfach indem du einen eigenen Renderer implementierst. Das Beispiel steht direkt in der API-Doku:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/ListCellRenderer.html

Einfach in der Methode getListCellRendererComponent(..) das setText(..) so anpassen, wie du es gerne hättest. Den Index des Elements bekommt die Methode als Parameter mit!

bye, Peter

Monger
2006-08-01, 08:25:06
Bei der Gelegenheit will ich gleich mal einhaken: ist irgendwas als Renderer geeignet, wo man ein bißchen mehr Kontrolle über die Formatierung hat?

Ich bräuchte nämlich etwas, mit dem ich einige Werte in Spalten untereinander anordnen kann. Ich will aber keine Tabelle verwenden, weil letztendlich eine Zeile eben doch als ganzes reagieren soll (anklicken, markieren...)
Außerdem würde ich gerne meinen Text farbig machen.

Fällt euch da irgendwas dazu ein? :confused:

HellHorse
2006-08-01, 10:17:52
Bei der Gelegenheit will ich gleich mal einhaken: ist irgendwas als Renderer geeignet, wo man ein bißchen mehr Kontrolle über die Formatierung hat?
Ja, _jeder_ JComponent. Theoretisch gehen sogar AWT-Komponenten aber geeignet sind die nicht.
Ich bräuchte nämlich etwas, mit dem ich einige Werte in Spalten untereinander anordnen kann. Ich will aber keine Tabelle verwenden, weil letztendlich eine Zeile eben doch als ganzes reagieren soll (anklicken, markieren...)
Ein bisschen konkretere Anforderung wären nicht schlecht. Selektion lässt sich ja Anpassen mittels SelectionModel anpassen.

Innerhalb eines Listenelements untereinander anordnen?

Außerdem würde ich gerne meinen Text farbig machen.
Geht mit JLabel.

Monger
2006-08-01, 10:34:32
Ein bisschen konkretere Anforderung wären nicht schlecht. Selektion lässt sich ja Anpassen mittels SelectionModel anpassen.

Wie beschreibe ich das?`

Innerhalb der JList soll es ungefähr so aussehen:

Michael Mustermann 4 6 1 2 sonstigeInfos
Michelle Musterfrau 2 9 4 5 nochMehrInfos


etc. , und wenn ich auf eine Zeile klicke, soll diese ausgewählt werden. Wenn ein bestimmtes Ereignis kommt, soll die Schrift einer einzelnen Zeile auf rot wechseln. Bis jetzt habe ich die Zeile einfach mit HTML formatiert, aber vielleicht gibt es ja auch da etwas schickeres...

HellHorse
2006-08-01, 12:33:24
Michael Mustermann 4 6 1 2 sonstigeInfos
Michelle Musterfrau 2 9 4 5 nochMehrInfos

JPanel von JLabels oder JTable mittels SelectionModel Tweaks (hat ausserdem Vorteile bei der Sortierung).

etc. , und wenn ich auf eine Zeile klicke, soll diese ausgewählt werden.
Falls JTable:
#setSelectionMode(ListSelectionModel.SINGLE_SELECTION) und noch #setColumnSelectionAllowed(flase)

Wenn ein bestimmtes Ereignis kommt, soll die Schrift einer einzelnen Zeile auf rot wechseln.
MVC Event feuern, im Renderer hast du dann das Objekt, setzt entweder die Text oder Hintergrund Farbe.
Bis jetzt habe ich die Zeile einfach mit HTML formatiert, aber vielleicht gibt es ja auch da etwas schickeres...
Naja, wenn's funktioniert und die keine Probleme mit der Renderqualität hast.