Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JList,其中每行可能需要有不同的字体颜色_Java_Swing_Colors_Jlist - Fatal编程技术网

Java JList,其中每行可能需要有不同的字体颜色

Java JList,其中每行可能需要有不同的字体颜色,java,swing,colors,jlist,Java,Swing,Colors,Jlist,我是这里的新手,刚刚加入这个奇妙的社区。我必须承认这是最好的编程问答网站。现在让我谈谈重点: 我正在尝试创建一个JList,在这里我可以输入从ColorChooser获取的具有不同字体颜色的行。我已经尝试了下面描述的东西 提前感谢您的回答。 顺致敬意, dwc 以下是我的示例代码: class CustomObject { String s; Color color; String scolor; public CustomObject(Color color,

我是这里的新手,刚刚加入这个奇妙的社区。我必须承认这是最好的编程问答网站。现在让我谈谈重点:

我正在尝试创建一个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;

如果希望每一行具有不同的背景色,则需要将该信息存储在模型中。因此,不只是在模型中存储字符串,而是存储一个包含颜色和文本两个属性的自定义对象。然后,自定义渲染器使用颜色设置线条的背景,使用文本设置线条的值

这显示了使用此方法的示例。该示例针对组合框,但概念相同

编辑:我相信这就是最初的例子:

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:我已经检查了这个解决方案,我只是不确定如何在每种情况下手动提供我想要使用的颜色,不像那个例子。这不是SSCCE。我如何编译它?在哪里构建CustomObject并将其添加到模型中?你没有看到我在下面的链接中提供给你的SSCCE吗?另外,为什么getColor方法返回字符串,setForeground()方法需要一个Color对象。既然你传入了一个颜色对象,为什么要把它来回转换成字符串/颜色?是的,这只是代码片段,我没有时间阅读你给我的SSCCE页面,所以我只是粘贴了代码。既然问题源自这里,这难道还不够吗?是的,getColor方法需要修改,但它与问题无关。不可编译的行是:CustomObject o=(CustomObject)值;我没有时间创建一个测试程序。根据定义,在问题解决之前,您不知道代码的哪一部分导致了问题,因此您不知道与解决问题相关或不相关的代码是什么。问题显然是您添加到模型中的数据(您认为您添加了CustomObject,但代码告诉您添加了字符串),而您没有发布该代码。祝你好运,我试着帮忙,但我没有时间回答20个问题,这就是为什么我要参加SSCCE!camickr您能告诉我自定义渲染器是如何工作的吗?我知道我要求的太多了,但正如我所说的,我对Java有点陌生,在编写自定义代码方面没有太多经验……您可以在这里看到一个链接,指向一个示例渲染器,该渲染器可以改变线条的颜色。所以代码没有太大的不同。将值强制转换为“自定义对象”。然后使用自定义对象的颜色设置背景。然后使用自定义对象的文本设置标签的文本。如果您需要更多帮助,请发布您的SSCCE()。还请注意,您应该扩展默认呈现程序,而不是JLabel;出于某种奇怪的原因,我得到了一个异常:java.lang.ClassCastException:java.lang.String不能强制转换为app.CustomObjectWell您不能向ListModel添加字符串。您需要将CustomObject添加到模型中。我给了你一个有效的例子。我不是一个读心术的人,我猜不出你在做什么,你也没有发布SSCCE,所以我不能提供更多的帮助。好吧,好吧,你是对的,那么让我发布我的SSCCE,我是把它放在评论里还是编辑我的第一篇帖子?