java – JComboBox中每个项目的多个颜色
发布时间:2020-12-14 05:26:45 所属栏目:Java 来源:网络整理
导读:我试图使一个ComboBox使用不同的颜色不同的项目.我写了一些测试代码,但似乎不起作用.在渲染器中添加会导致程序崩溃,但将其注释使框中显示框. 有没有什么我失踪或我这样做错了?我试过使用custom ComboBox Renderer教程作为例子. 这是我的代码: TestComboCol
|
我试图使一个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;
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
