首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使repaint()工作

无法使repaint()工作
EN

Stack Overflow用户
提问于 2012-08-28 06:47:26
回答 2查看 129关注 0票数 2

我的类看起来像这样。

代码语言:javascript
复制
import java.awt.*;
import javax.swing.*;

public class Painter extends JPanel {
    int x=200;
    int y=200;
    int newX;
    int newY;

    Painter(){
           setPreferredSize(new Dimension(400,400));
    }

    public void moveSquare(int newX, int newY){
           if(newY != y|| newX != x){
                repaint(x,y, 10, 10);
                y = newY;
                x = newX;
                repaint(x,y, 10, 10);
           }        
    }

    public void paintComponent(Graphics g){
           super.paintComponent(g);
           g.setColor(Color.BLACK);
           g.fillRect(x, y, 10, 10);
    }
}

这些方法是从另一个类调用的。xy的值确实会按其应有的方式进行更改。但是,正方形不会移动。我是不是做错了什么?

编辑是的,我在叫“超级”。我只是在这里复制和编辑代码时不小心把它删除了。现在把它重新编辑回来。

EN

回答 2

Stack Overflow用户

发布于 2012-08-28 06:49:35

您需要调用super.paintComponent(g)而不是paintComponent(g)

在……里面

代码语言:javascript
复制
public void paintComponent(Graphics g) 

否则你会无限期地循环。

票数 4
EN

Stack Overflow用户

发布于 2012-08-28 07:41:40

调用repaint(x, y, w, h)只会将选择区域设置为脏区域;调用Graphics会在此边界周围设置一个剪辑,因此您只会看到在那里发生的更改。使用不带任何参数的repaint()会将整个区域标记为脏:-)

根据Oracle在AWT paint (找到here)上的一篇文章,

当AWT调用此方法时,Graphics对象参数已预先配置了用于在此特定组件上绘制的适当状态:

图形对象的颜色设置为组件的颜色property.

  • The图形对象的字体设置为组件的颜色property.

  • The图形对象的平移设置为(0,0)表示component.

  • The foreground对象的左上角的裁剪矩形设置为需要重新绘制的组件区域。

要测试这一点,请尝试打印g.getClip :-)

我给你个提示。

java.awt.Rectanglex=0,主板,y=0,主板,width=10,主板,height=10 java.awt.Rectanglex=0,主板,y=0,主板,width=10,主板,height=10 java.awt.Rectanglex=0,主板,y=0,主板,width=10,主板,height=10

这是一个固定的moveSquare

代码语言:javascript
复制
public void moveSquare(int newX, int newY){
  if (newY != y|| newX != x) {
    y = newY;
    x = newX;
    repaint();
  }        
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12150637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档