这是我关于stackoverflow的第一个问题。我会尽力而为之前做过很多研究,但无法找到答案。
这是我的setip:
例如:
一个JFrame有两个JPanel,每两个JLists。
现在考虑组件的性质,我可以选择每个JList的1个项目。因为我每个组件有多个JLists,所以我基本上可以选择多个条目(或者在多个JLists中是正确的1个条目)。
我想要的是,在 JFrame 上,只有一个选定的项目作为一个整体。
有办法吗?
非常感谢你的帮助!
答案 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);