Scaling of JTextField

From: Alex Molochnikov (NOBODY_at_NOSPAM.COM)
Date: 08/23/04


Date: Sun, 22 Aug 2004 23:04:44 GMT

I am working on a zooming feature that should allow scaling the content of a
JFrame. Some of the frame's components are instances of JTextComponent, such
as JTextField. The zooming is done by scaling the Graphics2D object in
paint() method of a subclass of JPanel (ScalablePane class in the attached
test case).

Components that do not support text editing (like JLabel or JButton) come
out scaled (enlarged to 200% of the original size), as expected according to
the test case. However, JTextComponents show both the scaled and the
original (unscaled) image, such that a single JTextField is shown as the
"normal" field at the unscaled (x, y) location, and again as a double-sized
field at the location (x*2, y*2).

Worse yet, if I want to edit the content of JTextField, the editable area
that gets the focus, is still at the unscaled location. It looks like the
text editing machinery of Swing operates independently of the painting
mechanism (Graphics2D), and does not get scaled along with the rest of the
frame's content.

I searched the forums, tutorials etc., but found nothing of help.

Any clues will be highly appreciated.

TIA

Alex Molochnikov
Gestalt Corporation

begin 666 Controller.java
M:6UP;W)T(&IA=F$N87=T+BH[#0II;7!O<G0@:F%V87@N<W=I;F<N*CL-"FEM
M<&]R="!J879A+F%W="YG96]M+BH[#0H-"G!U8FQI8R!C;&%S<R!#;VYT<F]L
M;&5R#0I[#0H)<')I=F%T92!*1G)A;64@9G)A;64[#0H)<')I=F%T92!#;VYT
M86EN97(@8V]N=&5N=%!A;F4[#0H)<')I=F%T92!&;VYT('!L86EN1F]N=#L-
M"@T*"7!U8FQI8R!S=&%T:6,@=F]I9"!M86EN*%-T<FEN9UM=(&%R9W8I#0H)
M>PT*"0ET<GD@>R!524UA;F%G97(N<V5T3&]O:T%N9$9E96PH54E-86YA9V5R
M+F=E=%-Y<W1E;4QO;VM!;F1&965L0VQA<W-.86UE*"DI.R!]#0H)"6-A=&-H
M("A%>&-E<'1I;VX@97AC*2![(%-Y<W1E;2YO=70N<')I;G1L;B@B17)R;W(@
M;&]A9&EN9R!,)D8Z("(@*R!E>&,I.R!]#0H)"6YE=R!#;VYT<F]L;&5R*"D[
M#0H)?0T*#0H)<'5B;&EC($-O;G1R;VQL97(H*0T*"7L-"@D)9G)A;64@/2!N
M97<@2D9R86UE*"D[#0H)"69R86UE+G-E=$1E9F%U;'1#;&]S94]P97)A=&EO
M;BA*1G)A;64N15A)5%]/3E]#3$]312D[#0H)"69R86UE+F%D9$YO=&EF>2@I
M.PT*"0EF<F%M92YP86-K*"D[#0H)"5-C86QA8FQE4&%N92!P86YE(#T@;F5W
M(%-C86QA8FQE4&%N92@I.PT*"0EP86YE+G-E=$QA>6]U="AN=6QL*3L-"@D)
M9G)A;64N<V5T0V]N=&5N=%!A;F4H<&%N92D[#0H)"6-O;G1E;G1086YE(#T@
M9G)A;64N9V5T0V]N=&5N=%!A;F4H*3L-"@D)9G)A;64N<V5T4VEZ92@S,S L
M(#,T,"D[#0H)"6-R96%T959I97=S*"D[#0H)"69R86UE+G-E=$QO8V%T:6]N
M4F5L871I=F54;RAN=6QL*3L-"@D)9G)A;64N<V5T5FES:6)L92AT<G5E*3L-
M"@D)9G)A;64N=F%L:61A=&4H*3L-"@E]#0H-"@EP=6)L:6,@=F]I9"!C<F5A
M=&56:65W<R@I#0H)>PT*"0EP;&%I;D9O;G0@/2!N97<@1F]N="@B4V%N<U-E
M<FEF(BQ&;VYT+E!,04E.+#$R*3L-"@D)2D)U='1O;B!B=71T;VX@/2!N97<@
M2D)U='1O;B@B3TLB*3L-"@D)8G5T=&]N+G-E=$9O;G0H<&QA:6Y&;VYT*3L-
M"@D)8G5T=&]N+G-E=$)O=6YD<R@Q,"P@,3 L(#4P+" R-"D[#0H)"6-O;G1E
M;G1086YE+F%D9"AB=71T;VXI.PT*"0E*5&5X=$9I96QD('1E>'1&:65L9" ]
M(&YE=R!*5&5X=$9I96QD*"D[#0H)"71E>'1&:65L9"YS971&;VYT*'!L86EN
M1F]N="D[#0H)"71E>'1&:65L9"YS971";W5N9',H-3 L(#4P+" Q,# L(#(Q
M*3L-"@D)8V]N=&5N=%!A;F4N861D*'1E>'1&:65L9"D[#0H)?0T*?0T*#0IC
M;&%S<R!38V%L86)L95!A;F4@97AT96YD<R!*4&%N96P-"GL-"@EP=6)L:6,@
M=F]I9"!P86EN="A'<F%P:&EC<R!G*0T*"7L-"@D)1W)A<&AI8W,R1"!G,F0@
M/2 H1W)A<&AI8W,R1"D@9SL-"@D)9&]U8FQE('IO;VU&86-T;W(@/2 R+C [
M#0H)"4%F9FEN951R86YS9F]R;2!O;&0@/2!G,F0N9V5T5')A;G-F;W)M*"D[
M#0H)"6<R9"YS8V%L92AZ;V]M1F%C=&]R+"!Z;V]M1F%C=&]R*3L-"@D)<W5P
M97(N<&%I;G0H9S)D*3L-"@D)9S)D+G-E=%1R86YS9F]R;2AO;&0I.PT*"7T-
""GT`
`
end