У меня есть список Customer
объектов, которые мне нужно выбрать из JComboBox. Из того, что я прочитал, мне нужно реализовать собственный рендер, чтобы поля, которые я хочу отображать в списке.
Я хочу, чтобы в моем JComboBox записи были отформатированы следующим образом:
+----------------------------------------------+
| Customer Name - Contact - City, State V |
+==============================================+
| Customer #2 Name - Contact - City, State |
| Customer #3 Name - Contact - City, State |
| Customer #4 Name - Contact - City, State |
| Customer #5 Name - Contact - City, State |
+----------------------------------------------+
Я использовал этот код:
открытый класс CustomerListCellRenderer расширяет DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value instanceof Customer) {
Customer c = (Customer) value;
StringBuffer sb = new StringBuffer();
if (c.getCompany() != null && c.getCompany().length() > 0) {
sb.append(c.getCompany());
}
sb.append(" - ");
if (c.getCompany() != null && c.getCompany().length() > 0) {
sb.append(c.getContact());
}
sb.append(" - ");
if (c.getCompany() != null && c.getCompany().length() > 0) {
sb.append(c.getCity());
sb.append(", ");
}
if (c.getCompany() != null && c.getCompany().length() > 0) {
sb.append(c.getState());
}
setText(sb.toString());
}
return this;
}
}
Это не работает правильно в Solaris / Unix / Linux с использованием системы GTKLookAndFeel. Фон области ввода в поле со списком не рисуется, а граница вокруг него не рисуется. (Смотрите скриншот ниже). Есть ли другой способ добиться этого, который будет правильно работать на 3 основных платформах (Win / Mac / GTK)? Могу ли я сделать конвертер для этого и манипулировать только данными, а не GUI?
Мой текущий обходной путь - переопределить toString () в моем объекте Customer, чтобы отображать каждую запись в нужном мне формате, но в поисках других идей.
Ник