簡體   English   中英

當從ArrayList中刪除項目時,如何從JList中刪除項目?

[英]How do you remove an item from a JList while removing an Item from an ArrayList?

我有一個名為slistObjectsArrayList

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM