gpt4 book ai didi

java - java repaint() 方法的帮助?

转载 作者:行者123 更新时间:2023-12-01 07:24:08 25 4
gpt4 key购买 nike

我试图制作一个在屏幕上移动的矩形,但它只是重新绘制,而不是删除前面的矩形,使其看起来像屏幕上的一个巨大矩形。任何帮助将不胜感激,这是我的代码:

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.Timer;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.*;

@SuppressWarnings("serial")
public class Test extends JFrame implements ActionListener{
int x=50;
Timer tm = new Timer(30,this);

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

public Test(){
this.setSize(700, 500);
this.setTitle("Drawing Shapes");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
}

public void paint(Graphics g){
Graphics2D graph2 = (Graphics2D)g;

Shape Rect = new Rectangle2D.Float(x, 50, 50, 30);
graph2.setColor(Color.RED);
graph2.fill(Rect);
tm.start();
}

public void actionPerformed(ActionEvent e){
x=10+x;
repaint();
}
}

最佳答案

  • 绘制由 JFrame 保存并显示在其中的 JPanel。不要直接在 JFrame 中绘制,因为这可能会覆盖那些不应该被弄乱的东西,例如根 Pane 、边框、子组件……此外,直接在 JFrame 的绘制中绘制也会失去自动双缓冲的好处导致动画断断续续的方法。
  • 您应该重写 JPanel 的paintComponent 方法而不是它的paint 方法。
  • 始终在您自己的绘画方法中调用 super 的绘画方法(这里再次应该是paintComponent)。 这是你的问题。同样,您的 paintComponent(Graphics g) 重写绘画方法应在其第一行调用 super.paintComponent(g); 。这将删除旧图像。

关于java - java repaint() 方法的帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28402461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com