【问题标题】:Overriding JList's mutual exclusivity覆盖 JList 的互斥性
【发布时间】: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 以这种方式工作的原因。

标签: java swing jlist


【解决方案1】:

我使用 JCheckBox 作为 ListCellRenderer

那么也许您应该使用带有布尔值的单列JTable。每次单击单元格时都会切换复选框的状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2015-07-20
    相关资源
    最近更新 更多