我有一个自定义组合框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

10-05 19:18