Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6289864

FocusTraversalPolicy is initialized for Frame but not for Window

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P4 P4
    • None
    • 6
    • client-libs
    • 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

            ant Anton Tarasov (Inactive)
            ant Anton Tarasov (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Imported:
              Indexed: