Как очистить 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
ничего нет.
Ответы
Ответ 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);
попробуйте это