我有一个自定义组合框ListCellRenderer,如下所示。
class ArtikelListRenderer extends JLabel implements ListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Artikel artikels = (Artikel) value;
setText(artikels.getName());
return this;
}
}
我将此渲染添加到组合框,如下所示。
public void setUpArtikelComboBox() {
panel.lstArtikel = readFromArtikel();
panel.cbxArtikel = new WebComboBox(new ComboBoxModelArtikel(panel, lstArtikel));
panel.cbxArtikel.setAction(new ComboBoxArtikelActionListener(panel));
panel.cbxArtikel.setRenderer(new ArtikelListRenderer());
panel.artikelTabPanel.add(panel.cbxArtikel, BorderLayout.NORTH);
}
我为什么得到
Exception in thread "AWT-EventQueue-1" java.lang.ClassCastException: java.lang.String
在ListCellRenderer类的行中:
Artikel artikels = (Artikel) value;
最佳答案
我假设ComboBoxModelArtikel
是您的自定义ComboBoxModel
,它使用一个List
或另一个Collection
。
我还假设打电话时
panel.cbxArtikel = new WebComboBox(new ComboBoxModelArtikel(panel, lstArtikel));
您正确初始化了内部
List
(或代表您模型的其他类)。你有没有
JList.setPrototypeCellValue(Object prototypeCellValue)
在代码中的某个位置,并使用
String
作为参数?使用指定为ListCellRenderer
的任何内容调用您的自定义prototypeCellValue