Wenn die Informationen, die Sie (anstelle von was auch immer toString() ausspuckt) enthalten ist in dem Objekt selbst, die direkteste „Swing“ Art und Weise sehen mögen, dies zu erreichen ist durch die Verwendung eines ListCellRenderer. Stellen Sie sich einen ListCellRenderer (eigentlich einen CellRenderer) als einen Stempel vor, mit dem jedes Objekt in Ihrer Liste gezeichnet wird. Das Objekt wird übergeben, Sie richten die Komponente ein, die Komponente zeichnet Ihr Objekt und fährt dann mit dem nächsten Objekt fort. Der CellRenderer hat niemals einen Status.
Betrachten Sie dieses Beispiel:
// 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 danke für deine ausführliche und informative Erklärung von ListcellRenderers und dem von dir bereitgestellten Beispiel. Ich habe viel gelernt :) – blackace
@blackace - Aktivieren Sie das Kontrollkästchen neben der Antwort, um es zu akzeptieren und @Basszero die Punkte zu geben, die er verdient. – I82Much
@ i82Möchten beide Antworten, die ich erhalten habe, korrekt sind. Ich kann das in keiner Weise angeben? – blackace