How to clear a JList in Java?

南笙酒味 提交于 2019-11-27 23:30:35

问题


i have a jList in gui where i can add some data with Add button. what i want to add another button called Clear which will clear all elements. i tried this:

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

When I click on Add button this will add elements.

When I click on Clear button this remove elements.

But when I re-click on Add button, there is nothing in the jList1


回答1:


You should not be reinitializing the entire JList widget just to remove some items from it. Instead you should be manipulating the lists model, since changes to it are 'automatically' synchronized back to the UI. Assuming that you are indeed using the DefaultListModel, this is sufficient to implement your 'Clear All' functionality:

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



回答2:


There are number of problems, the first been that your example is full of compile problems, so I hope that's not your actual code.

JList does not have static method called setListData. I think you mean jList1 instead.

Each time you click on the clean button, you are creating a new model and component...

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

You've successfully dereferenced what ever jList1 was pointing at, so any time you try and interact with it, you're no longer interacting with the component on the screen.

The other problem is you supplying a empty array to the setListData method, which basically is like saying, "please add nothing to my list"

Try something like this;

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



回答3:


DefaultListModel model=new DefaultListModel();
        model.clear();
     jList1.setModel(model);

try this



来源:https://stackoverflow.com/questions/13597903/how-to-clear-a-jlist-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!