Java Swing - 使两个JLists成为“兄弟姐妹” - 即只能选择其中一个项目

时间:2012-05-08 13:47:47

标签: java swing jpanel jlist listeners

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

我希望能够做的就是选择其中一个项目

任何人都可以帮助我

a)“嫁给”他们所以情况就是这样

b)给我一些关于编写听众的最佳实践的建议,这些听众可以主持他们两个并在选择另一个时取消选择一个元素 - 如果可能的话我宁愿避免这个,因为我可以看到它变得丑陋!!

谢谢:)

2 个答案:

答案 0 :(得分:3)

我认为同样适合用户的最佳解决方案是在每个列表旁边添加一个带有类别标签的单选按钮,因此每次选择一个时都会禁用另一个。

我可以想象用户点击第一个列表中的值,然后点击下一个列表,看到他点击的所有值都消失了,逻辑沮丧......

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

答案 1 :(得分: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标志)。