Если информация, которую вы хотите увидеть (вместо того, что выдает toString ()), содержится в самом объекте, самый прямой способ "Swing" сделать это - использовать ListCellRenderer, Думайте о ListCellRenderer (на самом деле, о любом CellRenderer) как о штампе, который используется для рисования каждого объекта в вашем списке. Объект передается, вы настраиваете компонент, компонент рисует ваш объект, а затем переходит к следующему объекту. CellRenderer никогда не имеет состояния.
Рассмотрим этот пример:
// Extend DefaultListCellRenderer, takes care of most of the work for you
public class ExampleListCellRenderer extends DefaultListCellRenderer
{
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
// I know DefaultListCellRenderer always returns a JLabel
// super setups up all the defaults
JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelect, cellHasFocus);
// "value" is whatever object you put into the list, you can use it however you want here
// I'm going to prefix the label text to demonstrate the point
label.setText("PRE:" + label.getText());
return label;
}
}
// Some time later...
JList list = new JList();
list.setCellRenderer(new ExampleListCellRenderer());