1 /*
   2   @test
   3   @bug 6741526
   4   @summary KeyboardFocusManager.setDefaultFocusTraversalPolicy(FocusTraversalPolicy) affects created components
   5   @library ../../regtesthelpers
   6   @build Sysout
   7   @author Andrei Dmitriev : area=awt-focus
   8   @run main DefaultPolicyChange_Swing
   9 */
  10 
  11 import java.awt.*;
  12 import javax.swing.*;
  13 import javax.swing.table.DefaultTableModel;
  14 import test.java.awt.regtesthelpers.Sysout;
  15 
  16 public class DefaultPolicyChange_Swing {
  17     public static void main(String []s) {
  18         EventQueue.invokeLater(new Runnable(){
  19             public void run (){
  20                 DefaultPolicyChange_Swing.runTestSwing();
  21             }
  22         });
  23     }
  24     private static void runTestSwing(){
  25         KeyboardFocusManager currentKFM = KeyboardFocusManager.getCurrentKeyboardFocusManager();
  26         FocusTraversalPolicy defaultFTP = currentKFM.getDefaultFocusTraversalPolicy();
  27         ContainerOrderFocusTraversalPolicy newFTP = new ContainerOrderFocusTraversalPolicy();
  28 
  29 
  30         JFrame jf = new JFrame("Test1");
  31         JWindow jw = new JWindow(jf);
  32         JDialog jd = new JDialog(jf);
  33         JPanel jp1 = new JPanel();
  34         JButton jb1 = new JButton("jb1");
  35         JTable jt1 = new JTable(new DefaultTableModel());
  36 
  37         jf.add(jb1);
  38         jf.add(jt1);
  39         jf.add(jp1);
  40         System.out.println("FTP current on jf= " + jf.getFocusTraversalPolicy());
  41         System.out.println("FTP current on jw= " + jw.getFocusTraversalPolicy());
  42         System.out.println("FTP current on jd= " + jd.getFocusTraversalPolicy());
  43 
  44         if (!(jf.getFocusTraversalPolicy() instanceof LayoutFocusTraversalPolicy) ||
  45             !(jw.getFocusTraversalPolicy() instanceof LayoutFocusTraversalPolicy) ||
  46             !(jd.getFocusTraversalPolicy() instanceof LayoutFocusTraversalPolicy))
  47         {
  48             throw new RuntimeException("Failure! Swing toplevel must have LayoutFocusTraversalPolicy installed");
  49         }
  50 
  51         jf.setVisible(true);
  52 
  53         System.out.println("Now will set another policy.");
  54         currentKFM.setDefaultFocusTraversalPolicy(newFTP);
  55 
  56         FocusTraversalPolicy resultFTP = jw.getFocusTraversalPolicy();
  57 
  58         System.out.println("FTP current on jf= " + jf.getFocusTraversalPolicy());
  59         System.out.println("FTP current on jw= " + jw.getFocusTraversalPolicy());
  60         System.out.println("FTP current on jd= " + jd.getFocusTraversalPolicy());
  61 
  62         if (!resultFTP.equals(defaultFTP)) {
  63             Sysout.println("Failure! FocusTraversalPolicy should not change");
  64             Sysout.println("Was: " + defaultFTP);
  65             Sysout.println("Become: " + resultFTP);
  66             throw new RuntimeException("Failure! FocusTraversalPolicy should not change");
  67         }
  68     }
  69 }