Вот интерфейс утилиты и класс, которые позволяют легко получить поле со списком для использования различных меток. Вместо того, чтобы создавать замену ListCellRenderer
(и рискуете выглядеть неуместно, если внешний вид изменился), он использует значение по умолчанию ListCellRenderer
(что бы это ни было), но заменяет ваши собственные строки как текст метки вместо тех, которые определены toString()
в ваших ценностных объектах.
public interface ToString {
public String toString(Object object);
}
public final class ToStringListCellRenderer implements ListCellRenderer {
private final ListCellRenderer originalRenderer;
private final ToString toString;
public ToStringListCellRenderer(final ListCellRenderer originalRenderer,
final ToString toString) {
this.originalRenderer = originalRenderer;
this.toString = toString;
}
public Component getListCellRendererComponent(final JList list,
final Object value, final int index, final boolean isSelected,
final boolean cellHasFocus) {
return originalRenderer.getListCellRendererComponent(list,
toString.toString(value), index, isSelected, cellHasFocus);
}
}
Как видите, ToStringListCellRenderer
получает пользовательскую строку из реализации ToString
, а затем передает ее исходному ListCellRenderer
вместо передачи самого объекта значения.
Чтобы использовать этот код, сделайте что-то вроде следующего:
// Create your combo box as normal, passing in the array of values.
final JComboBox combo = new JComboBox(values);
final ToString toString = new ToString() {
public String toString(final Object object) {
final YourValue value = (YourValue) object;
// Of course you'd make your own label text below.
return "custom label text " + value.toString();
}
};
combo.setRenderer(new ToStringListCellRenderer(
combo.getRenderer(), toString)));
Наряду с использованием этого для создания пользовательских меток, если вы делаете реализацию ToString
, которая создает строки на основе языкового стандарта системы, вы можете легко интернационализировать поле со списком без необходимости что-либо изменять в ваших объектах значений.