【发布时间】:2013-04-29 13:46:57
【问题描述】:
我有一个简单的ListModel,它是可过滤的,用于JList...
它使用以下代码...
public class FilteredListModel extends AbstractListModel
{
private List<LineData> data = null;
private final ArrayList<Integer> indices = new ArrayList<Integer>();
public FilteredListModel()
{
}
public void setData(List<LineData> data)
{
this.data = data;
doFilter();
}
public void doFilter()
{
int oldSize = indices.size();
indices.clear();
if (data != null)
{
int count = data.size();
for (int i = 0; i < count; i++)
{
IFiltererListObject element = (IFiltererListObject) data.get(i);
if (element.isVisible())
indices.add(i);
}
}
fireContentsChanged(this, 0, getSize() - 1);
if (oldSize > getSize())
fireIntervalRemoved(this, getSize(), oldSize - 1);
}
@Override
public int getSize()
{
return indices.size();
}
@Override
public Object getElementAt(int index)
{
return data.get(indices.get(index));
}
@Override
public void addListDataListener(ListDataListener l)
{
// TODO Auto-generated method stub
//doFilter();
}
@Override
public void removeListDataListener(ListDataListener l)
{
// TODO Auto-generated method stub
//doFilter();
}
}
奇怪的是,它无法正常工作,例如,如果我在窗口外单击,JList 和 ListModel 会正确更新...
我在这里错过了什么?
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖SSCCE。
-
实际上,我同时编辑了我的帖子并添加了整个班级......我所做的只是在更新数据后调用 doFilters......但到目前为止还没有工作......
-
"add the whole class" 一个 SSCCE 可能包含多个类,而您的代码原样不是 SSCCE。 别误会,它足够短,但请看剩下的术语..