如何清除Jlist

时间:2014-12-11 02:28:33

标签: java jlist

我有一个组合框,每次选择一个项目时,都会在面板上显示相应的JList,并且JList由文本文件填充。

我的问题是,当我在组合框中的不同项目之间进行选择时,如果前一个列表中有更多元素,比如3,而其他项目只有2,那么第三个项目将保留在列表中并且永远不会消失,除非其他列表包含至少相同数量的元素。

以下是我的代码。

JList list = new JList();

Path Aparts = Paths.get(".\src\assets\acurap.txt");

String[] partList = new String[50];

String temp2 = "";

teamComboBox.addItemListener(new ItemListener() {

@Override
public void itemStateChanged(ItemEvent arg0) {
    if (teamComboBox.getSelectedItem().equals("Acura")) {
        imageLabel.setIcon(acura);
        populatedAcurap();
    }  
}

void populatedAcurap() {
    InputStream input;

    try {
        input = new BufferedInputStream(Files.newInputStream(Aparts));

        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        int i = 0;
        temp2 = reader.readLine();
        while(temp2 != null) {
            partList[i] = temp2;
            list.setListData(partList);
            temp2 = reader.readLine();
            i++;
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

你的阅读方法到处都是......

  • 您不断阅读预先存在的数组,但是您永远不会删除任何内容...因此它包含旧数据......
  • 在不知道实际需要多少行的情况下读入数组是危险的......
  • 您没有关闭资源......

相反,从文件中读取每个元素并将其添加到新的ListModel,完成后,将模型应用到JList,例如......

void populatedAcurap() {
    try (BufferedReader reader = new BufferedReader(new FileReader(Files.newInputStream(Aparts)))) {
        String temp2 = null;
        DefaultListModel model = new DefaultListModel();
        while((temp2 = reader.readLine()) != null) {
            model.addElement(temp2);
        }
        list.setModel(model);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

有关详细信息,请查看: