2016-12-11 656 views
0

我有提交給美國的Objects一個ArrayList稱爲slist如何從ArrayList中刪除項目時從JList中刪除項目?

Store sitem1 = new Store("Movie", 20.00, 500, 0, 0.00); 

(不僅僅是一個sitem雖然。我已在sitemtoString被印刷到一個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項目。我不知道該怎麼做。

+0

您是否嘗試過使用'ListSelectionListener'? –

+0

請參閱:http://stackoverflow.com/questions/41081170/how-to-add-items-from-an-arraylist-of-objects-to-a-jlist。你在那裏得到了你的問題的答案,並且還沒有「接受」答案。 – camickr

+0

在兩個地方沒有數據。相反,您只需將「Store」對象添加到DefaultListModel。當呈現對象時,JList的默認渲染器將自動調用toString()方法。所以基本上擺脫ArrayList,並使用DefaultListModel來保存數據。 – camickr

回答

0

使用getSelectedIndex()獲取JList項目的索引,然後使用該索引刪除ArrayList中的項目。確保沒有選擇任何東西getSelectedIndex()將返回-1。

0

您需要監聽列表中的點擊事件,然後從事件中獲取選定的索引,並相應地修改您的列表。

您還需要小心,因爲修改列表會觸發另一個事件,並且您需要確保只處理第一個事件,因此在修改模型時需要刪除偵聽器。

下面是一個簡單的例子,可以給你這個想法不要太擔心我的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); 
     } 
    }); 
    } 
}