2010-06-24 2 views
1

jList의 입력에 따라 각 행에 서로 다른 전경색을 제공하기 위해 맞춤 ListCellRenderer를 만들려고합니다. 나는 전문가가 아니지만, 나는 이것을 정말로 이해할 수 없다. 스레드 "주요"java.lang.ClassCastException가에서Java Custom ListCellRenderer 캐스팅 문제 (SSCCE 포함)

예외 :

나는 캐스팅 오류가 java.lang.String의 당신의 시간을 app.CustomObject

감사를 캐스팅 할 수 없습니다.

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

를이 코드는 독립적 인 생각하지 않습니다. –

+0

나는 그것이 꽤다는 것을 확신한다 : P – kxk

답변

1
CustomObject o = (CustomObject) value; 

value는 일반 String 것으로 보인다 아닌 CustomObject (어쩌면 "Option1"을?) : 여기

는 SSCCE입니다. 당신이이 CustomObject 싶은 경우

, 당신은 당신의 main이 뭔가를 시도 할 수 있습니다 :

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

아 ... 남자는 대단히 감사합니다! 그것은 매우 명백했습니다. 그러나 어쨌든 나는 그것을 보지 않을 것입니다. 건배! – kxk