我在从JList中删除元素时遇到问题,我的应用程序是客户端服务器应用程序,客户端有JList(视图)。服务器以向量的形式具有JList的实际数据。当客户端上发生某种操作时,服务器必须从向量中删除一个元素,然后更新客户端上的视图。我尝试从服务器中删除后获取向量,然后构造一个新的JList,然后在视图中设置它,但不会发生更新。
有哪些方法可以做到这一点?
注意:我使用了类似的DefaultListModel:
DefaultListModel model=(DefaultListModel)myList.getModel();
model.removeElement(myElement);
myList.setModel(model);
但它在运行时给出了ClassCastException,它表示javax.swing.JList cannot be cast to javax.swing.DefaultListModel
答案 0 :(得分:2)
您可以通过在构造函数中使用Vector
或使用setListData
方法将元素添加到列表中,但这不是最好的方法。
您通常希望使用ListModel
实施,例如DefaultListModel
。它定义了处理数据的方法(addElement
,removeElement
,...)。
您可以通过仅向服务器查询已删除的元素而不是获取所有数据来减少服务器与客户端之间交换的数据量。
更新:现在我看到您正在使用模型。 JList
模型的默认实现不是DefaultListModel
类型。当您在开头实例化JList
时,可以在JList
构造函数中设置模型。
DefaultListModel model = new DefaultListModel();
JList list = new JList(model);
不要再次实例化,只需要执行一次。然后,您可以使用您发布的代码,但删除元素后不必调用setModel()
方法。