gpt4 book ai didi

Java JList remove() 方法抛出 ArrayOutOfBoundsException

转载 作者:行者123 更新时间:2023-11-30 07:04:17 26 4
gpt4 key购买 nike

我使用的是正确显示的 JList。但是,我无法从列表中删除元素。

JList nameList = new JList(db.getAllNames());
nameList.setVisibleRowCount(6);
nameList.setFixedCellWidth(400);

JButton removeNameButton = new JButton("Remove Name");

removeNameButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String id = nameList.getSelectedValue().toString(); //valid value when button pressed
int index = nameList.getSelectedIndex(); //valid value when value pressed

namesList.remove(index); //ERROR
}

JList 包含 4 个名称,显示完美并且似乎具有正确的索引。 (如果我检查值 System.out.println(copiersList.getModel().getSize()); 它总是显示 4

这是错误信息:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 3

奇怪的是,如果我删除 Adam,我不会收到错误(但显然列表没有改变并且调用 .getSize() 方法显示 4):

enter image description here

id selected: Adam
index selected: 0

但是,任何其他:

id selected: BobException in thread "AWT-EventQueue-0" 
index selected: 1
java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1
at java.awt.Container.remove(Unknown Source)

最佳答案

不要从 JList 本身中移除,因为 remove(...) 方法并不像您认为的那样执行。它实际上试图删除 JList 中保存的组件,就好像它是保存其他组件的 JPanel 一样,即使不存在这样的组件也是如此。而是从 JList 的 model 中移除,通常是 DefaultListModel。 DefaultListModel 类有一个 removeElement(Object element) 和一个可以帮助您的 removeElementAt(int index) 方法。

即。

public void actionPerformed(ActionEvent e) {
String id = nameList.getSelectedValue().toString(); //valid value when button pressed
int index = nameList.getSelectedIndex(); //valid value when value pressed

DefaultListModel listModel = (DefaultListModel) namesList.getModel();
listModel.removeElementAt(index);
}

关于Java JList remove() 方法抛出 ArrayOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27758489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com