![](/img/trans.png)
[英]Java JList AbstractListModel add remove method not working
[英]Java JList remove() method throws an ArrayOutOfBoundsException
我正在使用正确显示的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):
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的模型 (通常是DefaultListModel)中删除。 DefaultListModel类具有可以帮助您的removeElement(Object element)
和removeElementAt(int index)
方法。
IE中。
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.