Java中的repaint和paint
1个回答
展开全部
有两点不同:1、repaint有选择的调用update或者paintrepaint() = update或者paint,对于轻量级组件,repaint会调用paint;而对于重量级组件,会调用update。update一般的工作是清屏然后paint。至于为什么repaint度轻量级和重量级的处理有所不同,如果你一定希望知道再追问我。你也可以自己重写update完成自己定制的工作。2、响应方式不一样paint立即响应,而repaint则是发出重绘请求,等待awt线程选择合适的时间进行重绘。这就像,你是一个画家,而你还雇了另外一个画家——awt。有两个方法,完成绘图,第一交给awt线程,但是他什么时候完成绘画完全取决于awt的心情;第二你自己来画,这样更确定,但是你不得不管理许多细节。在非paint方法中,显示的调用任何paint方法,就相当于你自己来画;而repaint就是发出请求交给awt来画。显然我们应该确定究竟谁来画,因为两者交织的画可能带来冲突。比如awt正在绘制的过程中,你的程序乱入,在他绘制一半的图片上涂涂抹抹……。当然java的设计者希望我们把绘制全权交给awt线程来画,而不是自己来画!因为这样最安全和省事。但是我仍然认为在Java游戏编程中还是自己来管理绘制更加灵活。补充:
晕死,你不问我。我都和你说了,paint会马上绘制,repaint是发出请求,awt接到这给请求之后就会等待,直到awt认为合适的时候才进行绘制。另外就是repaint会处理一些重量级组件的绘制,如Frame。但是paint只是重绘轻量级组件。至于你的程序中用repaint会防止绘制过程中的冲突;而如果你直接调用paint,立即绘制也许会造成你和awt线程同时绘制这个组件,造成冲突。你需要理解Java的GUI如何工作的。Java有一个awt线程,负责所有的绘制工作,任何绘制请求都应该交给他(也就是调用repaint),而不是自己调用paint(至少java的设计者是这样要求我们的,为的就是防止冲突)。Java需要每一个组件管理自身的绘制。假设某容器A上有按钮B、C、D。Java绘制一个组件A的过程是这样的,发出绘制请求-awt接到请求-awt开始绘制-组件A绘制自身-如果A组件为容器,则调用add到该容器中的所有组件B、C、D……等等的paint方法绘制这些组件。所以定义paint方法,仅仅是因为它是awt需要的一个接口,是为了满足“组件自身管理自身绘制方法”的要求。追问:
不好意思,只是你说的太专业了,我看不懂,那awt不知道,我只知道,原程序画出的圆是不闪烁的,如果我这个程序把repaint()移在末尾画出的圆就是闪烁的。说简单点吧,不然我不懂。回答:
那应该是你的public void itemStateChanged(ItemEvent e)方法总是被激发吧?你把完整代码贴出来补充:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询