< 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 >