Как очистить 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);
попробуй такое