Phần 5 : Sử dụng JavaFX Collections
JavaFX collections được kế thừa từ Java Collections. Java Collections bao gồm 4 interface chính : List, Set , Map , Collection.
I. Java Collections :
Trong
phần này, chúng ta sẽ tìm hiểu sơ qua ý nghĩa và cách sử dụng Java
Collections dựa trên 4 interface chính là : List, Set, Map, Collection.
1. List và Set:
List,
Set là một tập hợp các đối tượng theo thứ tự, được miêu tả bằng
java.util.List interface. Các đối tượng trong List và Set được gọi là
elements (phần tử) , tuy nhiên :
- List có thể chứa các phần tử trùng nhau.
- Set không thể chứa các phần tử trùng nhau, các phần tử trong Set là duy nhất.
Ngoài
tính năng trên, thì List và Set hoạt động giống nhau. List và Set
interface định nghĩa một số phương thức cho phép : thêm, xóa, sửa và
truy cập các phần tử trong nó.
Class thường dùng cho List là : ArrayList và Vector.
Cách sử dụng ArrayList và Vector hoàn toàn giống nhau. Về mặt ý nghĩa,
Vector là Synchronized nên thường được dùng trong các ứng dụng mạng
hoặc đa luồng. ArrayList là Asynchronism. Vì thế, Vector xử lý chậm hơn
ArrayList.
Class thường dùng cho Set là : HashSet.
Cách sử dụng List:
2. Map:
Map là một tập hợp các phần tử. Mỗi phần tử của Map bao gồm : 1 Key và 1 Value.
Key và Value là bất kỳ đối tượng nào của Java. Map không thể chứa 2 Key
trùng nhau. Bạn không thể truy cập trực tiếp Value mà phải thông qua
Key.
Class thường dùng cho Map : HashMap, Hashtable.
Cách sử dụng các class này hoàn toàn giống nhau. Về mặt ý nghĩa,
Hashtable là Synchronized nên thường được dùng trong các ứng dụng mạng
hoặc đa luồng. HashMap là Asynchronism. Vì thế, Hashtable xử lý chậm hơn
HashMap.
Cách sử dụng Map:
3. Collections :
Collections class bổ sung 1 số phương thức kiểu Static dành cho List, Set và Map.
Cách sử dụng Collections:
II. JavaFX Collections:
JavaFX collections kế thừa từ Java Collections và được định nghĩa trong javafx.collections packet.
Hình trên cho thấy JavaFX Collections được kế thừa từ :
- Java Collections : mang đầy đủ bản chất của Java Collection.
- Observable : bổ sung tính năng cho phép đăng ký Listerner.
1. ObservableList:
ObservableList
là 1 tập hợp các đối tượng mà cho phép đăng ký Listener để theo dõi khi
có sự thay đổi xảy ra trên tập hợp, như : xóa, thêm, sửa các phần tử.
Khi ObservableList đăng ký Listener thì ListChangeListener interface sẽ nhận trực tiếp thông báo về sự thay đổi của ObservableList.
a. Cách sử dụng ObservableList :
b. Một số phương thức của ObservableList :
kiểu trả về
|
Phương thức
|
Miêu tả
|
void
|
add(E elements)
|
Thêm 1 phần tử vào ObservableList.
|
boolean
|
addAll(E…. elements)
|
Thêm nhiều phần tử vào ObservableList.
Vd: olist.addAll(“e1”,”e2”,…,);
|
void
|
addListener(
ListChangeListener listener)
|
Đăng ký Listener.
|
void
|
removeListener (ListChangeListener listener)
|
Xóa 1 đăng ký Listener.
|
void
|
remove(int value)
|
Xóa 1 phần tử
|
void
|
remove(int from, int to)
|
Xóa nhiều phần tử từ vị trí from .. đến vị trí to
|
void
|
set(int location, E element)
|
Cập nhật phần tử tại vị trí location.
|
void
|
setAll(E.. elements)
|
Xóa tất cả phần tử hiện có và thay thế bằng các phần tử trong phương thức setAll().
|
boolean
|
retainAll(E.. elements)
|
Xóa tất cả các phần tử trừ những phần tử nằm trong danh sách của phương thức retainAll().
|
void
|
clear()
|
Xóa tất cả phần tử trong ObservableList.
|
int
|
size()
|
Số các phần tử có trong ObservableList.
|
c. Ví dụ :
Tạo 1 ObservableList và 1 Button, khi bấm vào button sẽ tự động thêm 1 phần tử mới vào ObservableList.
public class ExampleCollections extends Application {
int i=0;
@Override
public void start(Stage primaryStage) {
ObservableList<String> observableList = FXCollections.observableArrayList();
observableList.addListener(new ListChangeListener() {
@Override
public void onChanged(ListChangeListener.Change c) {
System.out.println("Phần tử thay đổi : " + c );
System.out.println("hiển thị lại list : " + observableList);
}
});
Button btn = new Button();
btn.setText("Thêm phần tử vào List");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
i++;
observableList.add("element" + i);
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
|
2. ObservableSet:
ObservableSet
tương tự như ObservableList, cũng là 1 tập hợp các đối tượng mà cho
phép đăng ký Listener để theo dõi khi có sự thay đổi xảy ra trên tập
hợp, như : xóa, thêm, sửa các phần tử.
Lưu ý : Các phần tử trong ObservableSet là duy nhất không được trùng nhau.
Khi ObservableSet đăng ký Listener thì SetChangeListener interface sẽ nhận trực tiếp thông báo về sự thay đổi của ObservableSet.
a. Cách sử dụng ObservableSet :
b. Một số phương thức của ObservableSet :
kiểu trả về
|
Phương thức
|
Miêu tả
|
void
|
add(E elements)
|
Thêm 1 phần tử vào ObservableSet.
|
boolean
|
addAll(E…. elements)
|
Thêm nhiều phần tử vào ObservableSet.
|
void
|
addListener(
SetChangeListener listener)
|
Đăng ký Listener.
|
void
|
removeListener (SetChangeListener listener)
|
Xóa 1 đăng ký Listener.
|
void
|
remove(int value)
|
Xóa 1 phần tử
|
void
|
remove(int from, int to)
|
Xóa nhiều phần tử từ vị trí from .. đến vị trí to
|
void
|
set(int location, E element)
|
Cập nhật phần tử tại vị trí location.
|
void
|
setAll(E.. elements)
|
Xóa tất cả phần tử hiện có và thay thế bằng các phần tử trong phương thức setAll().
|
boolean
|
retainAll(E.. elements)
|
Xóa tất cả các phần tử trừ những phần tử nằm trong danh sách của phương thức retainAll().
|
void
|
clear()
|
Xóa tất cả phần tử trong ObservableSet.
|
int
|
size()
|
Số các phần tử có trong ObservableSet.
|
3. ObservableMap:
ObservableMap
là một tập hợp các phần tử mà phép đăng ký Listener để theo dõi khi có
sự thay đổi xảy ra trên tập hợp . Mỗi phần tử của ObservableMap bao gồm :
1 Key và 1 Value.
Key và Value là bất kỳ đối tượng nào của Java. ObservableMap không thể
chứa 2 Key trùng nhau. Bạn không thể truy cập trực tiếp Value mà phải
thông qua Key.
Khi ObservableSet đăng ký Listener thì MapChangeListener interface sẽ nhận trực tiếp thông báo về sự thay đổi của ObservableMap.
a. Cách sử dụng ObservableMap:
b. Một số phương thức của ObservableMap:
kiểu trả về
|
Phương thức
|
Miêu tả
|
boolean
|
containsKey(Object key)
|
Trả về true nếu ObservableMap có chứa key chỉ ra.
|
boolean
|
containsValue(Object value)
|
Trả về true nếu ObservableMap có chứa value chỉ ra.
|
void
|
addListener(
MapChangeListener listener)
|
Đăng ký Listener.
|
void
|
removeListener (MapChangeListener listener)
|
Xóa 1 đăng ký Listener.
|
Object
|
get(Objec key)
|
Trả về đối tượng Value dựa trên key chỉ ra.
|
Object
|
put(Object key, Object value)
|
Thêm 1 phần tử vào ObservableMap.
|
boolean
|
putAll(Map m)
|
Thêm các phần tử của đối tượng Map vào ObservableMap.
|
void
|
remove(oject key)
|
Xóa 1 phần tử dựa trên Key chỉ ra.
|
object
|
replace(Object Key, Object value )
|
Tìm và thay thế đối tượng Value của Key chỉ ra.
|
void
|
clear()
|
Xóa tất cả phần tử trong ObservableMap.
|
int
|
size()
|
Số các phần tử có trong ObservableMap
|
4. FXCollections:
FXCollections
tương tự như Java Collections, ý nghĩa là bổ sung 1 số phương thức
kiểu Static dành cho ObservableList, ObservableSet và ObservableMap.
a. Cách sử dụng FXCollections:
b. Một số phương thức của FXCollections:
kiểu trả về
|
Phương thức
|
Miêu tả
|
static ObservableList
|
checkedObservableList( ObservableList olist , java.lang.Class type)
|
Tạo
ra 1 ObservableList mới đồng bộ với olist, tức là sự thay đổi của olist
hoặc ObservableList mới này đều đồng bộ với ObservableList còn lại.
Kiểu type chỉ ra kiểu dữ liệu của mỗi phần tử trong ObservableList mới.
Vd:
ObservableList olist1 = FXCollections. checkedObservableList( olist , String.class);
|
static ObservableSet
|
checkedObservableSet( ObservableSet oSet , java.lang.Class type)
|
Tạo
ra 1 ObservableSet mới đồng bộ với oSet, tức là sự thay đổi của oSet
hoặc ObservableSet mới này đều đồng bộ với ObservableSet còn lại. Kiểu
type chỉ ra kiểu dữ liệu của mỗi phần tử trong ObservableSet mới.
|
static ObservableMap
|
checkedObservableMap( ObservableList oMap , java.lang.Class Keytype, java.lang.Clasd Valuetype)
|
Tạo
ra 1 ObservableMap mới đồng bộ với oMap , tức là sự thay đổi của oMap
hoặc ObservableMap mới này đều đồng bộ với ObservableMap còn lại. Kiểu
Keytype, Valuetype chỉ ra kiểu dữ liệu cho Key và Value của mỗi phần tử
trong ObservableMap mới.
|
static ObservableList
|
concat( ObservableList<E> … lists)
|
Kết hợp nhiều ObservableList lại thành 1 ObservableList.
|
Static void
|
copy(ObservableList dest, java.util.List src)
|
Copy tất cả các phần tử từ src vào dest.
|
static ObservableList
|
observableArrayList()
|
Tạo 1 ObservableList rỗng.
|
static ObservableList
|
observableArrayList( List list)
|
Tạo 1 ObservableList có các phần tử từ list.
|
static ObservableList
|
observableList(List list)
|
Tạo 1 ObservableList có các phần tử từ list.
|
static ObservableSet
|
observableSet(Set set)
|
Tạo 1 ObservableSet có các phần tử từ set.
|
static ObservableMap
|
observableHashMap()
|
Tạo 1 ObservableMap rỗng.
|
static ObservableMap
|
observableHashMap( Map map )
|
Tạo 1 ObservableMap có các phần tử từ map .
|
static ObservableIntegerArray
|
observableIntegerArray ()
|
Tạo 1 ObservableIntegerArray (mảng) rỗng có các phần tử kiểu Integer.
|
static ObservableIntegerArray
|
observableIntegerArray (int… values)
|
Tạo 1 ObservableIntegerArray (mảng) có các phần tử kiểu Integer.
|
static ObservableIntegerArray
|
observableIntegerArray
(observableIntegerArray array)
|
Tạo 1 ObservableIntegerArray (mảng) có các phần tử kiểu Integer được copy từ array.
|
static ObservableFloatArray
|
observableFloatArray()
|
Tạo 1 ObservableFloatArray (mảng) rỗng có các phần tử kiểu Float.
|
static ObservableFloatArray
|
observableFloatArray (int… values)
|
Tạo 1 ObservableFloatArray (mảng) có các phần tử kiểu Float.
|
static ObservableFloatArray
|
observableFloatArray (ObservableFloatArray array)
|
Tạo 1 ObservableFloatArray (mảng) có các phần tử kiểu Float được copy từ array.
|
static boolean
|
replaceAll( ObservableList olist, Object oldVal, Object newVal)
|
Tìm và thay thế các phần tử oldVal thành newVal trong olist
|
static void
|
reverse( ObservableList olist )
|
Đảo ngược vị trí các phần tử trong olist
|
static void
|
rotate(ObservableList olist, int distance)
|
Dịch chuyển tất cả các phần tử sang vị trí (hiện tại + distance).
|
static void
|
sort(ObservableList olist)
|
Sắp xếp các phần tử trong list theo chiều tăng dần
|
static void
|
sort(ObservableList olist, java.util.Comparator c)
|
Sắp xếp các phần tử trong list theo định dạng comparator c.
|
Rất tuyệt vời
Trả lờiXóaCám ơn bạn
Trả lờiXóa