【发布时间】:2016-01-05 11:35:02
【问题描述】:
出于某种原因,即使JList 默认情况下是一个多选列表,当您单击另一个选项时,您之前单击的所有选项都会被删除。另外,由于某种原因,必须按住 Ctrl 并单击,才能进行 otherSelection
我试图通过自定义ListModel 来覆盖这一点,其中存储了selectedIndices,并将MouseListener 添加到我的JList 中,激活后会将list.getSelectedIndices() 附加到listModel.selectedIndices。然而,这种方法有一个意想不到的问题:在对我的解决方案进行压力测试时(我确定在继续之前我已经解决了所有不可避免的编程错误!),我发现,例如,我可以有第二个列表选项被选中,但单击第一个,list.getSelectedIndices() 将返回第二个选项的索引(因此,我的算法将失败)。
有没有什么方法可以让每次点击都将点击列表选项的索引添加(或删除)到list.getSelectedIndices(),而无需我的解决方法?
Here 是用于测试的 JAR 文件(DEBUG == true 因此可以从命令行看到调试输出)。
【问题讨论】:
-
好的,我遇到的直接问题是它与普通用户的体验相矛盾。例如,在 Windows 资源管理器/Finder 中尝试。要进行多项选择,请使用
或 的组合。关于我能想到的唯一解决方案是替换 Look and Feel 委托...... -
我使用
JCheckBox作为ListCellRenderer -
完全同意 MadProgrammer 的评论。此外不要忘记,对于正确的 UI,用户应该能够使用鼠标或键盘。当使用箭头键时,选择被清除并选择行。如果按住 shift 键,则选择范围扩大。如果您按住 ctrl 键,您只需向上/或向下移动而不更改选择。要添加选择,请使用 Ctrl+Space。这也是 MS 应用程序的明确定义的行为,这也是 Swing 以这种方式工作的原因。