如何在Java中清除JList?

Pan*_*012 14 java swing jlist defaultlistmodel

我在gui中有一个jList,我可以使用Add按钮添加一些数据.我想添加另一个名为Clear的按钮,它将清除所有元素.我试过这个:

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt)
{
    DefaultListModel listmodel=new DefaultListModel();
    jList1 = new JList(listmodel);
    if(evt.getSource()==jButtonClear) JList.setListData(new String[0];
    else listmodel.removeAllElements();
}
Run Code Online (Sandbox Code Playgroud)

当我点击"添加"按钮时,这将添加元素.

当我单击"清除"按钮时,删除元素.

但是当我重新点击"添加"按钮时,没有任何内容 jList1

Per*_*ion 21

您不应该重新初始化整个JList小部件,只是为了从中删除一些项目.相反,您应该操作列表模型,因为对它的更改会"自动"同步回UI.假设您确实在使用DefaultListModel,这足以实现"全部清除"功能:

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) {
    if(evt.getSource()==jButtonClear) {
        DefaultListModel listModel = (DefaultListModel) jList1.getModel();
        listModel.removeAllElements();
    }
}
Run Code Online (Sandbox Code Playgroud)


Mad*_*mer 7

有很多问题,首先是你的例子充满了编译问题,所以我希望这不是你的实际代码.

JList没有调用静态方法setListData.我想你的意思是jList1.

每次单击"清理"按钮,都会创建一个新模型和组件......

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt)
{
    // ??
    DefaultListModel listmodel=new DefaultListModel();
    jList1 = new JList(listmodel);
    // ??
    if(evt.getSource()==jButtonClear) jList1.setListData(new String[0]);
    else listmodel.removeAllElements();
}
Run Code Online (Sandbox Code Playgroud)

您已经成功地取消引用了jList1所指向的内容,因此每当您尝试与其进行交互时,您就不再与屏幕上的组件进行交互.

另一个问题是你为setListData方法提供了一个空数组,基本上就是说,"请不要在我的列表中添加任何内容"

尝试这样的事情;

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt)
{
    DefaultListModel listmodel = (DefaultListModel)jList1.getModel();
    if(evt.getSource()==jButtonClear) {
        listmodel.removeAllElements();
    } else {
        listModel.addElement(new String[]{"Hello"});
    }
}
Run Code Online (Sandbox Code Playgroud)