我刚刚加入这个精彩的社区,我是新手。我不得不承认这是编程问题和答案的最佳网站。现在让我谈谈这个问题:
我正在尝试创建一个JList,我可以输入从ColorChooser获取的不同字体颜色的行。我已尝试过如下所述的内容
提前感谢您的任何答案。 最好的祝福, DWC
以下是我的示例代码:
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;
}
}
我的主要问题是我收到错误:
java.lang.ClassCastException: java.lang.String cannot be cast to app.CustomObject
在该行:
CustomObject o = (CustomObject)value;
答案 0 :(得分:3)
如果您希望每条线具有不同的背景颜色,则需要将该信息存储在模型中。因此,不是简单地在模型中存储String,而是存储包含两个属性(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;
}
}
}