我有一个IndexOutOfBoundsException
,我也不知道为什么。
我有几个文本字段(整数、 double 等),我需要根据 ArrayList<String> tagContentAL
上的信息使用它们。
这是我的代码:
jLabelAL = new ArrayList<>();
jTextFieldAL = new ArrayList<>();
for (int i = 0; i < size; i++) {
jLabelAL.add(new JLabel("" + tagNamesAL.get(i)));
switch (tagContentAL.get(i).toString()) {
case "int":
jTextFieldAL.add((JTextField) new tools.IntegerTextField(simulation));
break;
case "double":
case "float":
jTextFieldAL.add((JTextField) new tools.DoubleTextField(simulation));
break;
case "*":
jTextFieldAL.add((JTextField) new JTextField());
break;
}
jTextFieldAL.get(i).addKeyListener(keyEvent); //IndexOutOfBoundsException in this line
p1.add(jLabelAL.get(i));
p1.add(jTextFieldAL.get(i));
}
问题出在哪里?
最佳答案
问题是 jTextFieldAL.get(i)
可能不存在,因为 i >= jTextFieldAl.size()
。因为您的 switch 语句中的原因在任何情况下都可能不会输入。
Throws: IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size())
正如@camickr所说,您不应该使用KeyListener
(您需要获得焦点,并且可能并不总是有效),您可以使用DocumentListener
或KeyBindings
以满足您的目的。
关于java - 我有一个 IndexOutOfBoundsException 并且不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239383/