Подтвердить что ты не робот

Как очистить 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

ничего нет.
4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

попробуйте это