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

Exception thrown when tabbing using setNextFocusableComponent()

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P3 P3
    • None
    • 1.2.0
    • client-libs
    • generic
    • solaris_2.6

      When I enter a tab in a JTextField after running the attached code, I get the following exception:

      Exception occurred during event dispatching:
      java.lang.ArrayIndexOutOfBoundsException: 2 > 1
              at java.util.Vector.insertElementAt(Vector.java)
              at com.sun.java.swing.DefaultFocusManager.childrenTabOrder(DefaultFocusManager.java:303)
              at com.sun.java.swing.DefaultFocusManager.getComponentAfter(DefaultFocusManager.java:225)
              at com.sun.java.swing.DefaultFocusManager.getNextComponent(DefaultFocusManager.java:162)
              at com.sun.java.swing.DefaultFocusManager.getFocusableComponentAfter(DefaultFocusManager.java:137)
              at com.sun.java.swing.DefaultFocusManager.focusNextComponent(DefaultFocusManager.java:88)
              at com.sun.java.swing.DefaultFocusManager.processKeyEvent(DefaultFocusManager.java:76)
              at com.sun.java.swing.JComponent.processKeyEvent(JComponent.java:1086)
              at java.awt.Component.processEvent(Component.java:2173)
              at java.awt.Container.processEvent(Container.java:878)
              at java.awt.Component.dispatchEventImpl(Component.java:1773)
              at java.awt.Container.dispatchEventImpl(Container.java:923)
              at java.awt.Component.dispatchEvent(Component.java:1705)
              at java.awt.LightweightDispatcher.processKeyEvent(Container.java:1419)
              at java.awt.LightweightDispatcher.dispatchEvent(Container.java:1403)
              at java.awt.Container.dispatchEventImpl(Container.java:910)
              at java.awt.Window.dispatchEventImpl(Window.java:485)
              at java.awt.Component.dispatchEvent(Component.java:1705)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:63)


      ----------- Code --------------


      import com.sun.java.swing.*;
      import java.awt.*;
      import java.awt.event.ActionListener;
      import java.awt.event.ActionEvent;
      import java.awt.event.FocusListener;
      import java.awt.event.FocusEvent;

      public class TestFocus extends JFrame implements FocusListener, ActionListener {

          int count = 0;
          
          JTextField myTextField1 = new JTextField(20);
          JTextField myTextField2 = new JTextField(20);
          JButton myButton = new JButton("Button");

          public TestFocus() {
              JPanel bottomPanel = new JPanel();
              getContentPane().setLayout(new BorderLayout());
              
              try {
               myTextField1.setNextFocusableComponent(myTextField2); // These are the two lines...
               myTextField2.setNextFocusableComponent(myTextField1); // ... cause the exception.
              } catch(ArrayIndexOutOfBoundsException e) {
               System.out.println("What? " + e);
              }

              bottomPanel.add(myTextField1);
              bottomPanel.add(myTextField2);
              getContentPane().add("Center", bottomPanel);
              getContentPane().add("South", myButton);

              myButton.addActionListener(this);
              myTextField1.addFocusListener(this);
              myTextField2.addFocusListener(this);
              myButton.addFocusListener(this);

      myButton.requestFocus();
              myTextField2.requestFocus();
              this.repaint();
          }

          public static void main(String args[]) {
              TestFocus myWindow = new TestFocus();
              myWindow.setTitle("TextField Tab Example");
              myWindow.setSize(400, 400);
              myWindow.setVisible(true);
          }

          public boolean isManagingFocus() {
           return true;
          }
          
          public Component getNextFocusableComponent() {
           return null;
          }
          
          public void actionPerformed(ActionEvent evt) {
              if (evt.getSource() == myButton) {
                  /*
                   * Get the contents of myTextField1.
                   */
                  String data1 = myTextField1.getText();
                  System.out.println("myTextField = " + data1);

                  /*
                   * Get the contents of myTextField2.
                   */
                  String data2 = myTextField2.getText();
                  System.out.println("myTextField2 = " + data2);
              }
          }

          public void focusGained(FocusEvent e) {
              System.out.println(++count + " focus gained: " + e.getSource() + "\n");
          }

          public void focusLost(FocusEvent e) {
              System.out.println(++count + " focus lost: " + e.getSource() + "\n");
          }
      }

      ----------- End Of Code --------------

            stewilso Steve Wilson (Inactive)
            duke J. Duke
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: