java中repaint(), paint()问题
我在书上看到说当窗口从最大化,最小化状态还原时,或者被其他窗口覆盖,当其他窗口关闭或移开时,系统都会自动重画标准组件的图形图象,而不会自动重画组件上定制的图形,因此需要调...
我在书上看到说当窗口从最大化,最小化状态还原时,或者被其他窗口覆盖,当其他窗口关闭或移开时,系统都会自动重画标准组件的图形图象,而不会自动重画组件上定制的图形,因此需要调用repaint(),这样的话,我很迷惑,绘制标准组件的线程和绘制组件上定制的图形的线程是同一个线程吗?绘制标准组件的方法也是paint(Graphics g)吗?很多程序中需要在组件上绘制图形,要覆盖父类的paint(Graphics g),请问这个paint能绘制标准组件吗?还有一个问题,自定义paint(Grahpics g)方法中经常会在方法中调用super.paint(g),调用父类的paint有什么作用吗?但是有的在paint(Grahpics g)中却没有super.paint(g),请问这个是怎么回事?谢谢大家了
在自定义的绘图中都会覆盖父类的paint(Graphics g)请问绘制标准组件的函数是否也在这个paint()中呢?是否awt线程调用另外的函数来实现标准组件的绘制?swing组件中的JComponent中的paint()包含paintComponent(), paintBorder(),paintChildren()请问这些函数是否绘制标准组件?在程序中调用repaint()之后,是只有自定义的图形重新绘制,还是和标准组件一起重绘? 展开
在自定义的绘图中都会覆盖父类的paint(Graphics g)请问绘制标准组件的函数是否也在这个paint()中呢?是否awt线程调用另外的函数来实现标准组件的绘制?swing组件中的JComponent中的paint()包含paintComponent(), paintBorder(),paintChildren()请问这些函数是否绘制标准组件?在程序中调用repaint()之后,是只有自定义的图形重新绘制,还是和标准组件一起重绘? 展开
2个回答
展开全部
Java中事件的分配调度是由专门的线程完成的。当调用repaint方法时,实际上是发送一个重绘事件到事件队列,而后事件分配线程会调用paint方法来完成重绘。当在多线程时,一切正常,因为你调用repaint方法的线程没有占据全部的CPU时间,所以事件分配线程可以执行,并调用paint完成重绘。
而在单线程情况下,由于你的线程完全占据了CPU,事件分配线程无法执行,自然也就没法去分配你通过调用repaint方法插入的重绘事件。取代的做法就是直接调用paint(),而不是等待事件分配线程去调用。
而在单线程情况下,由于你的线程完全占据了CPU,事件分配线程无法执行,自然也就没法去分配你通过调用repaint方法插入的重绘事件。取代的做法就是直接调用paint(),而不是等待事件分配线程去调用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询