JDK-6675956 : REGRESSION : Different behavior of Container.findComponentAt in jdk5
  • Type: Bug
  • Component: client-libs
  • Sub-Component: java.awt
  • Affected Version: 5.0u13
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2008-03-17
  • Updated: 2011-09-02
  • Resolved: 2009-03-23
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other Other
5.0u18-rev b04Fixed 5.0u19Fixed
Description
The behavior of Container.findComponentAt in jdk5 is different form that in jdk1.4.2 and jdk6.
Those should be the same.

REPRODUCE :
 1)Compile the attached program and invoke "java TP2" in each jdk version.
 2)Click "findComponentAt(100, 100)" button.
 3)Input some text string in text field
 4)Click "findComponentAt(100, 100)" button.
 Only the message in jdk5 is different, only "null" shows up.

RESULT:
The followings are the result in several jdk versions.
K:\usersJ\licensee-work\ContainerfindComponentAt>java -showversion TP2
java version "1.4.2_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_16-b05)
Java HotSpot(TM) Client VM (build 1.4.2_16-b05, mixed mode)

java.awt.TextField[textfield0,4,30,292x243,text=,editable,selection=0-0]
java.awt.TextField[textfield0,4,30,292x243,text=kakdshfiwehkslah,editable,selection=16-16]

K:\usersJ\licensee-work\ContainerfindComponentAt>java -showversion TP2
java version "1.5.0_15"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_15-b04)
Java HotSpot(TM) Client VM (build 1.5.0_15-b04, mixed mode)

null
null

K:\usersJ\licensee-work\ContainerfindComponentAt>java -showversion TP2
java version "1.6.0_04"
Java(TM) SE Runtime Environment (build 1.6.0_04-b12)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode)

java.awt.TextField[textfield0,4,30,292x243,text=,editable,selection=0-0]
java.awt.TextField[textfield0,4,30,292x243,text=kajdhsfpiwaehnvdsaklhdsahf,editable,selection=26-26]

NOTE:
 The test program tries to get component at specified axis.
 In jdk5, findComponentAT does not seem to return correct value.

Comments
EVALUATION -
02-09-2011

SUGGESTED FIX //Overwrite Component.isReqursivelyVisiable() with Window.isReqursivelyVisible() //like in jdk 1.6. boolean java.awt.Window.isReqursivelyVisible(){ //overwriting java.awt.Componwent.isReqursivelyVisible() //for a top level to be displayed, its parents doesn't have to be visible. return visible; }
01-05-2008

EVALUATION Container.findComponentAt() calls Component.isRecursivelyVisible() which requires all parents to be visible. However for top level components its parent doesn't have to be visible.
01-05-2008

EVALUATION Indeed, Container.findComponentAt() is broken in JDK1.5 for some unknown reason, while with 1.4.2, 6.0, 6.0_10 and 7.0-b21 the test behaves correctly.
19-03-2008