Hi Lin,
On 5/26/2011 10:16 PM, ximalaya wrote:
1. Method paint of Canvas(hw component) is not called when its
container JPanel repaints
I have a JFrame. Inside the JFrame, there is a JPanel. And inside
the JPanel there is a Canvas. I found Canvas.paint was never called when
I call JPanel.repaint(). Is it normal? Is it just another case we simply
can't sync up with repainting of lw and hw components?
HW components use native ('heavyweight') windows, and as such they rely
on repaint requests sent by the native system (eg. WM_PAINT on Windows,
or ExposeNotify on X11). I guess that this fact has been taken into
account when implementing the JComponent.repaint() method, and hence
Swing doesn't call <hw>.repaint() manually.
In theory, calling paint()/repaint() for hw components in the
JComponent.paint()/repaint() shouldn't hurt at all. If Swing team agrees
that this is feasible, please file an RFE on this feature against Swing
at http://bugreport.sun.com/bugreport/.
2. Thread safe of Componet.repaint//JComponent.repaint()/
I ever read some articles about JComponet.repaint. It was said that
it was thread safe. But I learn from an article that JComponet.repaint
is no longer thread safe since JDK 6 update 22 -
"/do not call JComponent.repaint() outside the Swing Event Dispatch
Thread" ,
/ You can find the article here,
http://stevensrmiller.com/wordpress/?p=567
I'll let the Swing team members to comment on the above.
Does it apply to Componet.repaint also?
However, just want to mention that Component.repaint() (at least, for hw
components) should not be affected by this since AWT is generally a
multi-threaded GUI library.
--
best regards,
Anthony