2

我有一个 JPanel,其中包含两个 JLists - 两者都可以在其中选择一个项目 - 正如预期的那样。

我想做的就是拥有它,以便在其中一个项目中只选择一个项目

任何人都可以帮助我吗

a)“嫁给”他们,这样就可以了

b)给我一些最佳实践的提示,以编写可以同时主持它们的侦听器,并在选择另一个时取消选择一个的所有元素-如果可能的话,我宁愿避免这种情况,因为我可以看到它变得丑陋!

谢谢 :)

4

2 回答 2

3

我认为,对于用户来说,最好的解决方案是在每个列表旁边放置一个带有类别标签的单选按钮,这样每次选择一个时,您都可以清楚地禁用另一个。

我可以想象用户单击第一个列表上的值,然后单击下一个并看到他单击的所有值都消失了,逻辑上的挫败感......

然后,当您从表单中获取值时,只需获取启用的值

于 2012-05-08T14:02:44.650 回答
3

听者写起来并不难也不难看。我会

  • 确保列表仅支持单选
  • 将相同的选择侦听器添加到两个列表的选择模型

这个监听器可以实现为

public void valueChanged(ListSelectionEvent e){
  if ( e.isAdjusting()) return;

  ListSelectionModel sourceSelectionModel = (ListSelectionModel) e.getSource();
  if ( !sourceSelectionModel.isSelectionEmpty() ){
    //still need to implement the findOtherSelectionModel method
    ListSelectionModel other = findOtherSelectionModel( sourceSelectionModel );
    other.clearSelection();
  }
}

请注意,清除选择将再次触发侦听器,但由于isSelectionEmpty检查,您不会以循环结束。另一种方法是在您调用另一个列表boolean之前禁用监听器(例如使用标志) 。clearSelection

于 2012-05-08T14:09:27.420 回答