<Swing Dev> Painting a JComponent without clipping children

Alexander Potochkin Alexander.Potochkin at oracle.com
Tue Jun 7 14:33:18 UTC 2011


Hello Hervé
> Hello,
>
> I tried this and it works, the problem is that I remember that I had performance problems when I had many children in one of these containers when I moved it "a lot". But it worked ok otherwise. However I use this approach when I embed my app in an Applet to avoid security problems.
>
> It reminds me that maybe I was not very cautious with the way I defined and updated this big container, which could be the reason why I had these performance problems. I will look at my code again ;)

Good luck!

alexp
> Hervé
>
> Sent from my iPad
>
> On 6 juin 2011, at 14:02, Alexander Potochkin<Alexander.Potochkin at oracle.com>  wrote:
>
>> Hello Hervé
>>> Hello,
>>>
>>> Thanks, I will look at this, it looks interesting. In fact, the reason why I want to avoid setting the clip is because I'm using swing to draw gui components in Java according to a standard called ARINC 661 where some of the components are just containers with no size but just an offset position, where the children can even have a negative position relative to their parent container.
>> Did you try to resize you container before painting?
>>
>> I am thinking about having a big main container which contains all your children with negative position
>> so the applied clip wouldn't hurt you
>>
>> If you control the painting hierarchy you can also try overriding paint() method of every child component
>> and reset clip there
>>
>> However may the hack you found is only way to make what you need
>>
>> Thanks
>> alexp
>>
>>> Regards,
>>>
>>> Herve
>>>
>>> Sent from my iPad
>>>
>>> On 3 juin 2011, at 16:13, Alexander Potochkin<Alexander.Potochkin at oracle.com>   wrote:
>>>
>>>> Hello Herve
>>>>
>>>> I don't really get it why you need to avoid setting the clip,
>>>> but anyway the following may be interesting to you
>>>>
>>>> http://www.pbjar.org/blogs/jxlayer/jxlayer40/
>>>>
>>>> Piet is transforming Swing components using JXLayer component
>>>>
>>>> Thanks
>>>> alexp
>>>>> (reposted from awt-dev list, I picked up the wrong list before)
>>>>>
>>>>> Hello,
>>>>>
>>>>> I'm new to this mailing list and I'm not *really* asking how to do it because I know how it's possible to do it by using a hack (mainly getting and setting the BUFFER and TILE parts of the "flags" field for the JComponent by reflection, and "rewriting" the paintChildren method without the clipping part). I'm using it in the http://sourceforge.net/projects/j661/  project to be able to use custom Swing containers which only offset the position or transform their children graphic context, without clipping them (allowing to use negative positions for the children widgets, for example).
>>>>>
>>>>> I'm asking if there is a way to do this without playing with the private "flags" field, because I need to be able to do the same thing in a restricted JNLP environment. I know a "regular"' way to do this, but it would be a little cumbersome (offsetting the positions of all children widgets in the parent container, to be sure that the positions of the children are never negative, for example). But it's not very good for performance when something change in the parent container....
>>>>>
>>>>> There are many projects which either play with this private field, or use transforms, but in this later case they still apply a clipping. Is it possible to play with the Graphics2D clippings for example before using the JComponent paintChildren method - or would this approach work ?  Or would the only way to do it without compromising Security be to have a way to get / set the TILE and BUFFER value of the "flags" field without reflection ?
>>>>>
>>>>> Thanks by advance if you have ideas about this, and sorry if this prose is not crystal clear ;)
>>>>>
>>>>> Regards,
>>>>>
>>>>> Herve
>>>>>




More information about the swing-dev mailing list