JList som visar utvalda medlemmar i en lista av objekt

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Dec 2006

JList som visar utvalda medlemmar i en lista av objekt

Topicen säger ju egentligen det mesta. Det jag försöker skapa är alltså en JList som visar en ArrayList av en klass. Jag vill inte att den ska visa toString()-metodens värden, jag vill att den ska visa värdet på av mig utvalda medlemmar i klassen.

Hur gör man det? Ni behöver ju inte förklara för mig i detalj om ni inte ids, peka mig mot rätt spår så löser jag nog det själv tillslut

Mvh!

e6600@3.2GHz@1.35v + P5B deluxe + corsair 2gb pc6400 + HD4350 m.m.

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Dec 2006

Nu löste jag det faktiskt. Tricket var att implementera en egen ListCellRenderer

e6600@3.2GHz@1.35v + P5B deluxe + corsair 2gb pc6400 + HD4350 m.m.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2008

Din problemställning är inte helt klar, men jag tror säkert man kan klara sig utan en egen renderare. Men funkar det så funkar det...

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Dec 2006
Citat:

Ursprungligen inskrivet av badboll
Din problemställning är inte helt klar, men jag tror säkert man kan klara sig utan en egen renderare. Men funkar det så funkar det...

Jag har en ArrayList med objekt av en egen definierad klass som ska motsvara en kund. Gör jag en JList med ArrayListen så kommer den ju anropa toString() metoderna i varje objekt och använda det i listan. Det vill jag inte göra. Jag vill istället att två av objektets medlemmar ska skrivas ut.

Som sagt så funkade det ypperligt med en egen ListCellRenderer, och jag kom också på lite annat jag kan implementera med hjälp av den. Men, det skulle ändå vara intressant att veta till senare om detta kan lösas på ett enklare sätt.

e6600@3.2GHz@1.35v + P5B deluxe + corsair 2gb pc6400 + HD4350 m.m.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2008

Du kan göra det på två sätt:

1) implementera toString() i berörd klass så att den skriver ut det du vill. I de fall inte det är möjligt eller önskvärt, finns alternativ 2.

2) implementera en wrapperklass, som i sin tur överskuggar toString() på ett vettigt sätt. Ponera att vi i ditt fall har en klass som heter Customer. Vi skapar då en CustomerWrapper:

public class CustomerWrapper { private final Customer customer; public CustomerWrapper(Customer cust) { customer = cust; } public Customer getCustomer() { return customer; } @Override public String toString() { // returnera den textuella representation du vill ha i din JList. } }

Sedan är det bara att göra som vanligt när du matar in saker i JListen, fast du matar in wrappers istället för de faktiska Customer-objekten. Detta medför att när du ska hämta ut vilken Customer som är vald, hämtar du först ut vald wrapper, och sedan vilken Customer som den agerar omslag runt:

CustomerWrapper w = (CustomerWrapper)myJList.getSelectedValue(); Customer selected = w.getCustomer();

Metod 2 är ett standardknep som jag kommer på mig själv att använda ofta. Det funkar dessutom precis lika bra för JComboBoxar.

Detta sparar en del arbete (jämfört med att göra en egen renderare), om man nu är nöjd med att bara ha en vanlig rad text för ett element i sin JList. Ibland vill man ju skoja till det och ha mer avancerat utseende på sina listelement, och då är det ju helt rätt att göra en egen renderare.

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Dec 2006

Listigt det här med Wrapper-klasser. Helt klart ett smidigt sätt.
Men det var dock inte så knepigt att implemenera en egen renderare heller, fast nog inte lika enkelt som med en Wrapper-klass.

e6600@3.2GHz@1.35v + P5B deluxe + corsair 2gb pc6400 + HD4350 m.m.

Trädvy Permalänk
Avstängd
Plats
Sthlm
Registrerad
Nov 2008

Badboll = Swing guru.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2008
Citat:

Ursprungligen inskrivet av saddam
Badboll = Swing guru.

Inte på långa vägar, men sitter man med det åtta timmar om dagen så bör man väl snappa upp en del...

Trädvy Permalänk
Avstängd
Plats
Sthlm
Registrerad
Nov 2008

8h om dagen?? Vad gör du på jobbet?

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2008
Citat:

Ursprungligen inskrivet av saddam
8h om dagen?? Vad gör du på jobbet?

Jobbar?

Nej, åtta timmar är en överdrift. Men det har varit väldigt mycket GUI-gnetande på sistone i jobbet - applikationen jag utvecklar för närvarande är inte särskilt logik- eller algoritmtung, utan handlar mest om att skyffla data in och ut ur databaser med ett snyggt skal ovanpå. Jag har därigenom också haft orsak till att dyka in i Swings allra mörkaste vrår ett par gånger... vad är det man säger - "det som inte dödar, det härdar"?

Trädvy Permalänk
Avstängd
Plats
Sthlm
Registrerad
Nov 2008

Hur lär man sig Swing bra? Jag har jobbat med ett projekt själv, med JTable och dess cellrenderer. Jag hade frågor som jag inte fick bra svar på. Har du några gurusar som du kan fråga, eller är det websidor? Vad gör du när du kör fast med Swing?

Jag körde fast, och kom inte längre. Vad gör man då?