【问题标题】:Issue in removing element from JList从 JList 中删除元素的问题
【发布时间】:2013-01-26 19:24:15
【问题描述】:

我在从 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

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing jlist


【解决方案1】:

您可以通过在构造函数中传递Vector 或使用setListData 方法将元素添加到列表中,但这不是最好的方法。

您通常希望使用ListModel 实现,例如DefaultListModel。它定义了处理数据的方法(addElementremoveElement、...)。

您可以通过仅向服务器查询已删除元素而不获取所有数据来减少服务器和客户端之间交换的数据量。

更新:现在我看到您正在使用模型。 JList 模型的默认实现不是 DefaultListModel 类型。您可以在JList 构造函数中设置模型,当您在开始时实例化您的JList

DefaultListModel model = new DefaultListModel();
JList list = new JList(model);

不要再次实例化它,你只需要这样做一次。然后,您可以使用您发布的代码,但您不必在删除元素后调用setModel() 方法。

【讨论】:

  • 我不想构造一个新的 JList,我想获取现有列表的模型以便从中删除元素,但是当我这样做时会发生类转换异常!跨度>
  • 在开始实例化 JList 时,在构造函数中使用 DefaultListModel 实例化它。我从来没有告诉过你在更新时要构建一个新的。
  • 我在乞求时用向量构造它,是否必须用DefaultListModel构造它,换句话说,如何从最初用向量构造的JList中删除元素?
  • 如果您真的想这样做,那么您将不得不使用更新的 Vector 作为参数调用 list.setListData。但是,我建议您使用我在回答中提到的方法。将数据添加到 DefaultListModel 并从那里删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多