Java 为什么JList需要一组整数时使用int[]来选择索引?

Java 为什么JList需要一组整数时使用int[]来选择索引?,java,swing,Java,Swing,JList声明了一个方法:public void setselecteddincessint[]索引 根据Oracle的文档更改: 所选内容是给定数组指定的索引集 我知道集合不能将基元int作为泛型类型 如何检索我要选择的索引? 现在,我使用一个集合,循环遍历行,当选择一行时,将其添加到集合中 但是,我必须将集合转换为int[],并且没有内置函数来实现这一点。我已经知道怎么翻译了 使用公共void setselecteddincessint[]索引的人是否必须开发自己的转换器或使用Guava或A

JList声明了一个方法:public void setselecteddincessint[]索引

根据Oracle的文档更改:

所选内容是给定数组指定的索引集

我知道集合不能将基元int作为泛型类型

如何检索我要选择的索引? 现在,我使用一个集合,循环遍历行,当选择一行时,将其添加到集合中

但是,我必须将集合转换为int[],并且没有内置函数来实现这一点。我已经知道怎么翻译了

使用公共void setselecteddincessint[]索引的人是否必须开发自己的转换器或使用Guava或Apache的转换器

这似乎是Swing的一个缺陷。这个方法不能获取集合甚至列表,有什么原因吗

或者有没有一种方法可以创建一组我不知道的原语

如果该方法以一个集合作为参数,对每个开发人员来说不是更好吗?为什么不是这样?

您可以使用SelectionModel作为解决方案:

Set<Integer> indices = ...
...
myList.getSelectionModel().clearSelection()
for( Integer index : indices) {
    myList.getSelectionModel().addSelectionInterval(index, index);
}

Swing自Java1.2开始提供,早于Java1.5中引入的泛型。在此期间,在Swing中添加了泛型,其好处大于导致向后不兼容的风险。例如,自Java1.7以来,它本身就是JList。由于这是一种方便的方法,可以清除选择,然后在选择模型上使用addSelectionInterval添加索引,因此您可以根据需要重载该方法,为清晰起见,可以省略范围检查:

private static class MyList extends JList {

    public void setSelectedIndices(Set<Integer> indices) {
        ListSelectionModel model = getSelectionModel();
        model.clearSelection();
        for (Integer index : indices) {
            model.addSelectionInterval(index, index);
        }
    }

@Tom的可能重复:这个问题专门询问Swing中是否存在缺陷。我已经知道如何将集合转换为数组。我想知道的是,为什么这个特定的方法只要求用户进行java标准中没有的转换,却采用了一个原始int数组。为什么不重载SetSelectedDices。@垃圾神:为此创建一个继承JList的类?是的,这可能是我将使用的解决方案。虽然这是一种可行的方法,但我更喜欢可重用的解决方案。我不想每次需要设置索引时都编写for循环。无论如何,谢谢你的回答:
private static class MyList extends JList {

    public void setSelectedIndices(Set<Integer> indices) {
        ListSelectionModel model = getSelectionModel();
        model.clearSelection();
        for (Integer index : indices) {
            model.addSelectionInterval(index, index);
        }
    }