使用JComboBox Java Swing选择颜色

时间:2013-09-16 14:08:49

标签: java swing colors jcombobox

我有一个JComboBox,我想让用户选择颜色。 JComboBox只显示颜色,没有任何文字。我想出了这个解决方案。请告诉我这是好还是应该避免以及为什么。我是Swing和Java的新手,所以请耐心等待:)

public class ToolBar{
    private MainFrame mainFrame;

    public ToolBar (MainFrame mainFrame) {
        this.mainFrame = mainFrame;
    }

    public JPanel getToolBar(){

        JPanel toolbarPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,2,2));
        toolbarPanel.setPreferredSize(new Dimension(mainFrame.getScreenWidth(),60));
        toolbarPanel.setBorder(BorderFactory.createLineBorder(Color.gray));

        JButton fillButton = new JButton("Fill: ");
        fillButton.setPreferredSize(new Dimension(60,20));
        //fillButton.setBackground(Color.red);
        toolbarPanel.add(fillButton);

        String[] test = {" ", " " , " " , " " , " " , " "};
        JComboBox colorBox = new JComboBox(test);
        colorBox.setMaximumRowCount(5);
        colorBox.setPreferredSize(new Dimension(50,20));
        colorBox.setRenderer(new MyCellRenderer());
        toolbarPanel.add(colorBox);

        return toolbarPanel;
    }
    class MyCellRenderer extends JLabel implements ListCellRenderer {  
         public MyCellRenderer() {  
             setOpaque(true);  
         }  
         public Component getListCellRendererComponent(  
             JList list,  
             Object value,  
             int index,  
             boolean isSelected,  
             boolean cellHasFocus)  
         {  
             setText(value.toString()); 
             switch (index) {
                case 0:  setBackground(Color.white);
                break;
                case 1:  setBackground(Color.red);
                break;
                case 2:  setBackground(Color.blue);
                break;
                case 3:  setBackground(Color.yellow);
                break;
                case 4:  setBackground(Color.green);
                break;
                case 5:  setBackground(Color.gray);
                break;
             }
             return this;  
         }  
    }
}

这没关系。它在JComboBox中显示不同颜色的空选择元素。问题是当用户选择颜色时,JComboBox中的选择颜色不会改变。我应该添加哪些代码行,以及当用户从JComboBox字段中显示颜色的列表中选择颜色时?

我尝试了一些解决方案,但结果是当用户在JComboBox中选择颜色选择时总是变为灰色......

我已经查看了几个类似的问题,但我无法弄清楚在选择完成后哪部分代码正在处理JComboBox的颜色变化......

3 个答案:

答案 0 :(得分:3)

试试这个,应该有效。你必须覆盖setBackground ...因为,内部机制使用当前外观和感觉的默认颜色:

Color[] colors={Color.white,Color.red,Color.blue,Color.green};
JComboBox colorBox = new JComboBox(colors);
colorBox.setMaximumRowCount(5);
colorBox.setPreferredSize(new Dimension(50,20));
colorBox.setRenderer(new MyCellRenderer());

和ListCellRender:

class MyCellRenderer extends JButton implements ListCellRenderer {  
     public MyCellRenderer() {  
         setOpaque(true); 

     }
     boolean b=false;
    @Override
    public void setBackground(Color bg) {
        // TODO Auto-generated method stub
         if(!b)
         {
             return;
         }

        super.setBackground(bg);
    }
     public Component getListCellRendererComponent(  
         JList list,  
         Object value,  
         int index,  

         boolean isSelected,  
         boolean cellHasFocus)  
     {  

         b=true;
         setText(" ");           
         setBackground((Color)value);        
         b=false;
         return this;  
     }  
}

答案 1 :(得分:2)

ComboBox使用equals,所有字符串都相等。 定义颜色名称

String[] test = {"red", "green" , "blue" ...};

但在渲染器中调用setText(" ");

答案 2 :(得分:0)

为index == -1添加一个案例,并将单元格渲染器的背景颜色设置为最近的用户选择。