-
Bug
-
Resolution: Duplicate
-
P3
-
None
-
1.2.0
-
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 --------------
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 --------------
- duplicates
-
JDK-4129380 JComponent.setNextFocusableComponent doesn't always work as expected
-
- Closed
-