[英]Java Custom ListCellRenderer casting problem (SSCCE included)
I am trying to create a custom ListCellRenderer in order to give different foreground colors in each line, depending on the input of the jList. 我试图创建一个自定义ListCellRenderer,以便根据jList的输入在每行中提供不同的前景色。 I am not an expert or anything, but I really can't figure this out.
我不是专家,也不是任何人,但是我真的无法弄清楚。
I get a casting error: 我收到转换错误:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to app.CustomObject 线程“主”中的异常java.lang.ClassCastException:无法将java.lang.String强制转换为app.CustomObject
Thanks for your time. 谢谢你的时间。
Here is the SSCCE: 这是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();
}
}
CustomObject o = (CustomObject) value;
value
here appears to be a plain String
( "Option1"
maybe?), not a CustomObject
. 此处的
value
似乎是纯String
(也许是“ CustomObject
"Option1"
?),而不是CustomObject
。
If you want it to be a CustomObject
, you might try something like this in your main
: 如果您希望它成为一个
CustomObject
,则可以在main
尝试这样的操作:
listModel.addElement(new CustomObject(Color.BLUE, "Option1"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.