2016-12-11 1 views
0

나는 slist라고 ObjectsArrayList이 제출해야ArrayList에서 항목을 제거하는 동안 JList에서 항목을 제거하는 방법은 무엇입니까?

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

(사용자가 뭔가를 제거 할 때 더는 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); 

에 인쇄되는 한 sitem하지만. 내가 것보다 Jlist 해당하는 slist 항목도 제거해야합니다. 어떻게 처리 할 지 단서가 없습니다.

+0

당신이'ListSelectionListener'를 사용하여 시도 유무 : 중요한 것은 main 방법에 이벤트 리스너 살펴 보는 것입니다? –

+0

참조 : http://stackoverflow.com/questions/41081170/how-to-add-items-from-an-arraylist-of-objects-to-a-jlist. 당신은 거기에 당신의 질문에 대한 답변을 가지고 아직 대답을 "수락하지 않았습니다". – camickr

+0

두 곳에서 데이터를 보유하지 마십시오. 대신 DefaultListModel에'Store' 객체를 추가하면됩니다. JList의 기본 렌더러는 객체가 렌더링 될 때 toString() 메서드를 자동으로 호출합니다. 따라서 기본적으로 ArrayList를 없애고 DefaultListModel을 사용하여 데이터를 보관합니다. – camickr

답변

0

getSelectedIndex()을 사용하여 JList 항목의 색인을 가져온 다음 해당 색인을 사용하여 ArrayList의 항목을 제거합니다. 아무것도 선택하지 않았 으면 getSelectedIndex()은 -1을 반환합니다.

0

목록에서 클릭 이벤트를 수신 한 다음 이벤트에서 선택한 인덱스를 가져와 이에 따라 목록을 수정해야합니다.

목록을 수정하면 다른 이벤트가 발생하고 첫 번째 이벤트 만 처리해야하므로 모델을 수정할 때 수신기를 제거해야하므로 조심해야합니다.

다음은 IDE에서 생성 한 메서드에 대해 너무 걱정하지 않아도되는 간단한 예제입니다.

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); 
     } 
    }); 
    } 
} 
관련 문제