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.