2016-12-11 285 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); 
     } 
    }); 
    } 
}