paintComponent里面的函数

时间:2015-06-28 07:42:24

标签: java paintcomponent

我是一个非常初学者所以我认为我犯了愚蠢的错误,但我有:

{{1}}

我希望代码在随机位置生成矩形,每个循环都有一些延迟。 Java写道“void是变量paintComponent的无效类型”。我不相信这一点,因为如果我把paintComponent放在Draw函数之外它可以工作(但不是因为我不会让他工作)。 paintComponent不能在其他函数内部或有其他错误吗?

1 个答案:

答案 0 :(得分:1)

以下是您想要的示例:

您不应该在其他方法中定义方法,例如构造函数。如果只需要创建间隔,也不要使用线程。请改用javax.swing.Timer

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Draw extends JPanel {

    private static final int FRAME_HEIGHT = 400;

    private static final int FRAME_WIDTH = 400;

    private static final int RECT_WIDTH = 40;

    private static final int RECT_HEIGHT = 25;


    private static final long serialVersionUID = 1L;

    public Draw()
    {
        this.setBackground(Color.WHITE);
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        //
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLUE);

        Random r = new Random();
        int rx = r.nextInt(FRAME_WIDTH-RECT_WIDTH);
        int ry = r.nextInt(FRAME_HEIGHT-RECT_HEIGHT);
        g.fillRect(rx, ry, RECT_WIDTH, RECT_HEIGHT);
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("Title");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final Draw d = new Draw();
        f.add(d);
        f.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        f.setVisible(true);

        Timer t = new Timer(1000, new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                d.repaint();
            }
        });
        t.start();
    }
}

祝你好运。