【问题标题】:JList: previous selected itemJList:上一个选择的项目
【发布时间】:2012-02-29 18:02:49
【问题描述】:

我有一个 JList 并注册了一个选择处理程序 (ListSelectionListener)。 现在我需要之前选择的项目/索引。

到目前为止,我自己保存最后选择的项目。有更好的方法吗? 换句话说:有没有我多年来怀念的方法/最佳实践?!

【问题讨论】:

  • “我现在需要之前选择的项目/索引。” 为什么?
  • "我自己保存最后选择的项目" - 这就是要走的路:它在数据域中肯定有一些意义,目前将它设置在那里域有知识 :-)
  • @Andrew Thompson:有趣的问题!所选项目有一些可修改的字段(对话框中的其他字段)。如果用户选择一个新项目。数据应该存储到最后一项中。
  • 对于“selectedIndex/Value”的某处听起来非常脆弱;-)
  • 为什么?你有更好的主意吗?

标签: java swing jlist selectionchanged


【解决方案1】:

我的清单之一是单选。就像克娄巴特拉说的。事件数据在这里没有帮助。

克利奥帕特拉不是这么说的。事件数据确实有帮助。您不能假设第一个索引代表选定的行,而最后一个索引代表上一行。

正如 Kleopatra 建议的那样,您需要做进一步的检查。比如:

public void valueChanged(ListSelectionEvent e)
{
    JList list = (JList)e.getSource();
    int selected = list.getSelectedIndex();
    int previous = selected == e.getFirstIndex() ? e.getLastIndex() : e.getFirstIndex();

    System.out.println();
    System.out.println("Selected:" + selected);
    System.out.println("Previous:" + previous);
}

【讨论】:

  • 嗯对我来说看起来有点尴尬,但似乎是一个合适的解决方案。(对于单选模式)不过我认为 Oracle 的 Java 专家应该致力于此。
  • 啊!谢谢你。我以为 e.getFirstIndex() == list.getSelectedIndex(),但事实并非如此! API 根本不清楚 First/Last 应该是什么。
【解决方案2】:

您无需编写自定义代码即可将先前选定的项目存储在列表中。 JList 提供了一个 ListSelectionListener 它将为您完成工作。 这是获取最后选择的项目的方法。

 customList.addListSelectionListener(new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent arg0) {
             // TODO Auto-generated method stub

                         //Previous Selected Item index will be obtained by arg0.getFirstIndex()
                       // Similarly Currently Selected Item index will be obtained by this method arg0.getLastIndex()



        }
    });

【讨论】:

  • 这不是真的 - 第一个/最后一个是发生变化的范围的边界。仅适用于单一选择模式和模型的一个很好的实现(又名:它使通知范围尽可能小)其中一个是旧的,另一个是新的选择 - 但你不知道哪个是哪个(不是没有进一步检查他们的选择状态:)
  • 我认为它在单选模型中可以正常工作..因为它会给出最后一个元素和当前选定的元素
  • 不,事实并非如此(阅读 api 文档和/或编写并运行一个小示例)
  • 我已经看过 api 文档并实现了一个小程序,它运行良好......这就是我在这里发布这段代码的原因
  • “返回选择可能已更改的第一行的索引。getFirstIndex()”的哪一部分让你认为firstIndex没有被选中?
猜你喜欢
  • 2011-09-08
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2011-02-01
  • 2016-04-02
  • 1970-01-01
  • 2016-11-25
相关资源
最近更新 更多