< prev index next >

test/javax/swing/JRadioButton/FocusTraversal/FocusTraversal.java

Print this page

        

*** 20,66 **** * or visit www.oracle.com if you need additional information or have any * questions. */ /* @test ! @bug 8129940 ! @summary JRadioButton does not honor non-standard FocusTraversalKeys ! @author Semyon Sadetsky */ ! ! import javax.swing.*; ! import java.awt.*; import java.awt.event.KeyEvent; import java.util.HashSet; import java.util.Set; public class FocusTraversal { private static JFrame frame; private static JRadioButton a; private static JRadioButton d; private static JTextField next; private static JTextField prev; public static void main(String[] args) throws Exception { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { - frame = new JFrame("FocusTraversalTest"); - frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - frame.setUndecorated(true); - Set<KeyStroke> keystrokes = new HashSet<KeyStroke>(); keystrokes.add(KeyStroke.getKeyStroke("TAB")); keystrokes.add(KeyStroke.getKeyStroke("ENTER")); frame.setFocusTraversalKeys( KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keystrokes); a = new JRadioButton("a"); ! JRadioButton b = new JRadioButton("b"); ! JRadioButton c = new JRadioButton("c"); d = new JRadioButton("d"); ButtonGroup radioButtonGroup = new ButtonGroup(); radioButtonGroup.add(a); radioButtonGroup.add(b); --- 20,105 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ /* @test ! @bug 8129940 8132770 ! @summary JRadioButton should run custom FocusTraversalKeys for all LaFs ! @run main FocusTraversal */ ! import java.awt.BorderLayout; ! import java.awt.Component; ! import java.awt.KeyboardFocusManager; ! import java.awt.Robot; import java.awt.event.KeyEvent; import java.util.HashSet; import java.util.Set; + import javax.swing.ButtonGroup; + import javax.swing.FocusManager; + import javax.swing.JButton; + import javax.swing.JFrame; + import javax.swing.JPanel; + import javax.swing.JRadioButton; + import javax.swing.JTextField; + import javax.swing.KeyStroke; + import javax.swing.LookAndFeel; + import javax.swing.SwingUtilities; + import javax.swing.UIManager; + import javax.swing.UnsupportedLookAndFeelException; public class FocusTraversal { private static JFrame frame; private static JRadioButton a; + private static JRadioButton b; + private static JRadioButton c; private static JRadioButton d; private static JTextField next; private static JTextField prev; + private static Robot robot; public static void main(String[] args) throws Exception { + + robot = new Robot(); + robot.delay(2000); + UIManager.LookAndFeelInfo[] lookAndFeelArray + = UIManager.getInstalledLookAndFeels(); + for (UIManager.LookAndFeelInfo lookAndFeelItem : lookAndFeelArray) { + executeCase(lookAndFeelItem.getClassName()); + } + } + + private static void executeCase(String lookAndFeelString) + throws Exception { + if (tryLookAndFeel(lookAndFeelString)) { + createUI(lookAndFeelString); + robot.delay(2000); + runTestCase(); + robot.delay(2000); + cleanUp(); + robot.delay(2000); + } + } + + private static void createUI(final String lookAndFeelString) + throws Exception { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { Set<KeyStroke> keystrokes = new HashSet<KeyStroke>(); keystrokes.add(KeyStroke.getKeyStroke("TAB")); keystrokes.add(KeyStroke.getKeyStroke("ENTER")); + frame = new JFrame("FocusTraversalTest " + lookAndFeelString); + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + frame.setUndecorated(true); frame.setFocusTraversalKeys( KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keystrokes); a = new JRadioButton("a"); ! b = new JRadioButton("b"); ! c = new JRadioButton("c"); d = new JRadioButton("d"); ButtonGroup radioButtonGroup = new ButtonGroup(); radioButtonGroup.add(a); radioButtonGroup.add(b);
*** 82,144 **** root.add(panel, BorderLayout.CENTER); root.add(new JButton("OK"), BorderLayout.SOUTH); frame.add(root); frame.pack(); frame.setVisible(true); } }); - - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - a.requestFocus(); } - }); ! Robot robot = new Robot(); robot.waitForIdle(); ! robot.setAutoDelay(200); robot.keyPress(KeyEvent.VK_ENTER); robot.keyRelease(KeyEvent.VK_ENTER); robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { ! Component focusOwner = ! FocusManager.getCurrentManager().getFocusOwner(); ! if (focusOwner != next) { ! throw new RuntimeException( ! "Focus component is wrong after forward key " + focusOwner); ! } } }); ! robot.keyPress(KeyEvent.VK_SHIFT); ! robot.keyPress(KeyEvent.VK_TAB); ! robot.keyRelease(KeyEvent.VK_TAB); ! robot.keyRelease(KeyEvent.VK_SHIFT); ! robot.waitForIdle(); SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { ! Component focusOwner = ! FocusManager.getCurrentManager().getFocusOwner(); ! if (focusOwner != d) { throw new RuntimeException( ! "Focus component is wrong after backward key " + focusOwner); } } }); ! SwingUtilities.invokeLater(new Runnable() { @Override public void run() { frame.dispose(); } }); - System.out.println("ok"); - } } --- 121,223 ---- root.add(panel, BorderLayout.CENTER); root.add(new JButton("OK"), BorderLayout.SOUTH); frame.add(root); frame.pack(); + frame.setLocationRelativeTo(null); frame.setVisible(true); + frame.toFront(); } }); } ! private static void runTestCase() throws Exception { ! LookAndFeel lookAndFeel = UIManager.getLookAndFeel(); ! focusOn(a); ! if (isExcludedLookAndFeel(lookAndFeel)) { ! robot.keyPress(KeyEvent.VK_ENTER); ! robot.keyRelease(KeyEvent.VK_ENTER); robot.waitForIdle(); + isFocusOwner(b, "forward"); + robot.keyPress(KeyEvent.VK_SHIFT); + robot.keyPress(KeyEvent.VK_TAB); + robot.keyRelease(KeyEvent.VK_TAB); + robot.keyRelease(KeyEvent.VK_SHIFT); + robot.waitForIdle(); + isFocusOwner(a, "backward"); ! } else { robot.keyPress(KeyEvent.VK_ENTER); robot.keyRelease(KeyEvent.VK_ENTER); robot.waitForIdle(); + isFocusOwner(next, "forward"); + robot.keyPress(KeyEvent.VK_SHIFT); + robot.keyPress(KeyEvent.VK_TAB); + robot.keyRelease(KeyEvent.VK_TAB); + robot.keyRelease(KeyEvent.VK_SHIFT); + robot.waitForIdle(); + isFocusOwner(d, "backward"); + } + + } + + private static boolean isExcludedLookAndFeel(LookAndFeel lookAndFeel) { + return lookAndFeel.toString().toLowerCase().contains("aqua") + || lookAndFeel.toString().toLowerCase().contains("nimbus") + || lookAndFeel.toString().toLowerCase().contains("gtk"); + } + + private static void focusOn(Component component) + throws Exception { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { ! component.requestFocusInWindow(); } }); + } ! private static void isFocusOwner(Component queriedFocusOwner, ! String direction) ! throws Exception { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { ! Component actualFocusOwner ! = FocusManager.getCurrentManager().getFocusOwner(); ! if (actualFocusOwner != queriedFocusOwner) { throw new RuntimeException( ! "Focus component is wrong after " + direction ! + " direction "); ! } } }); ! } ! ! private static boolean tryLookAndFeel(String lookAndFeelString) ! throws Exception { ! ! try { ! UIManager.setLookAndFeel( ! lookAndFeelString); ! ! } catch (UnsupportedLookAndFeelException ! | ClassNotFoundException ! | InstantiationException ! | IllegalAccessException e) { ! return false; ! } ! return true; ! } ! ! private static void cleanUp() throws Exception { ! SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { frame.dispose(); } }); } }
< prev index next >