[英]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.