Как очистить JList в Java?

у меня есть jList в gui, где я могу добавить некоторые данные с помощью кнопки 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();
}

когда я нажимаю на кнопку Добавить, это добавит элементы.

когда я нажимаю на кнопку Очистить это удалить элементы.

но когда я повторно нажимаю кнопку "Добавить", в jList1

3 ответов


вы не должны повторно инициализировать весь виджет JList, чтобы удалить из него некоторые элементы. Вместо этого вы должны манипулировать моделью списков, поскольку изменения в ней "автоматически" синхронизируются с пользовательским интерфейсом. Предполагая, что вы действительно используете DefaultListModel, этого достаточно для реализации вашей функции "очистить все":

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

есть ряд проблем, во-первых, ваш пример полон проблем с компиляцией, поэтому я надеюсь, что это не ваш фактический код.

JList не имеет статического методаsetListData. Я думаю, вы имеете в виду .

каждый раз, когда вы нажмете на кнопку "Очистить", вы создаете новую модель и компонент...

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

вы успешно разыграли то, что когда-либо 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"});
    }
}

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

попробуй такое