2016-12-11 15 views
0

私は、ユーザーから何かを削除する場合はJListのArrayListから項目を削除しているときに、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); 

に印刷されているsitemtoStringを持っている。

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

ちょうど1 sitemより(詳細に提出slistと呼ばれるObjectsArrayListを持っていますJlist対応するslistアイテムも削除する必要がありますが、私はそれを行う方法がわかりません。

+0

'ListSelectionListener'を使ってみましたか? –

+0

参照:http://stackoverflow.com/questions/41081170/how-to-add-items-from-an-arraylist-of-objects-to-a-jlistあなたはあなたの質問に対する答えを得て、答えをまだ "受け入れていません"。 – camickr

+0

データを2か所に持たないでください。代わりに '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); 
     } 
    }); 
    } 
} 
関連する問題