今日分享在Java FX中collection中ObservableList的基本使用,FX Collection相關類別與介面均放在javafx.collections底下,javafx的collection多數類別也是實作java.util.List/Map與Observable介面,故fxCollection中之實例可以加入ListChangeListener,使list有新增修改刪除的時候會觸發onChange方法,另定義類別Change用來獲得已觸發事件的相關資訊,如boolean wasAdded代表是否有新增元素等。
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import java.util.Iterator;
public class FXCollectionsTest {
public void getList() {
ObservableList<Integer> ole = FXCollections.observableArrayList(); //ObservableList需要用FXCollections中static method產生
ole.addListener(new ListChangeListener<Integer>() { //加入ListChangeListener
@Override
public void onChanged(Change<? extends Integer> change) {
System.out.println("TotalList= " + change.getList()); //每當有變化的時候,就把list列印一次
}
});
ole.add(1); //增加單一元素, [1]
ole.addAll(7, 9,7,16,4); //一次增加多個元素, [1, 7, 9, 10, 16, 4]
ole.set(1, 5); //修改某一元素數值, [1, 7, 9, 10, 16, 4]
ole.remove(2); //移除index為2的元素, [1, 5, 10, 16, 4]
Iterator<Integer> iterator = ole.iterator(); //可用iterator走訪list中所有元素
//跟java.util.list用法相同
while (iterator.hasNext()) {
Integer next = iterator.next();
if (next>=10) {
iterator.remove();//超過10的移除, [1, 5, 7, 4]
}
}
ole.removeAll(5, 7); //移除數值5、7, [1,4]
}
}