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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |