: 라인에
java.lang.ClassCastException: java.lang.String cannot be cast to app.CustomObject
:
class CustomObject
{
String s;
Color color;
String scolor;
public CustomObject(Color color, String s)
{
this.s = s;
this.color = color;
}
public String getColor()
{
return scolor = Integer.toString(color.getRGB());
}
public String getData()
{
return s;
}
@Override
public String toString()
{
return s + color.getRGB();
}
}
class myListRenderer extends DefaultListCellRenderer
{
Color color;
@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());
color = new Color(Integer.parseInt(o.getColor()));
setForeground(color);
}
return this;
}
}
내 주요 문제는 내가 오류를 얻을 수 있습니다 : 안부, 여기
DWC 내 샘플 코드
각 줄의 배경색을 다르게하려면 th 모델의 정보. 따라서 단순히 모델에 문자열을 저장하는 대신 Color 및 Text의 두 가지 속성이 포함 된 사용자 정의 Object를 저장합니다. 그런 다음 사용자 정의 렌더러는 색상을 사용하여 선의 배경을 설정하고 텍스트를 사용하여 선의 값을 설정합니다.
이 posting은이 접근법을 사용한 예를 보여줍니다. 이 예제는 콤보 상자에 대한 개념이지만 개념은 동일합니다.
편집 :이 원래 예를했다 믿습니다
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.plaf.basic.*;
public class ComboBoxColor extends JFrame
{
public ComboBoxColor()
{
Object[] items = { Color.red, Color.green, Color.blue };
JComboBox comboBox = new JComboBox(items);
comboBox.setRenderer(new ColorRenderer(comboBox));
getContentPane().add(comboBox, BorderLayout.NORTH);
add(new JTextField(), BorderLayout.SOUTH);
}
public static void main(String[] args)
{
ComboBoxColor frame = new ComboBoxColor();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
class ColorRenderer extends BasicComboBoxRenderer
{
JComboBox comboBox;
Border border;
public ColorRenderer(JComboBox comboBox)
{
this.comboBox = comboBox;
border = new LineBorder(Color.WHITE);
}
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
setText(value.toString());
if (!isSelected)
setBackground((Color)value);
return this;
}
}
}
수 DUP : http://stackoverflow.com/questions/1076473/how-to-generate-a-jlist-with-alternating-colors – Xorty
그 해결책을 확인했는데, 나는이 예제와 달리 각각의 경우에 실제로 사용하고 싶은 색상을 실제로 수동으로주는 방법을 모르겠습니다. – kxk
SSCCE가 아닙니다. 어떻게 컴파일합니까? CustomObject를 빌드하고 모델에 추가하는 위치는 어디입니까? 아래 링크에서 SSCCE를 보지 못하셨습니까? 또한 getColor 메소드가 String을 반환하는 이유는 setForeground() 메소드가 Color 객체를 기대하기 때문입니다. Color 객체를 전달할 때 왜 String/Color로 앞뒤로 변환합니까? – camickr