我有一个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;
}
}
这在使用系统 GTKLookAndFeel 的 Solaris / Unix / Linux 下无法正常工作。组合框的输入区域的背景没有被绘制,也没有在其周围绘制边框。(见下面的截图)。是否有另一种方法可以在 3 个主要平台(Win/Mac/GTK)上正常工作?我可以做一个转换器来做到这一点并且只操作数据而不是 GUI?
我目前的解决方法是覆盖我的 Customer 对象上的 toString() 以我想要的格式显示每条记录,但寻找其他想法。
缺口