java编程:为什么repaint()没有调用update呢?

【功能】绘制一个横着动的小球【问题】如题!小球动不起来【代码】importjava.awt.Color;importjava.awt.Graphics;importjav... 【功能】绘制一个横着动的小球
【问题】如题!小球动不起来
【代码】

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.*;

/*
* Panel to display the picture.
*/
class MyPanel extends JPanel{
public int x=50;
public int y=50;

Color ballColor;

Runnable mbr;
Thread mbt;

MyPanel(){
this.setVisible(true);
mbr=new MoveBall();
mbt=new Thread(mbr);
mbt.start();
}

public void update(Graphics g){
g.setColor(Color.ORANGE);
g.fillRect(0, 0, 600, 500);
x+=50;
System.out.println("------>the x is :"+x);
}

public void paint(Graphics g){
ballColor=Color.BLUE;
g.setColor(ballColor);
g.fillOval(x, y, 50, 50);
}

private class MoveBall implements Runnable{
public void run(){
try{
while(x<400){
System.out.println("@@@@@@@@@@--->"+x);
repaint();
mbt.sleep(1000);
}
}catch(Exception e){
System.out.println("Error:Thread----Sleep!");
}
}
}
}

/*
* Frame to display the application.
*/
class MyFrame extends JFrame{
JPanel myPanel;
MyFrame(){
this.setTitle("Graphics Test");
this.setBounds(20,10,600,500);
this.setVisible(true);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

myPanel=new MyPanel();
this.add(myPanel);
}
}

public class MyTest {
public static void main(String[] args){
MyFrame myFrame=new MyFrame();
}
}
---------------------------------------------------------------------------------------
希望各位大鸟说的详细些,非常感谢!
展开
 我来答
匿名用户
2012-06-14
展开全部
自己在paint();中写个update(g);
还有点小建议:楼主貌似还有个不好的习惯。。。使用画笔时不先临时保存画笔原来的颜色。。。
建议在用画笔前先 Color tmp = g.getColor(); 用完后g.setColor(tmp);
楼主用的是轻量级的组件JFrame
API中的原话:
repaint
public void repaint(int x,
int y,
int width,
int height)重绘组件的指定矩形区域。
如果此组件是轻量组件,则此方法会尽快调用此组件的 paint 方法。否则此方法会尽快调用此组件的 update 方法。
漫雨烟华
推荐于2018-04-24
知道答主
回答量:50
采纳率:0%
帮助的人:11万
展开全部

我刚刚也遇到了这个问题,我的解决方法是重写repaint()方法;

对于repaint方法,API中写的是”如果此组件是轻量级组件,则此方法会尽快调用此组件的 paint 方法。否则此方法会尽快调用此组件的
update 方法。“我不知道我的程序属不属于轻量级组件,但是肯定repaint没调用update.所以我只好重写:

public void repaint() {

super.repaint();

update(getGraphics());

}

更改之后就可以了,我是在双缓冲问题上遇到的。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
s1m0n17
2012-06-14 · TA获得超过134个赞
知道答主
回答量:144
采纳率:0%
帮助的人:112万
展开全部
repaint()需要你自己写覆盖父类的这个方法,你有没指定它调update它怎么会自动去调
追问
不是说:调用repaint()时,它会自动调用update()然后在调用paint()吗?repaint()走的不是这个流程吗?
追答
重画的话paint里好像要用super.paint(g)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zh64248798zr
2012-06-15
知道答主
回答量:71
采纳率:0%
帮助的人:15.9万
展开全部
完全同意。这涉及到了继承
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fa3a1a00
2021-05-13 · 超过17用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:10.2万
展开全部
你把class MyPanel extends JPanel{中的JPanel换成Frame
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式