-
Bug
-
Resolution: Unresolved
-
P4
-
None
-
6
-
None
-
Cause Known
-
generic
-
windows
The J2SE 6.0 spec for KeyboardFocusManager.getDefaultFocusTraversalPolicy() states:
<<Returns the default FocusTraversalPolicy. Top-level components use this value on their creation to initialize their own focus traversal policy by explicit call to Container.setFocusTraversalPolicy.>>
Frame does initialize its own focus traversal policy on its creation but Window
doesn't.
The following testcase illustrates this.
import java.awt.*;
public class TestFTP {
KeyboardFocusManager currentKFM =
KeyboardFocusManager.getCurrentKeyboardFocusManager();
ContainerOrderFocusTraversalPolicy newFTP =
new ContainerOrderFocusTraversalPolicy();
public static void main(String[] args) {
new TestFTP2().test();
}
private void test() {
Frame f = new Frame();
Window w = new Window(f);
System.out.println("Frame (before): " + f.getFocusTraversalPolicy());
System.out.println("Window (before): " + w.getFocusTraversalPolicy());
currentKFM.setDefaultFocusTraversalPolicy(newFTP);
System.out.println("\nFrame (after): " + f.getFocusTraversalPolicy());
System.out.println("Window (after): " + w.getFocusTraversalPolicy());
}
}
Here's what we'll get:
Frame (before): java.awt.DefaultFocusTraversalPolicy@d2906a
Window (before): java.awt.DefaultFocusTraversalPolicy@d2906a
Frame (after): java.awt.DefaultFocusTraversalPolicy@d2906a
Window (after): java.awt.ContainerOrderFocusTraversalPolicy@72ffb
Notice that Window's policy was changed following KFM's policy. That's because
its own policy wasn't initialized and is taken from KFM. Frame's policy remained
unchanged.
###@###.### 2005-06-23 13:02:21 GMT
<<Returns the default FocusTraversalPolicy. Top-level components use this value on their creation to initialize their own focus traversal policy by explicit call to Container.setFocusTraversalPolicy.>>
Frame does initialize its own focus traversal policy on its creation but Window
doesn't.
The following testcase illustrates this.
import java.awt.*;
public class TestFTP {
KeyboardFocusManager currentKFM =
KeyboardFocusManager.getCurrentKeyboardFocusManager();
ContainerOrderFocusTraversalPolicy newFTP =
new ContainerOrderFocusTraversalPolicy();
public static void main(String[] args) {
new TestFTP2().test();
}
private void test() {
Frame f = new Frame();
Window w = new Window(f);
System.out.println("Frame (before): " + f.getFocusTraversalPolicy());
System.out.println("Window (before): " + w.getFocusTraversalPolicy());
currentKFM.setDefaultFocusTraversalPolicy(newFTP);
System.out.println("\nFrame (after): " + f.getFocusTraversalPolicy());
System.out.println("Window (after): " + w.getFocusTraversalPolicy());
}
}
Here's what we'll get:
Frame (before): java.awt.DefaultFocusTraversalPolicy@d2906a
Window (before): java.awt.DefaultFocusTraversalPolicy@d2906a
Frame (after): java.awt.DefaultFocusTraversalPolicy@d2906a
Window (after): java.awt.ContainerOrderFocusTraversalPolicy@72ffb
Notice that Window's policy was changed following KFM's policy. That's because
its own policy wasn't initialized and is taken from KFM. Frame's policy remained
unchanged.
###@###.### 2005-06-23 13:02:21 GMT
- relates to
-
JDK-6206277 KeyboardFocusManager.setDefaultFocusTraversalPolicy has effect on already initialized components
-
- Open
-