2014-12-11 89 views
0

我有一个组合框,每一个项目被选中的时候,都有一个对应的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

不仅缩进错了,你没有关注Java编码惯例Ë ither。你可以在这里阅读更多http://en.wikipedia.org/wiki/Indent_style#K.26R_style一下吧。 – Emz 2014-12-11 02:32:00

+1

列表模式设置为一个新的空模型... – MadProgrammer 2014-12-11 02:33:48

回答

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(); 
    } 
} 

有关详细信息,看看:

+0

谢谢你这么多。对不起,我是新来的Java和我们的老师没有真正教给我们很多,所以我们必须学会自己。 – Laurencetein 2014-12-11 03:13:59

+0

另外,我有一个按钮,添加一个新条目添加到列表中,但如何让它出现在名单上,当我加入吗?它确实添加到txt文件中,但不在列表中,直到我重新启动程序。我搜索它我想正确的词是“刷新”它? – Laurencetein 2014-12-11 03:17:37

+0

获取到'ListModel','DefaultListModel模型=(DefaultListModel)list.getModel()的参考;'那么你的元素添加进去,'model.addElement(为newElement);'... – MadProgrammer 2014-12-11 03:21:52