java - 我有一个 IndexOutOfBoundsException 并且不明白为什么

标签 java swing exception indexoutofboundsexception

我有一个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(您需要获得焦点,并且可能并不总是有效),您可以使用DocumentListenerKeyBindings 以满足您的目的。

关于java - 我有一个 IndexOutOfBoundsException 并且不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239383/

相关文章:

Java 从 MIDI 键盘获取输入

java - 使用 Grid/FlowLayout 的 JProgressbar 宽度

c# - 无法定义两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象

c++ - 在修改后的异常上使用 `throw;`

java - 打印 JAXB 生成的 bean

java - 初始化时出现 Log4j 警告?

java - Pivotal Web 服务 Spring 错误

java - 如何以编程方式触发 ComponentListener?

java - JTextField 在 Eclipse 中一切看起来都正常,但无法编译

c++ - 如何捕获所有类型的堆栈错误?