2013-06-19 29 views
1

我有一個JList。 我想刪除已經選定的值,每當我按ALT +鼠標點擊列表上的同一時間。怎麼做?我不知道使用哪個聽衆。刪除JList上的選定元素,同時ALT +點擊

問題是,當我選擇了值並再次單擊列表時,舊選擇丟失,選擇了新項目。

我所做的:

 list.addMouseListener(new MouseListener() { 

     ... 

      @Override 
      public void mousePressed(MouseEvent e) { 
       System.out.println(e); 
       int[] selected = list.getSelectedIndices();  
       if(selected.length > 0 && (e.getModifiers() & InputEvent.ALT_MASK) == InputEvent.ALT_MASK){ 
        System.out.println("tu "); 
        for(int i: selected){ 
         model.remove(i); 
        } 
       } 

      } 
.... 
} 

但問題是,只有一個元素被刪除。這一點我點擊

+1

爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org) –

+2

您可能會遇到索引問題。假設你已經選擇了物品1,3和5.你刪除物品1 - >物品3和5,現在變成物品2和4,但你要求刪除物品3(實際上將刪除原來的物品4),最終你請求刪除第5項(實際上將是原始項目7)。考慮首先獲取所有對象,然後通過實例而不是索引來刪除它們,或者按相反順序排序這些指針,並通過索引刪除它們。 –

+1

還要確保在觸發器被觸發之前,您的ALT鼠標單擊不會改變選擇... – Robin

回答

2

問題是,當我已經選擇的值,然後再次單擊列表舊選擇丟失,新項目被選中。

Alt + mousePressed用於更改選擇。這是Alt鍵的常用用法。嘗試在任何應用程序(即Windows資源管理器)上使用此組合鍵來查看它的工作原理。

所以更好的實現可能是使用不同的鼠標+鍵組合。我不確定標準是什麼,但我會建議,也許只是「刪除」鍵可以用於刪除選定的項目。當然,你應該彈出一個確認對話框。對於使用鼠標,我會使用一個彈出式菜單來顯示右鍵單擊,菜單將包含一個刪除操作。應再次顯示確認對話框。

還記得任何時候你建立一個應用程序,用戶應該能夠使用鍵盤或鼠標來實現一個行動。