<Swing Dev> Painting a JComponent without clipping children

Alexander Potochkin Alexander.Potochkin at oracle.com
Mon Jun 6 12:02:04 UTC 2011


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