JList 所选的元素无法删除 Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0
由于在做socket在线聊天室,初次使用JList作为在线用户列表。虽然有很多不懂的,都是靠API完成的。昨天因为JList遇到了一些问题,影响了项目的进度。自己也参考了很多其他人的解决方案,但是和我的问题终究不同,以下是我的代码。
package com.socket.homework; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.*; public class test { JFrame frame; JButton delete; DefaultListModel model; JList list; public static void main(String args[]){ new test().createUI(); } public void createUI(){ frame = new JFrame("Test JList"); delete = new JButton("删除"); model = new DefaultListModel(); list = new JList(model); String datas[] = {"aaa","bbb","ccc","ddd","eee","fff","ggg"}; list.setListData(datas); //错误做法 /* //正确做法 for(String data:datas){ model.addElement(data); }*/ delete.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { Object values[] = list.getSelectedValues(); for(Object value:values){ model.removeElement(value); } } }); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(delete,"North"); frame.add(list,"Center"); frame.pack(); frame.setVisible(true); } }
我之前是直接使用JList来添加数据,但是在删除的时候,使用DefaultListModel来删除。原因是:数组越界,DefaultListModel中的size为0,而所要删除的下标是1(list.getSelectedIndex())。修改之后,就可以删除一个或多个元素了。