Java JList中带有ActionListener的ArrayIndexOutOfBoundsException
我看了其他看起来与我有关的问题,但它们并没有“解决”我的问题。我收到ArrayIndexOutOfBoundsException,我正在处理的代码是删除JList中名为contactList的“联系人” 我已经实现了一个按钮,可以简单地删除联系人列表中的“联系人”。程序应该做的是,如果按钮删除“广播”,这是联系人列表中的第一个元素,将通过输出显示消息返回错误。否则,只需将联系人从联系人列表中删除即可 我现在遇到的问题是,在删除联系人时,它会产生arrayIndexOutOfBoundsException。不仅如此,它还从另一个if语句打印出错误行。删除广播将输出错误消息,但仍显示arraryIndexOutOfBoundsException 另外,我不确定我是否正确地执行了第一个if语句。 我在开始时已经包括了必要的代码,以及测试代码后出现的错误Java JList中带有ActionListener的ArrayIndexOutOfBoundsException,java,swing,actionlistener,indexoutofboundsexception,jlist,Java,Swing,Actionlistener,Indexoutofboundsexception,Jlist,我看了其他看起来与我有关的问题,但它们并没有“解决”我的问题。我收到ArrayIndexOutOfBoundsException,我正在处理的代码是删除JList中名为contactList的“联系人” 我已经实现了一个按钮,可以简单地删除联系人列表中的“联系人”。程序应该做的是,如果按钮删除“广播”,这是联系人列表中的第一个元素,将通过输出显示消息返回错误。否则,只需将联系人从联系人列表中删除即可 我现在遇到的问题是,在删除联系人时,它会产生arrayIndexOutOfBoundsExcep
private JList<String> listContacts;
listContacts = new JList<String>(controller.getContacts());
// gets contact list from controller class which gets contact list from client class.
private JButton btDeleteUser;
JButton deleteUser = new JButton("Delete User");
deleteUser.addActionListener(new MyButtonListener5());
class MyButtonListener5 implements ActionListener{
public void actionPerformed(ActionEvent e){
DefaultListModel<String> list = (DefaultListModel)(listContacts.getModel());
String contact = listContacts.getSelectedValue();
int j = -1;
for(int i = list.getSize()-1; i >= 0; i--){
if(list.getElementAt(i).equals("Broadcast")){
controller.displayMsg("[ERROR] You cannot delete broadcast\n");
}
else if(list.getElementAt(i).equals(contact) && i != j){
j = i;
}
}
if(j != -1){
(DefaultListModel)list.remove(j);
}
}
}
基本知识:
如果JList中有5个元素,那么最后一个元素的索引将是4,列表的大小将是5
问题:
for(int i = 0; i <= list.getSize(); i++){
用于(int i=0;i基本:
如果JList中有5个元素,那么最后一个元素的索引将是4,列表的大小将是5
问题:
for(int i = 0; i <= list.getSize(); i++){
用于(int i=0;i)您可以在迭代时更改列表。记住您要删除的项目,并在迭代之外将其删除。您是说我应该让它创建一个新的JList并将新联系人放入其中?否,但当您删除该项目并继续迭代时,列表中项目的索引与以前不同。您可以可以避免这种情况,例如,只需计算迭代期间要删除的元素并在之后删除它。所以您是说,在找到它所在的索引之后,我应该删除该项?准确地,计算循环中的索引,并在循环中移除在循环外的元素,同时遍历列表。记住您想要的项o在迭代之外删除并删除它。你是说我应该让它创建一个新的JList并将新联系人放在其中吗?不,但是当你删除该项然后继续迭代时,列表中的项的索引与以前不同。例如,你可以通过计算迭代期间要删除的元素来避免这种情况打开,然后删除它。你是说我应该在找到它所在的索引后删除该项?确切地说,计算循环中的索引并删除循环外的元素。我修改了它,但我仍然得到与删除联系人有关的错误。@whu解决该问题的方法是向后迭代数组。使用for(int i=list.getSize()-1;i>=0;i--){
作为for循环我再次修改了它,但仍然得到相同的错误。我修改了它,仍然得到与删除联系人有关的错误。@whu解决该问题的方法是向后迭代数组。使用for(int i=list.getSize())-1;i>=0;i--){
作为for循环,我再次修改了它,但仍然得到相同的错误。