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 |
+----------------------------------------------+
私はこのコードを使用しました:
public class CustomerListCellRenderer extends 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() をオーバーライドして、各レコードを必要な形式で表示することですが、他のアイデアを探しています。
ニック