【问题标题】:Toggling between specific items in a multi select JList在多选 JList 中的特定项目之间切换
【发布时间】:2015-05-07 00:37:08
【问题描述】:

我有一个扩展 JList 并使用 DefaultListModel 的类。

假设我有一个包含项目 A、B、C、D 等的列表。

我可以选择多个项目,但我希望它不能同时选择 A 和 B。所以我想要这样,如果我选择 A 然后 B,A 会被取消选择,反之亦然。

这可能吗?

编辑:添加初始实现

public TestList extends JList {
    public void TestList() {
        super(new DefaultModelList());
    }

    // Method 2
    public void addSelectionInterval(int anchor, int lead) {
        //DO Work
    }

    // Method 3
    public void setSelectedValue(Object obj, boolean shouldScroll) {
        // DO WORK
    }
}

TestList test = new TestList();
// Method 1
test.addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
        // check value selected and deselect if necessary
    }
}

我已经尝试过这些方法,但它们似乎都不起作用。当前的问题是当我选择一个项目时,据我所知,这些都没有运行。

【问题讨论】:

    标签: java jlist defaultlistmodel


    【解决方案1】:

    您需要使用自定义 ListSelectionModel 并覆盖 addSelectionInterval(...) 方法。

    如果选择符合您的特定要求,则此方法中的逻辑需要验证即将被选择的项目,然后再调用 super.addSelectionInterval(...)

    【讨论】:

    • 不幸的是,我可以使用 ListSelectionModel,因为更改会破坏很多代码。此外,addSelectionInvterval 确实无法获取即将被选中的项目。
    • @ghost013, I can use the ListSelectionModel because changing would break a lot of code 它不会破坏任何代码。 addSelectionInvterval does has no way of getting the item about to be selected.你认为参数代表什么?
    • 我已经尝试过您的方法,但无法正常工作。从调试中,当我在列表中选择一个项目时,据我所知,addSelectionInterval 没有被调用。
    • @ghost013, 1) 我不建议覆盖 JList,我建议创建自定义 ListSelectionModel。 2) 发布您的SSCCE 来证明问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2011-09-08
    • 2023-03-13
    相关资源
    最近更新 更多