Java重绘问题

标签 java swing keylistener paintcomponent rect

下面的代码并不完整。如果你们需要完整的代码,请告诉我。我的问题是,当我启动程序时,我可以看到红色椭圆可以通过箭头移动,后面有 999 个生成的矩形。当我移动椭圆时,框架重绘和矩形在不同的坐标上再次生成。我想在不改变生成的矩形位置的情况下实现移动椭圆。我知道这种不良效果的原因,但无法修复它。谢谢!

    public void paintComponent(Graphics g){
    random=new Random();
    super.paintComponent(g);    

        for(int i=0;i<=1000;i++){
        rX=random.nextInt(400);
        rY=random.nextInt(400);
        g.drawRect(rX,rY,20,20);            
        }


    g.setColor(Color.red);
    g.fillRect(x,y,20,20);

}

public void keyPressed(KeyEvent e) {
    if(e.getKeyCode()==KeyEvent.VK_RIGHT){
        x=x+10;
        repaint();
        if(x>480)
            x=-10;
    }

最佳答案

为矩形创建一个自定义类,以保存其位置并在构造函数中生成随机位置。像这样的东西:

public class Rect {

    private int x;
    private int y;
    private int width;
    private int height;

    public Rect() {
        random=new Random();
        x=random.nextInt(400);
        y=random.nextInt(400);
        width=20;
        height=20;
    }
    //getters and setters
}


private Rect rectangles[1000] = new Rect[]();


public void paintComponent(Graphics g){
    super.paintComponent(g);

    for (int i=0; i<1000;i++) {
        g.drawRect(rectangles[i].getX(), rectangles[i].getY(),
                   rectangles[i].getwidth(), rectangles[i].getHeight());
    }
}

关于Java重绘问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17728169/

相关文章:

java - 如何在Java中制作圆形幻灯片?不是一直按

java - java中的快捷键

Java-使滚动 Pane 的大小更改为表格的大小?

java - 从另一个类运行 GUI

java - Jtable外观: How to write a code with jtable properties that can be use to multiple jtables to have a similar appearance?

Java 文本字段验证

java - 在 Saxon 中使用外部变量

java - 拦截器在spring中的使用

java - 组合两个变量以获得第三个变量的名称?

Java 字体不呈现