2010-06-24 86 views
1

我想創建一個自定義ListCellRenderer,以便在每行中給予不同的前景色,具體取決於jList的輸入。我不是專家或任何東西,但我真的不知道這一點。Java自定義ListCellRenderer投射問題(包括SSCCE)

我得到一個鑄造錯誤:在線程「主要」 java.lang.ClassCastException

異常:java.lang.String中不能轉換到app.CustomObject

感謝您的時間。

這裏是SSCCE:

import java.awt.Color; 
import java.awt.Component; 
import javax.swing.DefaultListCellRenderer; 
import javax.swing.DefaultListModel; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.ListSelectionModel; 

public class MyListCellRenderer extends DefaultListCellRenderer 
{ 

    static Color color; 
    static ListSelectionModel listSelectionModel; 
    static JList jList1; 
    static DefaultListModel listModel = new DefaultListModel(); 
    static JFrame frame; 

    @Override 
    public Component getListCellRendererComponent(JList list, 
      Object value, int index, boolean isSelected, 
      boolean cellHasFocus) 
    { 
     super.getListCellRendererComponent(list, 
       value, 
       index, 
       isSelected, 
       cellHasFocus); 

     if (value != null) 
     { 
      CustomObject o = (CustomObject) value; 
      setText(o.getData()); 
      setForeground(o.getColor()); 
     } 
     return this; 
    } 

    public static void main(String[] args) 
    { 


     jList1 = new javax.swing.JList(); 
     listSelectionModel = jList1.getSelectionModel(); 
     listSelectionModel.addListSelectionListener(
       new app.ListSelectionHandler()); 
     jList1.setCellRenderer(new app.MyListRenderer()); 
     jList1.setModel(listModel); 
     listModel.addElement("Option1"); 

     frame = new JFrame(); 
     frame.add(jList1); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

class CustomObject 
{ 

    String s; 
    Color color; 

    public CustomObject(Color color, String s) 
    { 
     this.s = s; 
     this.color = color; 
    } 

    public Color getColor() 
    { 
     return color; 
    } 

    public String getData() 
    { 
     return s; 
    } 

    @Override 
    public String toString() 
    { 
     return s + color.getRGB(); 
    } 
} 
+0

我不認爲這個代碼是自包含的。 – 2010-06-24 06:59:23

+0

我很確定它是:P – kxk 2010-06-25 17:40:27

回答

1
CustomObject o = (CustomObject) value; 

value這裏似乎是一個普通的String,不是CustomObject"Option1"可能?)。

如果你希望它是一個CustomObject,你可以嘗試這樣的事情在你main

listModel.addElement(new CustomObject(Color.BLUE, "Option1")); 
+0

Argh ....非常感謝你! 這是如此明顯,但不知何故,我couln沒有看到它。 乾杯! – kxk 2010-06-24 02:51:03