Java Tutorials - Cách sỠdụng Jtable trong Java - How to use tables in Java
Vá»›i lá»›p Jtable các bạn có thể hiển thị dữ liệu vá»›i dạng bảng, mặt khác còn cho phép ngÆ°á»i dùng chỉnh sá»a dữ liệu, Jtable không chứ dữ liệu hoặc cache dữ liệu, nó chỉ lại má»™t Ä‘Æ¡n thuần là má»™t khuôn nhìn dữ liệu của các bạn. DÆ°á»›i đây là hình minh há»a má»™t bảng vá»›i việc sá» dụng scroll pane.
Tạo một bảng đơn giản
Bảng trong
SimpleTableDemo.java khai báo các tên cột dưới dạng một mảng kiểu String (String array)
TrÃch:
String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
Dữ liệu trong mảng nà y được khởi tạo với một mảng đối tượng 2 chiểu (two-dimensional Object array)
TrÃch:
Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
Sau đó bảng được xây dá»±ng vá»›i dữ liệu của data và tá»n cá»™t columnNames
TrÃch:
JTable table = new JTable(data, columnNames);
Có 2 hà m khởi tạo của Jtable mà nháºn trá»±c tiếp dữ liệu đó là :
TrÃch:
* JTable(Object[][] rowData, Object[] columnNames)
* JTable(Vector rowData, Vector columnNames)
Những Ä‘iểm thuáºn lợi của 2 hà m khởi tạo trên là chúng được sá» dụng má»™t các để dà ng, tuy nhiên chúng váºn có những khuyết Ä‘iểm :
- Các ô mặc định được cà i đặt là cho phép chỉnh sá»a (editable)
- Tất cả các kiểu dữ liệu là giống nhau, tất cả Ä‘á»u được Ä‘Æ°a vá» kiểu chuá»—i. Và dụ, nếu cá»™t trong bảng có kiểu dữ liệu là Boolean, bảng có thể hiển thị dữ liệu trong má»™t há»™p kiểm tra (check box). Tuy nhiên, nếu bạn sá» dụng má»™t trong hai hà m khởi tạo JTable được liệt kê ở trên, dữ liệu Boolean của bạn được hiển thị nhÆ° má»™t chuá»—i. Bạn có thể thấy sá»± khác biệt nà y trong cá»™t Vegetarian của bảng và dụ trên.
- Yêu cầu các bạn phải đặt tất cả dữ liệu trong má»™t array hoặc má»™t vertor, Ä‘iá»u nà y sẽ không thÃch hợp trong má»™t số trÆ°á»ng hợp. Và dụ, nếu bạn khởi tạo má»™t táºp các đối tượng từ cÆ¡ sở dữ liệu, bạn có thể muốn truy vấn các đối tượng trá»±c tiếp cho các giá trị của há», hÆ¡n là sao chép tất cả các giá trị và o má»™t mảng hoặc vector.
--> Äể khắc phục được vấn Ä‘á» nà y các bạn có thể tham khảo tại "Creating a Table Model", sẽ được Ä‘á» cặp ở các phần sau.
Dưa bảng và o Container
Äây là má»™t Ä‘oạn code Ä‘Æ¡n giản giúp tạo scroll pane xem nhÆ° là Container của bảng
TrÃch:
JScrollPane scrollPane = new JScrollPane(table);
table.setFillsViewportHeight(true);
Hai đoạn mã trên dùng để là m các công việc sau :
- Hà m khởi tạo của JScrollPane có tham số là bảng, nó sẽ tạo ra má»™t JScrollPane đồng thá»i tá»± Ä‘á»™ng thêm bảng và o JScrollPane.
- JTable.setFillsViewportHeight được gá»i để thiết láºp thuá»™c tÃnh fillsViewportHeight. Khi giá trị nà y là TRUE tức là sá» dụng toà n bá»™ chiá»u cao của container, ngay cả khi bảng không có đủ hà ng để sá» dụng toà n bá»™ không gian dá»c. và sẽ tạo ra thà nh cuá»™n để ngÆ°á»i dùng có thể để dà ng thao tác
Scroll pane tự độn đặt tiêu đỠcủa bảng ở trên cùng, ngay cả khi chúng ta kéo thanh cuộn xuống dưới, tiêu đỠcủa bảng vẫn luôn luôn được nhìn thấy.
Cà i đặt và thay đổi độ rộng của cột
Mặc địch, Ä‘á»™ rá»™ng của các cá»™t trong jtable là bằng nhau, ngay cả khi có sá»± tác Ä‘á»™ng của ngÆ°á»i dùng, thay Ä‘á»—i Ä‘á»™ rá»™ng của các cá»™t, các cá»™t cÅ©ng sẽ được thay đổi tÆ°Æ¡ng ứng
Äể thay đổi Ä‘á»™ rá»™ng mặc định của cá»™t, bạn cần sá» dụng hà m setPreferredWidth cho từng cá»™t trên bảng của các bạn. Và dụ thêm Ä‘oạn code sau và o SimpleTableDemo để tăng chiểu rá»™ng của cá»™t thứ 3 lÆ¡n hÆ¡n các cá»™t còn lại.
TrÃch:
TableColumn column = null;
for (int i = 0; i < 5; i++) {
column = table.getColumnModel().getColumn(i);
if (i == 2) {
column.setPreferredWidth(100); //cột thứ 3 sẽ rộng hơn
} else {
column.setPreferredWidth(50);
}
}
Sá» dụng Selections (cách chá»n dữ liệu trên bảng)
Các chủ đỠkhác cùng chuyên mục nà y: