背景颜色不适用于JButton

时间:2015-11-29 11:26:04

标签: java swing jcolorchooser

我有一个简单的程序,带有jcolorchooser一些文本字段和一个按钮。 当我按下按钮时,会出现jcolorchooser然后我选择一种颜色。 现在让我说我想采取我选择的背景颜色并将其应用到我的按钮,如下所示:

public class Slide extends JFrame{

    Color bgColor;
    JButton colorButton=new JButton();
    JColorChooser colorPicker=new JColorChooser();
    public Slide(){
        JPanel panel=new JPanel();
        panel.setLayout(new MigLayout("", "[][][][][]", "[][][][][][]"));
        colorButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JColorChooser.showDialog(null, "title", null);
                bgColor=colorPicker.getBackground();
                colorButton.setBackground(bgColor);
            }
        });
        colorButton.setText("Pick a color");
        panel.add(colorButton, "cell 0 5");
        this.setSize(400, 400);
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String args[]){
        new Slide();
    }
}

问题是我的bgcolor不会应用于我的colorButton.Any想法?

1 个答案:

答案 0 :(得分:5)

用户从JColorChooser对话框中选择的颜色将作为showDialog()方法的返回值返回给您。

要使用对话框中的所选颜色更新JButton,您应该将代码更改为:

colorButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        Color color = JColorChooser.showDialog(null, "title", null);

        if (color != null) {
            colorButton.setBackground(color);
        }
    }
});

请注意,如果用户已取消,showDialog()方法将返回 null ,这就是为什么我们需要在分配颜色之前检查它的值。

方法 getBackground()是来自 Component 类的方法,因此前面的代码bgColor=colorPicker.getBackground()只是返回JColorChooser对话框组件的实际颜色