java – JComboBox中每个项目的多个颜色

前端之家收集整理的这篇文章主要介绍了java – JComboBox中每个项目的多个颜色前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使一个ComboBox使用不同的颜色不同的项目.我写了一些测试代码,但似乎不起作用.在渲染器中添加会导致程序崩溃,但将其注释使框中显示框.

有没有什么我失踪或我这样做错了?我试过使用custom ComboBox Renderer教程作为例子.

这是我的代码

TestComboColor.java

import java.awt.Color;

import javax.swing.JComboBox;
import javax.swing.JFrame;


public class TestComboColor {

    static Color[] colors = {Color.BLUE,Color.GRAY,Color.RED};
    static String[] strings = {"Test1","Test2","Test3"};

    public static void main(String[] args)
    {
        JFrame frame = new JFrame("JAVA");
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        JComboBox cmb = new JComboBox();
        ComboBoxRenderer renderer = new ComboBoxRenderer(cmb);

        renderer.setColors(colors);
        renderer.setStrings(strings);

        cmb.setRenderer(renderer);

        frame.add(cmb);
        frame.pack();
        frame.setVisible(true);
    }
}

ComboBoxRenderer.java

import java.awt.Color;
import java.awt.Component;

import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;


public final class ComboBoxRenderer extends JPanel implements ListCellRenderer
{

    private static final long serialVersionUID = -1L;
    private Color[] colors;
    private String[] strings;

    JPanel textPanel;
    JLabel text;

    public ComboBoxRenderer(JComboBox combo) {

        textPanel = new JPanel();
        textPanel.add(this);
        text = new JLabel();
        text.setOpaque(true);
        text.setFont(combo.getFont());
        textPanel.add(text);
    }

    public void setColors(Color[] col)
    {
        colors = col;
    }

    public void setStrings(String[] str)
    {
        strings = str;
    }

    public Color[] getColors()
    {
        return colors;
    }

    public String[] getStrings()
    {
        return strings;
    }

    @Override
    public Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean cellHasFocus) {

        if (isSelected)
        {
            setBackground(list.getSelectionBackground());
        }
        else
        {
        }

        if (colors.length != strings.length)
        {
            System.out.println("colors.length does not equal strings.length");
            return this;
        }
        else if (colors == null)
        {
            System.out.println("use setColors first.");
            return this;
        }
        else if (strings == null)
        {
            System.out.println("use setStrings first.");
            return this;
        }

        text.setText(strings[index]);
        text.setForeground(colors[index]);
        text.setBackground(getBackground());
        return text;


    }

}

谢谢!

解决方法

你是这个意思吗?
import java.awt.Color;
import java.awt.Component;
import javax.swing.*;

public class TestComboColor {

    static Color[] colors = {Color.BLUE,"Test3"};

    public static void main(String[] args)
    {
        JFrame frame = new JFrame("JAVA");
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        JComboBox cmb = new JComboBox(strings);
        ComboBoxRenderer renderer = new ComboBoxRenderer(cmb);

        renderer.setColors(colors);
        renderer.setStrings(strings);

        cmb.setRenderer(renderer);

        frame.add(cmb);
        frame.pack();
        frame.setVisible(true);
    }
}

class ComboBoxRenderer extends JPanel implements ListCellRenderer
{

    private static final long serialVersionUID = -1L;
    private Color[] colors;
    private String[] strings;

    JPanel textPanel;
    JLabel text;

    public ComboBoxRenderer(JComboBox combo) {

        textPanel = new JPanel();
        textPanel.add(this);
        text = new JLabel();
        text.setOpaque(true);
        text.setFont(combo.getFont());
        textPanel.add(text);
    }

    public void setColors(Color[] col)
    {
        colors = col;
    }

    public void setStrings(String[] str)
    {
        strings = str;
    }

    public Color[] getColors()
    {
        return colors;
    }

    public String[] getStrings()
    {
        return strings;
    }

    @Override
    public Component getListCellRendererComponent(JList list,boolean cellHasFocus) {

        if (isSelected)
        {
            setBackground(list.getSelectionBackground());
        }
        else
        {
            setBackground(Color.WHITE);
        }

        if (colors.length != strings.length)
        {
            System.out.println("colors.length does not equal strings.length");
            return this;
        }
        else if (colors == null)
        {
            System.out.println("use setColors first.");
            return this;
        }
        else if (strings == null)
        {
            System.out.println("use setStrings first.");
            return this;
        }

        text.setBackground(getBackground());

        text.setText(value.toString());
        if (index>-1) {
            text.setForeground(colors[index]);
        }
        return text;
    }
}

猜你在找的Java相关文章