Eng*_*uad 18 java arraylist listener
我有一个ArrayList,我动态地添加了一些对象,我有一个JButton.运行我的程序时,ArrayList为空,JButton设置为setEnabled(false).我想在ArrayList中有2个元素时启用我的按钮,如果ArrayList有一个项目或为空,则再次禁用它.我怎样才能做到这一点?
小智 15
Javafx(JRE 8的一部分)提供了一个可观察的列表实现.这段代码适合我:
ObservableList<MyAnno> lstAnno1 = FXCollections.observableList(new ArrayList<MyAnno>());
lstAnno1.addListener((ListChangeListener.Change<? extends MyAnno> c) -> {
c.next();
updateAnnotation((List<MyAnno>) c.getAddedSubList(), xyPlot);
});
...
lstAnno1.add(new MyAnno(lTs, dValue, strType));
...
public void updateAnnotation(List<MyAnno> lstMyAnno, XYPlot xyPlot) {
lstMyAnno.forEach(d -> {
...
});
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 14
ArrayList 没有任何通知机制.
我建议你编写自己的List实现,委托私有ArrayList存储,但增加了监听通知的能力......或者在Java本身中找到类似的东西.可能对你有用,虽然它没有实现.DefaultListModel List
Tap*_*ose 11
正如@Jon Skeet建议您也可以这样做:
public class ListResponseModel<E> extends AbstractListModel {
private static final long serialVersionUID = 1L;
private ArrayList<E> delegate = new ArrayList<E>();
@Override
public int getSize() {
return delegate.size();
}
@Override
public Object getElementAt(int index) {
return delegate.get(index);
}
public void add(E e){
int index = delegate.size();
delegate.add(e);
fireIntervalAdded(this, index, index);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32886 次 |
| 最近记录: |