如何在 Java Eclipse 中使用 ArrayList 更改 DefaultListModel

How to change DeafultListModel with ArrayList in Java Eclipse

我正在构建一个聊天室,但现在我在将用户添加到列表并使用它在程序之外呈现用户名时遇到了问题(这样每个人都可以看到当时谁连接到了聊天室)。

实际上,当我使用 DeafultListModel 时,我对此没有任何问题,它看起来像这样

 public void updateUsers(Vector v)
   {
      DefaultListModel<String> listModel = new DefaultListModel();
      if (v != null)
         for (int i = 0; i < v.size(); i++)
         {

            try
            {
               String tmp = ((ChatClientInt) v.get(i)).getName();
               listModel.addElement(tmp);
            }
            catch (Exception e)
            {
               e.printStackTrace();
            }

         }
      lst.setModel(listModel);
   }

这个有效。

但是,我在尝试用 ArrayList 替换 Vector 时遇到问题。我不确定如何替换最后一行代码。

lst.setModel(listModel);

这是我的 ArrayList 尝试:

   public void updateUsers(ArrayList<ChatClientInterface> v)
   {
      ArrayList<String> listModel = new ArrayList<String>();
      if (v != null)
         for (int i = 0; i < v.size(); i++)
         {

            try
            {
               String tmp = ((ChatClientInterface) v.get(i)).getName();
               listModel.add(tmp);
            }
            catch (Exception e)
            {
               e.printStackTrace();
            }

         }

   }

JList.setModel() 需要 ListModel 的实现。因此,您必须将 listModel 对象保留为 DefaultListModel 类型。 参见:https://docs.oracle.com/javase/7/docs/api/javax/swing/JList.html#setModel(javax.swing.ListModel)

public void updateUsers(ArrayList<ChatClientInterface> v)
 {
   DefaultListModel<String> listModel = new DefaultListModel();
  if (v != null)
     for (int i = 0; i < v.size(); i++)
     {

        try
        {
           String tmp = ((ChatClientInterface) v.get(i)).getName();
           listModel.addElement(tmp);
        }
        catch (Exception e)
        {
           e.printStackTrace();
        }

     }
  lst.setModel(listModel);
}