gpt4 book ai didi

java - JComboBox 中每个项目的多种颜色

转载 作者:搜寻专家 更新时间:2023-10-30 21:25:03 24 4
gpt4 key购买 nike

我正在尝试制作一个组合框,它为不同的项目使用不同的颜色。我写了一些测试代码,但它似乎不起作用。添加渲染器会导致程序崩溃,但将其注释掉会使框显示在框架中。

我是否遗漏了什么或者我这样做的方式有误?我尝试使用 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;


}

}

谢谢!

最佳答案

你是这个意思吗?

TestComboColor

import java.awt.Color;
import java.awt.Component;
import javax.swing.*;

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(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, Object value,
int index, boolean isSelected, 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 - JComboBox 中每个项目的多种颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10951449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com