矩形颜色选择器程序

时间:2015-07-03 08:05:34

标签: java swing jbutton jcolorchooser

我在这里遇到两个问题。我正在制作一个简单的程序进行测试,基本上当你单击按钮JColorChooser时会弹出,你可以选择你想要矩形的颜色。第二个问题是我无法将按钮放在BorderLayout.SOUTHBorderLayout.NORTH或任何地方。这些是我的代码

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GUI extends JPanel {
    private Color a = (Color.WHITE);
    private Color b = (Color.WHITE);
    private final JPanel panel;
    private final JButton ab;
    private final JButton bb;
    private int x = 1;
    private int y = 1;

    public GUI() {
        panel = new JPanel();
        panel.setBackground(Color.WHITE);

        ab = new JButton("Choose your first Rectangle color");
        ab.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                a = JColorChooser.showDialog(null, "Pick a Color", a);
                x = 2;
            }
        });
        bb = new JButton("Choose your second Rectangle color");
        bb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                b = JColorChooser.showDialog(null, "Pick a Color", b);
                y = 2;
            }
        });
        add(ab, BorderLayout.NORTH);
        add(panel, BorderLayout.CENTER);
        add(bb, BorderLayout.SOUTH);

    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        this.setBackground(Color.WHITE);
        if (x == 2)
            g.setColor(a);
        g.fillRect(50, 50, 100, 20);
        if (y == 2)
            g.setColor(b);
        g.fillRect(50, 200, 100, 20);
    }
}

1 个答案:

答案 0 :(得分:2)

  

第二个问题是我无法将我的按钮放在BorderLayout.SOUTHBorderLayout.NORTH或任何地方。

JPanel默认使用FlowLayout,在添加任何组件之前尝试添加setLayout(new BorderLayout())

setLayout(new BorderLayout());
add(ab, BorderLayout.NORTH);
add(panel, BorderLayout.CENTER);
add(bb, BorderLayout.SOUTH);
  

我正在制作一个简单的程序进行测试,基本上当你点击按钮时会弹出jcolorchooser,你可以选择你希望你的矩形是什么颜色

好的,我在猜测,一旦你选择了一种颜色,它就不会改变矩形颜色。

只需在更改颜色后添加对repaint的调用

ab.addActionListener(
    new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            a = JColorChooser.showDialog(null, "Pick a Color", a);
            x = 2;
            repaint();
        }
    }
);
bb = new JButton("Choose your second Rectangle color");
bb.addActionListener(
    new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            b = JColorChooser.showDialog(null, "Pick a Color", b);
            y = 2;
            repaint();
        }
    }
);