Si la información que desea ver (en lugar de lo toString() escupe) está contenida en el objeto en sí mismo, la forma "oscilación" más directa de lograr esto es a través del uso de ListCellRenderer. Piense en un ListCellRenderer (cualquier CellRenderer realmente) como un sello de goma utilizado para dibujar cada objeto en su lista. El objeto se transfiere, configura el componente, el componente dibuja su objeto y luego pasa al siguiente objeto. El CellRenderer nunca tiene ningún estado.
Considere este ejemplo:
// 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());
basszero gracias por su explicación detallada e informativa de listcellrenderers y el ejemplo que proporcionó. Aprendí mucho :) – blackace
@blackace - marca la casilla junto a la respuesta para aceptarla y dale a @basszero los puntos que merece. – I82Much
@ i82Much ambas respuestas que he recibido son correctas. No puedo indicar eso de ninguna manera? – blackace