repaint()函数是什么意思?挺简单的,但还是有些疑问。100分

Sanco 2004-09-23 08:35:38
我的问题在代码中已经标出来的(1)和(2),该类可以被调用用来在一个框架中用方向键画线。
(1):想问repaint()函数是什么意思?
(2):这里的循环是不是每次按动方向键时,都会从0到lines.size()-1画一遍呢?
class SketchPanel extends JPanel
{
public SketchPanel()
{
last = new Point2D.Double(0, 100);
lines = new ArrayList();
KeyHandler listener = new KeyHandler();
addKeyListener(listener);
setFocusable(true);
}

/**
Add a new line segment to the sketch.
@param dx the movement in x direction
@param dy the movement in y direction
*/
public void add(int dx, int dy)
{
// compute new end point
Point2D end = new Point2D.Double(last.getX() + dx,
last.getY() + dy);

// add line segment
Line2D line = new Line2D.Double(last, end);
lines.add(line);
repaint(); ???????????????(1)

// remember new end point
last = end;
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;

// draw all lines
for (int i = 0; i < lines.size(); i++)
g2.draw((Line2D)lines.get(i)); ???????????(2)
}
private Point2D last;
private ArrayList lines;

private static final int SMALL_INCREMENT = 1;
private static final int LARGE_INCREMENT = 5;

private class KeyHandler implements KeyListener
{
public void keyPressed(KeyEvent event)
{
int keyCode = event.getKeyCode();

// set distance
int d;
if (event.isShiftDown())
d = LARGE_INCREMENT;
else
d = SMALL_INCREMENT;

// add line segment
if (keyCode == KeyEvent.VK_LEFT) add(-d, 0);
else if (keyCode == KeyEvent.VK_RIGHT) add(d, 0);
else if (keyCode == KeyEvent.VK_UP) add(0, -d);
else if (keyCode == KeyEvent.VK_DOWN) add(0, d);
}

public void keyReleased(KeyEvent event) {}
public void keyTyped(KeyEvent event) {}
}

...全文
515 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxm47 2005-02-20
  • 打赏
  • 举报
回复
感谢楼主~~~
yufanzx 2004-09-23
  • 打赏
  • 举报
回复
说简单点...repaint()就是重新调用一次paint()...你在paint()里做了些什么...repaint()时就会重新做一次...
linliangyi 2004-09-23
  • 打赏
  • 举报
回复
这段程序代码含义如下:

1。程序使用add方法向一个动态数组中添加Line2D的实例

2。在动态数组中每添加一个线条就调用repaint(),该方法将通知JVM回调JPanel控件中的paintComponent()方法,从而达到重新绘制动态数组中所有Line2D对象的目的。

记得结贴送分哦:)
ecaol 2004-09-23
  • 打赏
  • 举报
回复
up
Sanco 2004-09-23
  • 打赏
  • 举报
回复
因为是初学者,所以有很多概念不清楚。以前是用C语言的,所以面向对象思想有点难。呵呵,是不是自己笨。
Sanco 2004-09-23
  • 打赏
  • 举报
回复
有点长,不好意思,望见量。。。。。。还有在这里paintComponent()方法是什么时候被调用,是每次按动方向键的时候吗?
j2nix 2004-09-23
  • 打赏
  • 举报
回复
就是重画嘛。
linliangyi 2004-09-23
  • 打赏
  • 举报
回复
可以这么认为,但是实际上paint()是针对AWT控件的绘制,paintComponent()则在swing中调用,当你使用repaint的时候,JVM实际上从底层向上作了很多的处理,其中的处理之一就是调用你写的class中的paintComponent()
Sanco 2004-09-23
  • 打赏
  • 举报
回复
楼上所说的paint()方法是否就是,类里面的paintComponent()方法呢?
wandou999 2004-09-23
  • 打赏
  • 举报
回复
我们调用REPAINT()方法时,程序自动调用UPDATE()方法,清除PAINT()方法以前所画的内容,然后
在调用PAINT()方法
scottwhb 2004-09-23
  • 打赏
  • 举报
回复
每添加一个线条就调用repaint(),该方法将通知JVM回调JPanel控件中的paintComponent()方法

62,633

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧