我正在尝试从数组列表中删除一个项目,方法是从JList中选择它并单击“删除”。
我到目前为止的代码,
buttondeleteContact.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (contactList.getSelectedIndex() != -1) {
people.removeElementAt(contactList.getSelectedIndex());
People.remove(contactList.getSelectedIndex());
System.out.println(People);
}
});
我知道有些东西的名字很差,但是人(小写的p)是我的DefaultListModel的名字而People(大写的P)是我的ArrayList的名字。基本上,我只想从数组中删除4行的块。那么,数组中的位置,以及它之后的3。
答案 0 :(得分:9)
虽然List
和ArrayList
没有直接(且可访问)removeRange()
方法,但通过提供subList()
方法可以消除对此类方法的需求。
subList()
提供原始列表的一部分视图。需要注意的重要部分是修改返回的List
也会修改原始List
。因此,要删除索引为index
到index+3
的元素,您可以执行以下操作:
myList.subList(index, index+4).clear();
请注意,subList()
的第二个参数是独占的,因此此subList()
调用将返回大小为4的List
。
答案 1 :(得分:4)
这是一个奇怪的要求。之后删除3个项目?它们如何相互关联?他们必须以某种方式相互关联。听起来你有一个如下所示的联系人列表:
List<String> contacts = new ArrayList<String>();
contacts.add("John Doe");
contacts.add("Main street 1"); // His street.
contacts.add("New York"); // His city.
contacts.add("555 123 456 789"); // His phone.
// etc..
这是真的吗?那么你应该考虑将相关元素分组到另一个真实世界中表示对象。您可以创建一个如下所示的Javabean类Contact
:
public class Contact {
private String name;
private String street;
private String city; // You could consider another Address class for street and city as well.
private String phone;
// Add/generate getters and setters.
public Contact() {
// Keep default constructor alive.
}
public Contact(String name, String street, String city, String phone) {
this.name = name;
this.street = street;
this.city = city;
this.phone = phone;
}
}
这样你最终会得到
List<Contact> contacts = new ArrayList<Contact>();
contacts.add(new Contact("John Doe", "Main Street 1", "New York", "555 123 456 789"));
// etc..
这样您就可以按索引删除单个真实 Contact
。
您甚至可以将其设为People
:
public class People {
private List<Contact> contacts;
// +getter +setter
}
试着想想OO。
答案 2 :(得分:1)
Joachim的回答提供了直接从ArrayList
删除的好方法,但我怀疑你真的想直接从模型中删除范围。 DefaultListModel
有一个removeRange
方法:
int index = contactList.getSelectedIndex();
people.removeRange(index, index + 4);
我希望它具有正确的行为,也可以从基础列表中删除项目。假设情况就是这样,那我怀疑这是最好的方式。再说一遍,我不太了解Swing:)
答案 3 :(得分:1)
尝试,
people.subList(index, index+4).clear()