Конструктор JList, о котором мы заботимся в этом случае, принимает массив объектов, как уже указывал Тони. Вот где его ответ перестает быть полезным (без обид, Тони).
По умолчанию ListCellRenderer, который использует JList, добавляет JLabels, которые содержат текст из Object # toString (). Таким образом, вместо передачи Strings вы хотите передать ему массив ваших пользовательских объектов, а затем добавить ListSelectionListener (который используется после того, как пользователь нажимает на JList) и ListCellRenderer (который определяет, как объект User переводится в JComponent. это будет нарисовано как часть JList).
Вы хотите сделать что-то подобное (подробности см. Во встроенных комментариях):
//generate your user data
User[] userData = ...;
//add an array of Objects to a JList using the constructor
//(all classes extend java.lang.Object, including User)
JList foo = new JList(userData);
//overwrite the ListCellRenderer. This will take care of just displaying
//the name of the user
foo.addListSelectionListener(new ListSelectionListener(){
JLabel rv = new JLabel();
@Override
public Component getListCellRendererComponent(JList list,
Object value, int index, boolean isSelected,
boolean cellHasFocus){
String s = (value != null && value instanceof User)? ((User)value).name:"";
rv.setText(s);
if (isSelected) {
rv.setBackground(list.getSelectionBackground());
rv.setForeground(list.getSelectionForeground());
} else {
rv.setBackground(list.getBackground());
rv.setForeground(list.getForeground());
}
rv.setEnabled(list.isEnabled());
rv.setFont(list.getFont());
rv.setOpaque(true);
return rv;
}
});
//Now overwrite the ListSelectionListener which will take care of getting
//user object when the user clicks it
foo.addListSelectionListener(new ListSelectionListener(){
@Override
public void valueChanged(ListSelectionEvent lse) {
User selectedValue = (User)((JList)lse.getSource()).getSelectedValue();
//now you can do something with the User Object that was just selected
updateDatabase(selectedValue.id, selectedValue.name,
selectedValue.location);
});