[英]How do you remove an item from a JList while removing an Item from an ArrayList?
我有一个名为slist
的Objects
的ArrayList
Store sitem1 = new Store("Movie", 20.00, 500, 0, 0.00);
(不过,不仅仅是一个sitem
。我将sitem
toString
打印到JList中。
for (int i = 0; i < customer.slist.size(); i++) {
dlm.addElement(customer.slist.get(i).toString());//slist is an array of objects.
}
checkOutList.setModel(dlm);
当用户从Jlist
删除某些内容时,我也需要删除相应的slist
Item。 我不知道如何去做。
通过使用getSelectedIndex()
获取JList项目的索引,然后使用该索引在ArrayList中删除该项目。 确保如果未选择任何内容,则getSelectedIndex()
将返回-1。
您需要侦听列表中的click事件,然后从该事件中获取选定的索引,并相应地修改列表。
您还需要小心,因为修改列表将触发另一个事件,并且需要确保仅处理第一个事件,因此在修改模型时需要删除侦听器。
这是一个简单的示例,将使您有一个想法:不要太担心我的IDE生成的initComponents()
方法。 关键是要在main
方法中查看事件侦听器:
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class TestJFrame extends javax.swing.JFrame {
public TestJFrame() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
final DefaultListModel dlm = new DefaultListModel();
final List<String> items = new ArrayList<String>();
items.add("apple");
items.add("pear");
items.add("banana");
for (String item : items) {
dlm.addElement(item);
}
final JList checkOutList = new JList(dlm);
checkOutList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
checkOutList
.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getFirstIndex() != -1 && !e.getValueIsAdjusting()) {
int firstIndex = e.getFirstIndex();
checkOutList.removeListSelectionListener(this);
checkOutList.clearSelection();
dlm.remove(firstIndex);
items.remove(firstIndex);
checkOutList.addListSelectionListener(this);
}
}
}
);
TestJFrame frame = new TestJFrame();
frame.setSize(200, 200);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setSize(200,200);
panel.add(checkOutList);
frame.add(panel);
checkOutList.setSize(200, 200);
frame.setVisible(true);
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.