簡體   English   中英

使用ListModel作為模型類型從JList中刪除項目

[英]Removing an item from the JList using ListModel as model type

我有使用ListModel而不是DefaultListModel的JList 我現在不想改變類型,因為我在很多地方使用它。 我想從同一列表中刪除所選項目。 我該怎么做呢? 我使用以下代碼,但它不適合我。

made_list.removeSelectionInterval(
    made_list.getSelectedIndex(), made_list.getSelectedIndex());

- 編輯 -

我在創建列表時使用以下代碼:

made_list = new javax.swing.JList();   
made_list.setModel(new DefaultListModel());

然后在JButton鼠標點擊事件中,當按下按鈕時,我使用以下代碼從列表中刪除所選項目

private void removeActionPerformed(java.awt.event.ActionEvent evt) {                                       
    //made_list.removeSelectionInterval(made_list.getSelectedIndex(), 
    //made_list.getSelectedIndex());  
    System.out.println(made_list.getModel());  
    DefaultListModel model = (DefaultListModel)made_list.getModel();  
    model.remove(1);  
}

removeSelectionInterval除了選擇間隔之外,不會從模型或列表中刪除任何內容。 列表項保持不受影響。 我擔心你要么必須擴展你的ListModel並給它一個removeItem(...)方法以及監聽器和激活通知器等的能力......一個la AbstractListModel - 相當多工作的! 如果這是我的錢,我會走簡單的路線,只需使用DefaultListModel作為我的模型,因為這樣做更安全,更容易,並且將花費更少的時間。 我知道你聲明你不想使用這些,但我認為你會發現它比你的潛在替代品容易得多。

SSCCE的一個例子是這樣的:

import java.awt.event.*;
import javax.swing.*;

public class Foo1 {
   private String[] elements = {"Monday", "Tueday", "Wednesday"};
   private javax.swing.JList made_list = new javax.swing.JList();

   public Foo1() {
      made_list.setModel(new DefaultListModel());
      for (String element : elements) {
         ((DefaultListModel) made_list.getModel()).addElement(element);
      }

      JButton removeItemBtn = new JButton("Remove Item");
      removeItemBtn.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
            removeActionPerformed(e);
         }
      });

      JPanel panel = new JPanel();
      panel.add(new JScrollPane(made_list));
      panel.add(removeItemBtn);

      JOptionPane.showMessageDialog(null, panel);
   }

   private void removeActionPerformed(ActionEvent e) {
      System.out.println("made_list's model: " + made_list.getModel());
      System.out.println("Model from a fresh JList: " + new JList().getModel());
      DefaultListModel model = (DefaultListModel) made_list.getModel();
      if (model.size() > 0) {
         model.remove(0);
      }
   }

   public static void main(String[] args) {
      new Foo1();
   }

}

您已經獲得了過去Swing教程不同部分的鏈接,以幫助解決問題。 這是有原因的。 它有助於解決您當前的問題。 它為您提供未來問題的參考。

您需要做的就是查看Swing教程的目錄,您將找到有關“如何使用列表”的部分,其中有一個工作示例,用於添加/刪除列表中的項目。 請先閱讀教程。

或者,如果您不記得如何找到Swing教程,那么請閱讀JList API,您將在其中找到指向同一教程的鏈接。

//First added  item into the list
DefaultListModel dlm1=new DefaultListModel();

listLeft.setModel(dlm1);

dlm1.addElement("A");
dlm1.addElement("B");
dlm1.addElement("C");

// Removeing element from list
Object[] temp=listRight.getSelectedValues();
if(temp.length>0)
{
for(int i=0;i<temp.length;i++)
{

  dlm1.removeElement(temp[i]);

}
}                   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM