Java 如何在一个JList中组合2个向量?

Java 如何在一个JList中组合2个向量?,java,vector,jlist,Java,Vector,Jlist,…但这只选择了selectedProducts中的最后一个元素 你能帮我把它做好吗?在调试你的第一次尝试时(看起来应该可以,你的IntIndicates数组的内容是什么?因为看起来应该可以,假设你的数组转换可以工作) 但是,由于selectedproducts保证的项目数少于总数,因此您可能希望对其进行迭代 JList prdList = new JList(totalProducts); for(String tName : totalProducts) {

…但这只选择了selectedProducts中的最后一个元素


你能帮我把它做好吗?

在调试你的第一次尝试时(看起来应该可以,你的IntIndicates数组的内容是什么?因为看起来应该可以,假设你的数组转换可以工作)

但是,由于
selectedproducts
保证的项目数少于总数,因此您可能希望对其进行迭代

    JList prdList = new JList(totalProducts);
    for(String tName : totalProducts)
    {
        for(String sName : selectedProducts)
        {
            if(totalProducts.contains(sName)) prdList.setSelectedValue(sName, false);
        }
    }
List index=new ArrayList(selectedProducts.size());
for(字符串名称:selectedProducts)
{
int index=totalProducts.indexOf(名称);
如果(索引!=-1)
索引。添加(索引);
}
尽管如此,由于
indexOf
是一个通过列表的线性搜索,它可能不会有太大的区别

至于您的第二次尝试,ListSelectionModel具有添加所选索引的方法(
addSelectionInterval(int index0,int index1)
) ,您使用的是设置(覆盖)选择的选项

旁白:您可能希望使用
List
而不是
Vector
,因为Vector有很多不必要的同步开销。除非您需要同步


编辑固定复制+粘贴添加(i)和添加(索引)

您选择所有项目的尝试会这样做,因为您正在迭代每个项目,如果selectedProducts列表中的任何项目在total列表中,则会将迭代项目的索引添加到最终选择列表中。尝试将循环更改为以下内容:

List<Integer> indices = new ArrayList<Integer>(selectedProducts.size());    
for(String name : selectedProducts)
{
    int index = totalProducts.indexOf(name);
    if (index != -1)
        indices.add(index);        
}
for(int i=0;i
intindicates是转换为int的对象。转换是正确的。您在此处提供的代码不起作用。它总是选择JList的前n个元素,其中n是所选产品的元素数。如果我在所选产品中有3个元素,则将在Jlis中选择totalProducts的前3个元素t、 至于列表,你指的是ArrayList?因为据我所知,列表不能有参数(比如)。我在ArrayList上使用向量,因为我不能从ArrayList生成JLList,只能从向量生成。默认构造函数可能不允许列表(在添加泛型集合之前出于向后兼容性的原因),但您可以轻松实现自己的ListModel。List当然允许使用泛型参数,因为它只是一个接口:现在您的代码也可以使用了。谢谢!关于JList构造函数,以及关于List允许泛型参数,您是对的,因为它是由文档生成的。但无需任何修改,只需使用
列表索引=新建ArrayList(selectedProducts.size());
在eclipse中给我一个错误:线程“main”中出现异常java.lang.Error:未解决的编译问题:类型列表不是泛型的;它不能用参数参数化。您是否也导入java.awt.*了?如果是这样,那么列表的awt版本可能就是其抱怨的原因?尝试添加
import java.util.List
;作为上次导入?它现在可以工作了。我知道第一次尝试选择的原因所有项目,我只是写了一个起点。谢谢!
    JList prdList = new JList(totalProducts);
    for(String tName : totalProducts)
    {
        for(String sName : selectedProducts)
        {
            if(totalProducts.contains(sName)) prdList.setSelectedValue(sName, false);
        }
    }
List<Integer> indices = new ArrayList<Integer>(selectedProducts.size());    
for(String name : selectedProducts)
{
    int index = totalProducts.indexOf(name);
    if (index != -1)
        indices.add(index);        
}
for(int i = 0; i < totalProducts.size(); i++)
{
    String name = totalProducts.get(i);
    if(selectedProducts.contains(name)) indices.add(i);
}