-
Bug
-
Resolution: Cannot Reproduce
-
P3
-
None
-
6u2
-
other
-
generic
OPERATING SYSTEM(S):
--------------------
All
FULL JDK VERSION(S):
-------------------
java version "1.6.0_02"
Java(TM) SE Runtime Environment (build 1.6.0_02-b05)
Java HotSpot(TM) Server VM (build 1.6.0_02-b05, mixed mode)
DESCRIPTION:
------------
Compile and run provided testcase.
1) Use TABS to focus "next focusable component" or traverse components
of application given below in forward direction.
Result:forward focus cycle is missing few components displayed on
the Panel.
2) Use Shift+TABS to focus "Before focusable component" or traverse
components of application given below in backward direction.
Result:backward focus cycle is missing few components too displayed
on the Panel.
Notes:
- Seen on all look and feel( WindowsLookAndFeel, GTKLookAndFeel,
MotifLookAndFeel and MetalLookAndFeel) as well
- Focus cycle consisting of focusable components should be common for
both forward and backward traversal, which is not here.
TESTCASE (SortOrderFocusProblem2.java):
---------------------------------------
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.awt.*;
class SwingComponentsPanel extends JPanel {
String[] comboArray = { "JCombobox 1", "JCombobox 2", "JCombobox 3", "JCombobox 4",
"JCombobox 5"};
String[] comboEditableArray = { "Editable JCombobox 1", "Editable JCombobox 2",
"Editable JCombobox 3", "Editable JCombobox 4", "Editable JCombobox 5"};
String[] listArray = { "JList 1", "JList 2", "JList 3"};
static JButton jButton;
JCheckBox jCheckBox;
JComboBox jComboBox;
JComboBox jComboBoxE;
JEditorPane jEditorPane;
JFormattedTextField jFormattedTextField;
JList jList;
JPasswordField jPasswordField;
JRadioButton jRadioButton;
JSpinner jSpinner;
JTextArea jTextAreaNE;
JTextArea jTextArea;
JTable jTable;
JTextField jTextField;
JTextPane jTextPane;
JToggleButton jToggleButton;
JTree jTree;
public SwingComponentsPanel() {
this.setBorder(BorderFactory.createCompoundBorder(BorderFactory
.createTitledBorder("Swing Components"), BorderFactory
.createEmptyBorder(5, 5, 5, 5)));
jButton = new JButton("JButton");
jButton.setName("JButton");
jButton.setFocusable(true);
jCheckBox = new JCheckBox("JCheckBox");
jCheckBox.setName("JCheckBox");
jCheckBox.setFocusable(true);
jComboBoxE = new JComboBox(comboEditableArray);
jComboBoxE.setName("JEditable_ComboBox");
jComboBoxE.setEditable(true);
jComboBoxE.setFocusable(true);
jComboBox = new JComboBox(comboArray);
jComboBox.setName("JComboBox");
jComboBox.setFocusable(true);
jEditorPane = new JEditorPane("text/plain", "Editor Pane");
jEditorPane.setName("JEditorPane");
jEditorPane.setFocusable(true);
jFormattedTextField = new JFormattedTextField("Formatted Text Field");
jFormattedTextField.setName("JFormattedTextField");
jFormattedTextField.setFocusable(true);
jList = new JList(listArray);
jList.setName("JList");
jList.setFocusable(true);
jPasswordField = new JPasswordField(10);
jPasswordField.setName("JPasswordField");
jPasswordField.setFocusable(true);
jRadioButton = new JRadioButton("JRadioButton");
jRadioButton.setName("JRadioButton");
jRadioButton.setFocusable(true);
jSpinner = new JSpinner(new SpinnerNumberModel());
jSpinner.setName("JSpinnerNumber");
jSpinner.setFocusable(true);
jTextAreaNE = new JTextArea(6, 10);
jTextAreaNE.setText("Non-Editable JTextArea");
jTextAreaNE.setEditable(false);
jTextAreaNE.setName("JNonEditableJTextArea");
jTextAreaNE.setFocusable(true);
jTextArea = new JTextArea(4, 8);
jTextArea.setText("JTextArea");
jTextArea.setName("JEditableJTextArea");
jTextArea.setFocusable(true);
jTable=new JTable(2,2);
jTable.setFocusable(true);
jTable.setName("JTextArea2");
jTextField = new JTextField("JTextField");
jTextField.setName("JTextField");
jTextField.setFocusable(true);
jTextPane = new JTextPane();
jTextPane.setText("JTextPane");
jTextPane.setName("JTextPane");
jTextPane.setFocusable(true);
jTree = new JTree();
jTree.setName("JTree");
jTree.setFocusable(true);
//jTree.setEditable(true);
// Adding all the components required
add(jButton);
add(jCheckBox);
add(jComboBox);
add(jTable);
add(jTextArea);
add(jComboBoxE);
add(jEditorPane);
add(jFormattedTextField);
add(jList);
add(jTextAreaNE);
add(jPasswordField);
add(jRadioButton);
add(jSpinner);
add(jTextField);
add(jTextPane);
add(jTree);
this.setFocusable(false);
this.setName("Swing Components");
}
}
public class SortOrderFocusProblem2 extends JFrame {
JMenuBar menuBar;
JMenu dialogsMenu;
JMenu internalFrameMenu;
JMenu traversalMenu;
JMenu zMenu;
JMenuItem menuItem;
JMenuItem dialogsMenuItem;
JMenuItem internalTestMenuItem;
JMenuItem zAWTMenuItem;
JMenuItem zSwingMenuItem;
JMenuItem zMixMenuItem;
JMenuItem awtMenuItem;
JMenuItem swingMenuItem;
JMenuItem swawtMenuItem;
public SortOrderFocusProblem2() {
menuBar = new JMenuBar();
setJMenuBar(menuBar);
menuBar.setName(null); // will not be included in the
// SortingFocusTraversalPolicy
// Travesal Menu
traversalMenu = new JMenu("Traversal");
traversalMenu.setMnemonic(KeyEvent.VK_T);
traversalMenu.setName("TraversalMenu");
menuBar.add(traversalMenu);
awtMenuItem = new JMenuItem("AWT Test", KeyEvent.VK_A);
swingMenuItem = new JMenuItem("Swing test", KeyEvent.VK_S);
swawtMenuItem = new JMenuItem("Both Swing and AWT test", KeyEvent.VK_S);
traversalMenu.add(awtMenuItem);
traversalMenu.add(swingMenuItem);
traversalMenu.add(swawtMenuItem);
// Dialogs Menu
dialogsMenu = new JMenu("Dialogs");
dialogsMenu.setMnemonic(KeyEvent.VK_D);
dialogsMenu.setName("DialogsMenu");
menuBar.add(dialogsMenu);
dialogsMenuItem = new JMenuItem("Dialogs Test", KeyEvent.VK_I);
dialogsMenu.add(dialogsMenuItem);
// Z-order Menu
zMenu = new JMenu("Z-Order");
zMenu.setMnemonic(KeyEvent.VK_Z);
zMenu.setName("ZOrderMenu");
menuBar.add(zMenu);
zAWTMenuItem = new JMenuItem("AWT Test", KeyEvent.VK_A);
zSwingMenuItem = new JMenuItem("Swing Test", KeyEvent.VK_S);
zMixMenuItem = new JMenuItem("AWT & Swing Mix Test", KeyEvent.VK_M);
// add z-menuitems to Zmenu,
zMenu.add(zAWTMenuItem);
zMenu.add(zSwingMenuItem);
zMenu.add(new JSeparator());
zMenu.add(zMixMenuItem);
// Internal Frame Menu
internalFrameMenu = new JMenu("Internal Frame");
internalFrameMenu.setMnemonic(KeyEvent.VK_I);
internalFrameMenu.setName("InternalFrameMenu");
menuBar.add(internalFrameMenu);
internalTestMenuItem = new JMenuItem("Internal Frame Test", KeyEvent.VK_I);
internalFrameMenu.add(internalTestMenuItem);
JPanel jp = new SwingComponentsPanel();
KeyboardFocusManager kFocusMan = KeyboardFocusManager.getCurrentKeyboardFocusManager();
this.setFocusTraversalPolicy(
new SortingFocusTraversalPolicy(
new Comparator<Component>() {
public int compare(Component o1, Component o2) {
if (o1.getClass().toString().equals("class javax.swing.JPanel")
|| o2.getClass().toString().equals("class javax.swing.JPanel")) {
return 1;
}
if (o1.getClass().toString().equals("class javax.swing.JLayeredPane")
|| o2.getClass().toString().equals("class javax.swing.JLayeredPane")) {
return 1;
}
if (((Component) o1).getName() == null
&& ((Component) o2).getName() != null) {
return 1;
} else if ((((Component) o1).getName() != null && ((Component) o2)
.getName() == null)) {
return -1;
} else if ((((Component) o1).getName() == null && ((Component) o2)
.getName() == null)) {
return 1;
} else {
return((Component) o2).getName().compareTo(
((Component) o1).getName());
}
}
}
)
);
//jp.setFocusCycleRoot(true);
this.getContentPane().add(jp);
}
public static void main(String[] args) {
SortOrderFocusProblem2 fr_sort = new SortOrderFocusProblem2();
fr_sort.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
fr_sort.pack();
fr_sort.setVisible(true);
}
}
--------------------
All
FULL JDK VERSION(S):
-------------------
java version "1.6.0_02"
Java(TM) SE Runtime Environment (build 1.6.0_02-b05)
Java HotSpot(TM) Server VM (build 1.6.0_02-b05, mixed mode)
DESCRIPTION:
------------
Compile and run provided testcase.
1) Use TABS to focus "next focusable component" or traverse components
of application given below in forward direction.
Result:forward focus cycle is missing few components displayed on
the Panel.
2) Use Shift+TABS to focus "Before focusable component" or traverse
components of application given below in backward direction.
Result:backward focus cycle is missing few components too displayed
on the Panel.
Notes:
- Seen on all look and feel( WindowsLookAndFeel, GTKLookAndFeel,
MotifLookAndFeel and MetalLookAndFeel) as well
- Focus cycle consisting of focusable components should be common for
both forward and backward traversal, which is not here.
TESTCASE (SortOrderFocusProblem2.java):
---------------------------------------
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.awt.*;
class SwingComponentsPanel extends JPanel {
String[] comboArray = { "JCombobox 1", "JCombobox 2", "JCombobox 3", "JCombobox 4",
"JCombobox 5"};
String[] comboEditableArray = { "Editable JCombobox 1", "Editable JCombobox 2",
"Editable JCombobox 3", "Editable JCombobox 4", "Editable JCombobox 5"};
String[] listArray = { "JList 1", "JList 2", "JList 3"};
static JButton jButton;
JCheckBox jCheckBox;
JComboBox jComboBox;
JComboBox jComboBoxE;
JEditorPane jEditorPane;
JFormattedTextField jFormattedTextField;
JList jList;
JPasswordField jPasswordField;
JRadioButton jRadioButton;
JSpinner jSpinner;
JTextArea jTextAreaNE;
JTextArea jTextArea;
JTable jTable;
JTextField jTextField;
JTextPane jTextPane;
JToggleButton jToggleButton;
JTree jTree;
public SwingComponentsPanel() {
this.setBorder(BorderFactory.createCompoundBorder(BorderFactory
.createTitledBorder("Swing Components"), BorderFactory
.createEmptyBorder(5, 5, 5, 5)));
jButton = new JButton("JButton");
jButton.setName("JButton");
jButton.setFocusable(true);
jCheckBox = new JCheckBox("JCheckBox");
jCheckBox.setName("JCheckBox");
jCheckBox.setFocusable(true);
jComboBoxE = new JComboBox(comboEditableArray);
jComboBoxE.setName("JEditable_ComboBox");
jComboBoxE.setEditable(true);
jComboBoxE.setFocusable(true);
jComboBox = new JComboBox(comboArray);
jComboBox.setName("JComboBox");
jComboBox.setFocusable(true);
jEditorPane = new JEditorPane("text/plain", "Editor Pane");
jEditorPane.setName("JEditorPane");
jEditorPane.setFocusable(true);
jFormattedTextField = new JFormattedTextField("Formatted Text Field");
jFormattedTextField.setName("JFormattedTextField");
jFormattedTextField.setFocusable(true);
jList = new JList(listArray);
jList.setName("JList");
jList.setFocusable(true);
jPasswordField = new JPasswordField(10);
jPasswordField.setName("JPasswordField");
jPasswordField.setFocusable(true);
jRadioButton = new JRadioButton("JRadioButton");
jRadioButton.setName("JRadioButton");
jRadioButton.setFocusable(true);
jSpinner = new JSpinner(new SpinnerNumberModel());
jSpinner.setName("JSpinnerNumber");
jSpinner.setFocusable(true);
jTextAreaNE = new JTextArea(6, 10);
jTextAreaNE.setText("Non-Editable JTextArea");
jTextAreaNE.setEditable(false);
jTextAreaNE.setName("JNonEditableJTextArea");
jTextAreaNE.setFocusable(true);
jTextArea = new JTextArea(4, 8);
jTextArea.setText("JTextArea");
jTextArea.setName("JEditableJTextArea");
jTextArea.setFocusable(true);
jTable=new JTable(2,2);
jTable.setFocusable(true);
jTable.setName("JTextArea2");
jTextField = new JTextField("JTextField");
jTextField.setName("JTextField");
jTextField.setFocusable(true);
jTextPane = new JTextPane();
jTextPane.setText("JTextPane");
jTextPane.setName("JTextPane");
jTextPane.setFocusable(true);
jTree = new JTree();
jTree.setName("JTree");
jTree.setFocusable(true);
//jTree.setEditable(true);
// Adding all the components required
add(jButton);
add(jCheckBox);
add(jComboBox);
add(jTable);
add(jTextArea);
add(jComboBoxE);
add(jEditorPane);
add(jFormattedTextField);
add(jList);
add(jTextAreaNE);
add(jPasswordField);
add(jRadioButton);
add(jSpinner);
add(jTextField);
add(jTextPane);
add(jTree);
this.setFocusable(false);
this.setName("Swing Components");
}
}
public class SortOrderFocusProblem2 extends JFrame {
JMenuBar menuBar;
JMenu dialogsMenu;
JMenu internalFrameMenu;
JMenu traversalMenu;
JMenu zMenu;
JMenuItem menuItem;
JMenuItem dialogsMenuItem;
JMenuItem internalTestMenuItem;
JMenuItem zAWTMenuItem;
JMenuItem zSwingMenuItem;
JMenuItem zMixMenuItem;
JMenuItem awtMenuItem;
JMenuItem swingMenuItem;
JMenuItem swawtMenuItem;
public SortOrderFocusProblem2() {
menuBar = new JMenuBar();
setJMenuBar(menuBar);
menuBar.setName(null); // will not be included in the
// SortingFocusTraversalPolicy
// Travesal Menu
traversalMenu = new JMenu("Traversal");
traversalMenu.setMnemonic(KeyEvent.VK_T);
traversalMenu.setName("TraversalMenu");
menuBar.add(traversalMenu);
awtMenuItem = new JMenuItem("AWT Test", KeyEvent.VK_A);
swingMenuItem = new JMenuItem("Swing test", KeyEvent.VK_S);
swawtMenuItem = new JMenuItem("Both Swing and AWT test", KeyEvent.VK_S);
traversalMenu.add(awtMenuItem);
traversalMenu.add(swingMenuItem);
traversalMenu.add(swawtMenuItem);
// Dialogs Menu
dialogsMenu = new JMenu("Dialogs");
dialogsMenu.setMnemonic(KeyEvent.VK_D);
dialogsMenu.setName("DialogsMenu");
menuBar.add(dialogsMenu);
dialogsMenuItem = new JMenuItem("Dialogs Test", KeyEvent.VK_I);
dialogsMenu.add(dialogsMenuItem);
// Z-order Menu
zMenu = new JMenu("Z-Order");
zMenu.setMnemonic(KeyEvent.VK_Z);
zMenu.setName("ZOrderMenu");
menuBar.add(zMenu);
zAWTMenuItem = new JMenuItem("AWT Test", KeyEvent.VK_A);
zSwingMenuItem = new JMenuItem("Swing Test", KeyEvent.VK_S);
zMixMenuItem = new JMenuItem("AWT & Swing Mix Test", KeyEvent.VK_M);
// add z-menuitems to Zmenu,
zMenu.add(zAWTMenuItem);
zMenu.add(zSwingMenuItem);
zMenu.add(new JSeparator());
zMenu.add(zMixMenuItem);
// Internal Frame Menu
internalFrameMenu = new JMenu("Internal Frame");
internalFrameMenu.setMnemonic(KeyEvent.VK_I);
internalFrameMenu.setName("InternalFrameMenu");
menuBar.add(internalFrameMenu);
internalTestMenuItem = new JMenuItem("Internal Frame Test", KeyEvent.VK_I);
internalFrameMenu.add(internalTestMenuItem);
JPanel jp = new SwingComponentsPanel();
KeyboardFocusManager kFocusMan = KeyboardFocusManager.getCurrentKeyboardFocusManager();
this.setFocusTraversalPolicy(
new SortingFocusTraversalPolicy(
new Comparator<Component>() {
public int compare(Component o1, Component o2) {
if (o1.getClass().toString().equals("class javax.swing.JPanel")
|| o2.getClass().toString().equals("class javax.swing.JPanel")) {
return 1;
}
if (o1.getClass().toString().equals("class javax.swing.JLayeredPane")
|| o2.getClass().toString().equals("class javax.swing.JLayeredPane")) {
return 1;
}
if (((Component) o1).getName() == null
&& ((Component) o2).getName() != null) {
return 1;
} else if ((((Component) o1).getName() != null && ((Component) o2)
.getName() == null)) {
return -1;
} else if ((((Component) o1).getName() == null && ((Component) o2)
.getName() == null)) {
return 1;
} else {
return((Component) o2).getName().compareTo(
((Component) o1).getName());
}
}
}
)
);
//jp.setFocusCycleRoot(true);
this.getContentPane().add(jp);
}
public static void main(String[] args) {
SortOrderFocusProblem2 fr_sort = new SortOrderFocusProblem2();
fr_sort.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
fr_sort.pack();
fr_sort.setVisible(true);
}
}