java swing里面的repaint()方法怎么用

请看代码importjava.awt.Graphics;importjavax.swing.JComponent;importjavax.swing.JFrame;imp... 请看代码

import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test extends JPanel{
int x,y;

public Test(int x,int y){
this.x = x;
this.y = y;
}

public void paint(Graphics g){

g.fillOval(x-1,y-1,3,3);
x=x++;
y=y++;
System.out.println("x="+x);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
}

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

public static void run(){
JFrame frame = new JFrame("TEST Animation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Create and set up the content pane.
JComponent newContentPane = new Test(10,10);
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);

//Display the window.
frame.setSize(800,600);
frame.setResizable(false);
frame.setVisible(true);
}
}

我当中的打印语句为什么打出来都是x=10啊
怎么才能让x,y递加呢
补充下
运行此程序可以在控制台中看到每隔1000毫秒打印x=10,说明系统正确调用的repaint(),但是每次好像又重新初始化x,y,我知道在applet中有start()函数可以放置变量初始化语句,可以在桌面程序里面怎么搞呢?

再补充下
sb55154634兄,果然行了。
我想要的是始终显示一个点,这个点在移动。现在变成是好像画一条线这样了,也就是说上时刻的画的结果保留,继续画下时刻的点。

怎么样改才能在画第二个点的时候,把前一点的结果擦除呢。

还有怎么样设置结束点。
展开
 我来答
匿名用户
2009-10-16
展开全部
你可以再定义两个成员变量
int oldX;用来保存上一次paint时的x
int oldY;用来保存上一次paint时的y

public void paint(Graphics g){
//擦去原来的点
Color c = g.getColor();
g.setColor(this.getBackGround());
g.fillOval(oldX-1,oldY-1,3,3);
g.setColor(c);
//保存点
oldX = x;
oldY = y;

g.fillOval(x-1,y-1,3,3);
x++;
y++;
System.out.println("x="+x);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sb55154634
2009-10-13 · TA获得超过150个赞
知道小有建树答主
回答量:172
采纳率:100%
帮助的人:159万
展开全部
非常简单 将
x=x++;
y=y++;改成
x++;
y++;就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式