只允许对多个 JList 进行一次选择

Only allow a single selection over multiple JLists

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

这是我的设置:

例如像这样:

一个 JFrame 有十二个 JPanel,每两个 JList。

现在考虑到组件的性质,我可以 select 每个 JList 的 1 个项目。由于我每个组件都有多个 JList,所以我基本上可以 select 多个条目(或者在多个 JList 中正确的 1 个条目)。

我想要的是,在JFrame上,整个项目只能一个selected。

有办法吗?

非常感谢您的帮助!

即使您的部分是动态的,您仍然可以遍历框架中的所有 JList。即使列表没有直接添加到 JFrame,也是如此。然后解决方案是在每个上创建一个 ListSelectionListener that iterates over all of the lists and calls 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() whenever a new list is added to the frame. The easiest way accomplish this depends on your code. Hopefully you have some sort of addSection method that you can tack on to, but if all else fails, you can always add a ComponentListener 将这些部分放入的任何容器,并在将新部分添加到容器时在组件层次结构中搜索列表。

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

在将 JList 添加到 JPanel 时,将其添加到 Map,使用 JList 的名称作为键,JList 本身就是值。然后,当您 select 任何 JList 上的项目时,通过映射其键不是您当前 selected JList 并将其所有 selected 索引更改为 -1。使用 JList 的 setSelectedIndex()。

jlist1.setSelectedIndex(-1);