按钮不会显示,并且在创建新按钮时,形状会保持消失

时间:2013-12-06 23:58:40

标签: java swing

谢谢你我终于让按钮正常工作但现在我不得不制作我刚创​​建的形状以保持在屏幕上。每次我点击创建新形状时,我选择另一个我刚创建的形状消失。我看看自定义油漆,但仍然混淆

public class ShapeStamps extends JFrame {

    Random numGen = new Random();
    public int x;
    public int y;
    private JPanel mousePanel, Bpanel;
    private JButton circle, square, rectangle, oval;
    private int choice = 0;

    public ShapeStamps() {

        super("Shape Stamps");
        Bpanel = new JPanel();
        circle = new JButton("Circle");           
        square = new JButton("Square");           
        rectangle = new JButton("Rectangle");
        oval = new JButton("Oval");

        circle.addActionListener(
                new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                choice = 1;
            }
        });
        square.addActionListener(
                new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                choice = 2;
            }
        });
        rectangle.addActionListener(
                new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                choice = 3;
            }
        });
        oval.addActionListener(
                new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                choice = 4;
            }
        });
        mousePanel = new JPanel();
        mousePanel.setBackground(Color.WHITE);
        MouseHandler handler = new MouseHandler();
        setVisible(true);
        addMouseListener(handler);
        addMouseMotionListener(handler);
        add(mousePanel);
        Bpanel.add(circle);
        Bpanel.add(square);
        Bpanel.add(rectangle);
        Bpanel.add(oval);

        add(Bpanel, BorderLayout.SOUTH);

        setSize(500, 500);
        setVisible(true);
    }

    private class MouseHandler extends MouseAdapter implements
            MouseMotionListener {

        public void mousePressed(MouseEvent e) {
            x = e.getX();
            y = e.getY();

            repaint();
        }
    }

    public void paint(Graphics g) {
        super.paintComponents(g);

        setBounds(0, 0, 500, 500);
        Graphics2D g2d = (Graphics2D) g;

        if (choice == 0) {
            g2d.setFont(new Font("Serif", Font.BOLD, 32));
            g2d.drawString("Shape Stamper!", 150, 220);
            g2d.setFont(new Font("Serif", Font.ITALIC, 16));
            g2d.drawString("Programmed by: None", 150, 245);
        }
        if (choice == 1) {

            Color randomColor1 = new Color(numGen.nextInt(256), numGen.nextInt(256), numGen.nextInt(256));
            g2d.setPaint(randomColor1);
            g2d.drawOval(x - 50, y - 50, 100, 100);
        }
        if (choice == 2) {

            Color randomColor2 = new Color(numGen.nextInt(256), numGen.nextInt(256), numGen.nextInt(256));
            g2d.setPaint(randomColor2);

            g2d.drawRect(x - 50, y - 50, 100, 100);
        }
        if (choice == 3) {
            Color randomColor2 = new Color(numGen.nextInt(256), numGen.nextInt(256), numGen.nextInt(256));
            g2d.setPaint(randomColor2);
            g2d.draw(new Rectangle2D.Double(x - 75, y - 50, 150, 100));
        }
        if (choice == 4) {
            Color randomColor2 = new Color(numGen.nextInt(256), numGen.nextInt(256), numGen.nextInt(256));
            g2d.setPaint(randomColor2);
            g2d.draw(new Ellipse2D.Double(x - 50, y - 25, 100, 50));
        }
    }
}

1 个答案:

答案 0 :(得分:0)

每次重新绘制JFrame时,它都会经历绘图过程,当你在屏幕上标记某些内容时,你必须拥有一个数据结构来保存标记的“对象”。这样,每次调用绘图过程时,它都会在正确的位置重新绘制对象(也许颜色随你决定改变它)