仅允许对多个JL列表进行单个选择

时间:2015-04-12 19:39:45

标签: java jlist

这是我关于stackoverflow的第一个问题。我会尽力而为之前做过很多研究,但无法找到答案。

这是我的setip:

  • 我在JPanel中有多个JLists
  • 我的JFrame中有多个JPanel

例如:

一个JFrame有两个JPanel,每两个JLists。

现在考虑组件的性质,我可以选择每个JList的1个项目。因为我每个组件有多个JLists,所以我基本上可以选择多个条目(或者在多个JLists中是正确的1个条目)。

我想要的是,在 JFrame 上,只有一个选定的项目作为一个整体。

有办法吗?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

即使您的部分是动态的,您仍然可以遍历框架中的所有JList。即使列表未直接添加到JFrame,也是如此。然后解决方案是创建一个ListSelectionListener迭代所有列表并在每个列表上调用list.clearSelection(),但触发选择事件的列表除外(可由ListSelectionEvent.getSource()确定

以下是ListSelectionListener实现的大致内容:

@Override
void valueChanged(ListSelectionEvent e) {
    for (JPanel section : frame.getSections()) {
        for (JList list : section.getLists()) {
            if (list != e.getSource()) {
                list.clearSelection();
            }
        }
    }
}

为了使其正常工作,必须在框架中注册所有JList的侦听器。由于列表可以动态更改,因此只要向框架添加新列表,您就需要调用JList.addListSelectionListener()。完成此操作的最简单方法取决于您的代码。希望您可以使用某种addSection方法,但如果其他方法都失败了,您可以随时将ComponentListener添加到放置这些节的容器中,并在其中搜索列表。每当将新部分添加到容器时,组件层次结构。

答案 1 :(得分:0)

我现在没有可用的IDE,或者我会发布一些示例代码

当你向你添加一个JList时,JPanel将它添加到Map中,使用JList的名称作为键,JList本身就是值。然后,当您在任何JList上选择一个项目时,请浏览其键不是您当前选定的JList的地图,并将所有选定的索引更改为-1。使用JList的setSelectedIndex()。

jlist1.setSelectedIndex(-1);