Ẩn bảng html
Với lớp JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1, bạn có thể hiển thị các bảng dữ liệu, tùy ý cho phép người dùng chỉnh sửa dữ liệu. JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 không chứa hoặc lưu trữ dữ liệu; . Đây là hình ảnh của một bảng điển hình được hiển thị trong ngăn cuộn Phần còn lại của phần này chỉ cho bạn cách hoàn thành một số tác vụ phổ biến liên quan đến bảng. Đây là những chủ đề mà phần này bao gồm Thử cái này.
Bảng trong JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);4 khai báo các tên cột trong một mảng String String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"}; Dữ liệu của nó được khởi tạo và lưu trữ trong mảng Đối tượng hai chiều 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 tạo bằng các dữ liệu và tên cột này JTable table = new JTable(data, columnNames); Có hai hàm tạo JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 trực tiếp nhận dữ liệu (_______03 sử dụng hàm đầu tiên)
Ưu điểm của các hàm tạo này là chúng dễ sử dụng. Tuy nhiên, các hàm tạo này cũng có nhược điểm
Nếu bạn muốn khắc phục những hạn chế này, bạn cần triển khai mô hình bảng của riêng mình, như được mô tả trong Đây là mã điển hình để tạo ngăn cuộn đóng vai trò là vùng chứa cho bảng JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true); Hai dòng trong đoạn mã này làm như sau
Ô cuộn tự động đặt tiêu đề bảng ở trên cùng của khung nhìn. Tên cột vẫn hiển thị ở đầu khu vực xem khi dữ liệu bảng được cuộn Nếu bạn đang sử dụng bảng không có ngăn cuộn, thì bạn phải lấy thành phần tiêu đề bảng và tự đặt nó. Ví dụ JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);4 Theo mặc định, tất cả các cột trong bảng bắt đầu có chiều rộng bằng nhau và các cột sẽ tự động lấp đầy toàn bộ chiều rộng của bảng. Khi bảng trở nên rộng hơn hoặc hẹp hơn (điều này có thể xảy ra khi người dùng thay đổi kích thước cửa sổ chứa bảng), tất cả độ rộng của cột sẽ thay đổi một cách thích hợp Khi người dùng thay đổi kích thước cột bằng cách kéo đường viền bên phải của nó, thì các cột khác phải thay đổi kích thước hoặc kích thước của bảng phải thay đổi. Theo mặc định, kích thước của bảng vẫn giữ nguyên và tất cả các cột ở bên phải của điểm kéo sẽ thay đổi kích thước để phù hợp với không gian được thêm vào hoặc xóa khỏi cột ở bên trái của điểm kéo Để tùy chỉnh độ rộng cột ban đầu, bạn có thể gọi JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);47 trên mỗi cột trong bảng của mình. Điều này đặt cả chiều rộng ưa thích của các cột và chiều rộng tương đối gần đúng của chúng. Ví dụ: thêm đoạn mã sau vào JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);3 làm cho cột thứ ba của nó lớn hơn các cột khác JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);3 Như đoạn mã trước cho thấy, mỗi cột trong bảng được đại diện bởi một đối tượng JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);49. JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);49 cung cấp các phương thức getter và setter cho chiều rộng tối thiểu, ưu tiên và tối đa của cột, cũng như phương thức để lấy chiều rộng hiện tại. Để biết ví dụ về cách đặt độ rộng ô dựa trên xấp xỉ khoảng trống cần thiết để vẽ nội dung của ô, hãy xem phương pháp JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);31 trong JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);32 Khi người dùng thay đổi kích thước cột một cách rõ ràng, chiều rộng ưu tiên của cột được đặt sao cho kích thước do người dùng chỉ định trở thành chiều rộng hiện tại mới của cột. Tuy nhiên, khi bản thân bảng bị thay đổi kích thước — thường là do cửa sổ đã thay đổi kích thước —; . Thay vào đó, chiều rộng ưu tiên hiện có được sử dụng để tính chiều rộng cột mới để lấp đầy khoảng trống có sẵn Bạn có thể thay đổi hành vi thay đổi kích thước của bảng bằng cách gọi Trong cấu hình mặc định của nó, một bảng hỗ trợ lựa chọn bao gồm một hoặc nhiều hàng. Người dùng có thể chọn một phạm vi hàng liền kề hoặc một tập hợp các hàng tùy ý. Ô cuối cùng mà người dùng chỉ định có một dấu hiệu đặc biệt; . Ô này được gọi là lựa chọn khách hàng tiềm năng; Người dùng sử dụng chuột và/hoặc bàn phím để thực hiện các lựa chọn, như được mô tả trong bảng sau OperationMouse ActionKeyboard ActionChọn một hàng. Nhấp chuột. Mũi tên lên hoặc Mũi tên xuống. Mở rộng lựa chọn liền kề. Shift-Click hoặc Kéo qua các hàng. Shift-Mũi tên lên hoặc Shift-Mũi tên xuống. Thêm hàng vào lựa chọn/chuyển đổi lựa chọn hàng. Control-ClickDi chuyển lựa chọn dẫn đầu bằng Control-Mũi tên lên hoặc Control-Mũi tên xuống, sau đó sử dụng Phím cách để thêm vào lựa chọn hoặc Control-Thanh dấu cách để chuyển đổi lựa chọn hàngĐể xem các lựa chọn hoạt động như thế nào, hãy nhấp vào nút Khởi chạy để chạy JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);34 bằng cách sử dụng Java™ Web Start (tải xuống JDK 7 trở lên). Hoặc, để tự biên dịch và chạy ví dụ, hãy tham khảo tài liệu Chương trình ví dụ này trình bày bảng quen thuộc và cho phép người dùng thao tác các tùy chọn JTable nhất định. Ngoài ra còn có một ngăn văn bản ghi lại các sự kiện lựa chọn Trong ảnh chụp màn hình bên dưới, một người dùng đã chạy chương trình, nhấp vào hàng đầu tiên, sau đó nhấp vào điều khiển ở hàng thứ ba. Lưu ý đường viền xung quanh ô cuối cùng được nhấp; Trong "Chế độ lựa chọn" có một tập hợp các nút radio. Nhấp vào cái có nhãn "Lựa chọn đơn". Bây giờ bạn chỉ có thể chọn một hàng tại một thời điểm. Nếu bạn nhấp vào nút radio "Lựa chọn khoảng thời gian đơn", bạn có thể chọn một tập hợp các hàng phải liền kề nhau Tất cả các nút radio trong "Chế độ lựa chọn" gọi. Phương thức này nhận một đối số duy nhất, phải là một trong các hằng số sau được xác định trong JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);36. JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);37, JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);38 và JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);39 Quay trở lại JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);34, lưu ý ba hộp kiểm tùy chọn bên dưới "Tùy chọn lựa chọn. " Mỗi hộp kiểm kiểm soát trạng thái của biến ràng buộc JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);41 được xác định bởi JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1
GHI CHÚ. JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 sử dụng khái niệm lựa chọn rất đơn giản, được quản lý dưới dạng giao điểm của hàng và cột. Nó không được thiết kế để xử lý các lựa chọn ô hoàn toàn độc lập Nếu bạn xóa cả ba hộp kiểm (đặt cả ba thuộc tính bị ràng buộc thành JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);48), sẽ không có lựa chọn nào; Bạn có thể nhận thấy rằng hộp kiểm "Lựa chọn ô" bị tắt trong chế độ chọn nhiều khoảng thời gian. Điều này là do lựa chọn ô không được hỗ trợ trong chế độ này trong bản trình diễn. Bạn có thể chỉ định lựa chọn theo ô trong chế độ chọn nhiều khoảng thời gian, nhưng kết quả là một bảng không tạo ra các lựa chọn hữu ích Bạn cũng có thể nhận thấy rằng việc thay đổi bất kỳ tùy chọn nào trong ba tùy chọn lựa chọn có thể ảnh hưởng đến các tùy chọn khác. Điều này là do việc cho phép chọn cả hàng và chọn cột hoàn toàn giống với việc cho phép chọn ô. JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 tự động cập nhật ba biến ràng buộc khi cần thiết để giữ cho chúng nhất quán GHI CHÚ. Đặt String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};35 thành một giá trị có tác dụng phụ là cũng đặt cả 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)} };63 và 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)} };64 thành giá trị đó. Đặt cả 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)} };63 và 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)} };64 thành một giá trị cũng có tác dụng phụ là đặt String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};35 thành giá trị đó. Đặt 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)} };63 và 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)} };64 thành các giá trị khác nhau cũng có tác dụng phụ là đặt String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};35 thành JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);48 Để truy xuất lựa chọn hiện tại, hãy sử dụng hàm trả về một mảng các chỉ mục hàng và hàm trả về một mảng các chỉ mục cột. Để truy xuất tọa độ của lựa chọn khách hàng tiềm năng, hãy tham khảo các mô hình lựa chọn cho chính bảng đó và cho mô hình cột của bảng. Đoạn mã sau định dạng một chuỗi chứa hàng và cột của lựa chọn khách hàng tiềm năng JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);4 Lựa chọn của người dùng tạo ra một số sự kiện. Để biết thông tin về những điều này, hãy tham khảo Cách viết Trình lắng nghe lựa chọn danh sách trong bài học Viết trình lắng nghe sự kiện GHI CHÚ. Dữ liệu lựa chọn thực sự mô tả các ô được chọn trong "chế độ xem" (dữ liệu bảng khi nó xuất hiện sau bất kỳ sự sắp xếp hoặc lọc nào) thay vì trong mô hình bảng. Sự khác biệt này không quan trọng trừ khi dữ liệu đã xem của bạn đã được sắp xếp lại bằng cách sắp xếp, lọc hoặc thao tác cột của người dùng. Trong trường hợp đó, bạn phải chuyển đổi tọa độ lựa chọn bằng các phương pháp chuyển đổi được mô tả trong Mỗi đối tượng bảng sử dụng một đối tượng mô hình bảng để quản lý dữ liệu bảng thực tế. Một đối tượng mô hình bảng phải triển khai giao diện JTable table = new JTable(data, columnNames);64. Nếu lập trình viên không cung cấp đối tượng mô hình bảng, thì JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 sẽ tự động tạo một thể hiện của JTable table = new JTable(data, columnNames);66. Mối quan hệ này được minh họa dưới đây Hàm tạo JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 được sử dụng bởi JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);3 tạo mô hình bảng của nó bằng mã như thế này String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};3 Như đoạn mã trước cho thấy, việc triển khai một mô hình bảng có thể đơn giản. Nói chung, bạn triển khai mô hình bảng của mình trong một lớp con của lớp JTable table = new JTable(data, columnNames);69 Mô hình của bạn có thể chứa dữ liệu của nó trong một mảng, vectơ hoặc bản đồ băm hoặc nó có thể lấy dữ liệu từ một nguồn bên ngoài chẳng hạn như cơ sở dữ liệu. Nó thậm chí có thể tạo dữ liệu tại thời điểm thực hiện Bảng này khác với bảng JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);3 ở những điểm sau
Xem bên dưới mã được lấy từ 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)} };07 khác với mã JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);4. Phông chữ đậm cho biết mã làm cho mô hình của bảng này khác với mô hình bảng được xác định tự động cho JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);3 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)} };6 Một mô hình bảng có thể có một nhóm người nghe được thông báo bất cứ khi nào dữ liệu bảng thay đổi. Người nghe là trường hợp của 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)} };10. Trong mã ví dụ sau, JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);3 được mở rộng để bao gồm một người nghe như vậy. Mã mới được in đậm JTable table = new JTable(data, columnNames);6 Để kích hoạt các sự kiện thay đổi dữ liệu, mô hình bảng phải biết cách xây dựng một đối tượng 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)} };12. Đây có thể là một thủ tục phức tạp, nhưng đã được triển khai trong JTable table = new JTable(data, columnNames);66. Bạn có thể cho phép JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 sử dụng phiên bản mặc định của nó là JTable table = new JTable(data, columnNames);66 hoặc tạo lớp con tùy chỉnh của riêng bạn là JTable table = new JTable(data, columnNames);66 Nếu JTable table = new JTable(data, columnNames);66 không phải là lớp cơ sở phù hợp cho lớp mô hình bảng tùy chỉnh của bạn, hãy xem xét phân lớp JTable table = new JTable(data, columnNames);69. Lớp này triển khai một khung đơn giản để xây dựng các đối tượng 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)} };12. Lớp tùy chỉnh của bạn chỉ cần gọi một trong các phương thức JTable table = new JTable(data, columnNames);69 sau đây mỗi khi dữ liệu bảng được thay đổi bởi một nguồn bên ngoàiMethodChange____521Cập nhật ô được chỉ định. 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)} };22Cập nhật các hàng được chỉ định 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)} };23Cập nhật toàn bộ bảng (chỉ dữ liệu). 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)} };24Đã chèn hàng mới. 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)} };25Đã xóa các hàng hiện tại_______526 Làm mất hiệu lực toàn bộ bảng, cả dữ liệu và cấu trúc Trước khi thực hiện một số nhiệm vụ tiếp theo, bạn cần hiểu cách các bảng vẽ các ô của chúng. Bạn có thể mong đợi mỗi ô trong bảng là một thành phần. Tuy nhiên, vì lý do hiệu suất, các bảng Swing được triển khai khác nhau Thay vào đó, một trình kết xuất ô đơn lẻ thường được sử dụng để vẽ tất cả các ô chứa cùng một loại dữ liệu. Bạn có thể coi trình kết xuất như một dấu mực có thể định cấu hình mà bảng sử dụng để đóng dấu dữ liệu được định dạng phù hợp vào từng ô. Khi người dùng bắt đầu chỉnh sửa dữ liệu của ô, trình chỉnh sửa ô sẽ tiếp quản ô, kiểm soát hành vi chỉnh sửa của ô Ví dụ: mỗi ô trong cột Số năm trong 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)} };01 chứa dữ liệu 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)} };28 — cụ thể là đối tượng 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)} };29. Theo mặc định, trình kết xuất ô cho cột chứa 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)} };28 sử dụng một phiên bản 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)} };31 duy nhất để vẽ các số thích hợp, được căn phải, trên các ô của cột. Nếu người dùng bắt đầu chỉnh sửa một trong các ô, trình chỉnh sửa ô mặc định sẽ sử dụng 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)} };32 được căn phải để kiểm soát việc chỉnh sửa ô Để chọn trình kết xuất hiển thị các ô trong một cột, trước tiên, một bảng sẽ xác định xem bạn có chỉ định trình kết xuất cho cột cụ thể đó hay không. Nếu bạn không làm như vậy, thì bảng sẽ gọi phương thức 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)} };33 của mô hình bảng, phương thức này lấy kiểu dữ liệu của các ô của cột. Tiếp theo, bảng so sánh loại dữ liệu của cột với danh sách các loại dữ liệu mà trình kết xuất ô được đăng ký. Danh sách này được khởi tạo bởi bảng, nhưng bạn có thể thêm vào hoặc thay đổi nó. Hiện tại, các bảng đưa các loại dữ liệu sau vào danh sách
Trình chỉnh sửa ô được chọn bằng thuật toán tương tự Hãy nhớ rằng nếu bạn để một bảng tạo mô hình của riêng mình, nó sẽ sử dụng 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)} };44 làm loại của mọi cột. Để chỉ định các loại cột chính xác hơn, mô hình bảng phải xác định phương pháp 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)} };33 một cách thích hợp, như được minh họa bởi 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)} };07 Hãy nhớ rằng mặc dù trình kết xuất xác định giao diện của từng ô hoặc tiêu đề cột và có thể chỉ định văn bản mẹo công cụ của nó, nhưng trình kết xuất không xử lý các sự kiện. Nếu bạn cần chọn các sự kiện diễn ra bên trong một bảng, kỹ thuật bạn sử dụng sẽ thay đổi tùy theo loại sự kiện mà bạn quan tâm Tình huống Cách nhận sự kiện Để phát hiện sự kiện từ một ô đang được chỉnh sửa. Sử dụng trình chỉnh sửa ô (hoặc đăng ký trình nghe trên trình chỉnh sửa ô). Để phát hiện các lựa chọn và bỏ chọn hàng/cột/ô. Sử dụng trình nghe lựa chọn như được mô tả trong. Để phát hiện các sự kiện chuột trên tiêu đề cột. Đăng ký loại trình nghe chuột thích hợp trên đối tượngObject[][] 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)} };48 của bảng. (Xem ví dụ về 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)} };49. ) Để phát hiện các sự kiện khác. Đăng ký người nghe thích hợp trên đối tượng JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 Một vài phần tiếp theo cho bạn biết cách tùy chỉnh hiển thị và chỉnh sửa bằng cách chỉ định trình kết xuất và trình chỉnh sửa. Bạn có thể chỉ định trình kết xuất ô và trình chỉnh sửa theo cột hoặc theo loại dữ liệu Phần này cho bạn biết cách tạo và chỉ định trình kết xuất ô. Bạn có thể đặt trình kết xuất ô theo loại cụ thể bằng cách sử dụng phương pháp JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 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)} };52. Để chỉ định rằng các ô trong một cột cụ thể nên sử dụng trình kết xuất, bạn sử dụng phương pháp JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);49 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)} };54. Bạn thậm chí có thể chỉ định trình kết xuất dành riêng cho ô bằng cách tạo lớp con JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 Thật dễ dàng để tùy chỉnh văn bản hoặc hình ảnh được hiển thị bởi trình kết xuất mặc định, 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)} };56. Bạn chỉ cần tạo một lớp con và triển khai phương thức 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)} };57 để nó gọi 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)} };58 hoặc 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)} };59 bằng chuỗi hoặc hình ảnh thích hợp. Ví dụ: đây là cách triển khai trình kết xuất ngày mặc định 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)} };0 Nếu mở rộng 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)} };56 là không đủ, bạn có thể xây dựng trình kết xuất bằng cách sử dụng một siêu lớp khác. Cách dễ nhất là tạo một lớp con của một thành phần hiện có, làm cho lớp con của bạn triển khai giao diện 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)} };61. 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)} };61 chỉ yêu cầu một phương thức. 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)} };63. Việc triển khai phương pháp này của bạn sẽ thiết lập thành phần kết xuất để phản ánh trạng thái được truyền vào, sau đó trả lại thành phần Trong 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)} };64, trình kết xuất được sử dụng cho các ô Màu yêu thích là một phân lớp của 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)} };31 được gọi là 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)} };66. Dưới đây là các đoạn trích từ 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)} };67 cho thấy nó được triển khai như thế nào 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)} };1 Đây là mã từ 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)} };68 đăng ký phiên bản 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)} };66 làm trình kết xuất mặc định cho tất cả dữ liệu 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)} };70 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)} };2 Để chỉ định trình kết xuất dành riêng cho ô, bạn cần xác định lớp con JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 ghi đè phương thức 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)} };72. Ví dụ: đoạn mã sau làm cho ô đầu tiên trong cột đầu tiên của bảng sử dụng trình kết xuất tùy chỉnh 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)} };3 Theo mặc định, văn bản mẹo công cụ được hiển thị cho một ô trong bảng được xác định bởi trình kết xuất của ô. Tuy nhiên, đôi khi có thể đơn giản hơn để chỉ định văn bản mẹo công cụ bằng cách ghi đè việc triển khai phương thức 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)} };74 của JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1. Phần này chỉ cho bạn cách sử dụng cả hai kỹ thuật Để thêm mẹo công cụ vào một ô bằng trình kết xuất của nó, trước tiên bạn cần lấy hoặc tạo trình kết xuất ô. Sau đó, sau khi chắc chắn rằng thành phần kết xuất là một 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)} };75, hãy gọi phương thức 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)} };76 trên đó Một ví dụ về cài đặt mẹo công cụ cho các ô là trong 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)} };77. Nhấp vào nút Khởi chạy để chạy nó bằng Java™ Web Start (tải xuống JDK 7 trở lên). Hoặc, để tự biên dịch và chạy ví dụ, hãy tham khảo tài liệu Mã nguồn nằm trong JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);32. Nó thêm mẹo công cụ vào các ô của cột Thể thao với đoạn mã sau 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)} };4 Mặc dù văn bản mẹo công cụ trong ví dụ trước là tĩnh, nhưng bạn cũng có thể triển khai các mẹo công cụ có văn bản thay đổi tùy thuộc vào trạng thái của ô hoặc chương trình. Dưới đây là một vài cách để làm như vậy
Một ví dụ về việc thêm mã vào trình kết xuất ô có trong 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)} };64. Nhấp vào nút Khởi chạy để chạy nó bằng Java™ Web Start (tải xuống JDK 7 trở lên). Hoặc, để tự biên dịch và chạy ví dụ, hãy tham khảo tài liệu 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)} };64 sử dụng trình kết xuất màu, được triển khai trong 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)} };67, đặt văn bản mẹo công cụ bằng cách sử dụng mã in đậm trong đoạn mã sau 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)} };5 Dưới đây là một ví dụ về giao diện của mẹo công cụ Bạn có thể chỉ định văn bản mẹo công cụ bằng cách ghi đè phương thức 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)} };74 của JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1. Chương trình 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)} };87 chỉ ra cách. Nhấp vào nút Khởi chạy để chạy nó bằng Java™ Web Start (tải xuống JDK 7 trở lên). Hoặc, để tự biên dịch và chạy ví dụ, hãy tham khảo tài liệu Các ô có mẹo công cụ nằm trong cột Thể thao và Ăn chay. Đây là hình ảnh về mẹo công cụ của nó Đây là mã từ 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)} };88 thực hiện mẹo công cụ cho các ô trong cột Thể thao và Ăn chay 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)} };6 Mã này khá đơn giản, có lẽ ngoại trừ lệnh gọi tới 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)} };89. Cuộc gọi đó là cần thiết bởi vì nếu người dùng di chuyển các cột xung quanh, chỉ mục của chế độ xem cho cột sẽ không khớp với chỉ mục của mô hình cho cột. Ví dụ: người dùng có thể kéo cột Ăn chay (mà mô hình coi là ở chỉ mục 4) để cột này được hiển thị dưới dạng cột đầu tiên — ở chế độ xem chỉ mục 0. Vì 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)} };90 cung cấp chỉ mục chế độ xem, bạn cần dịch chỉ mục chế độ xem sang chỉ mục mô hình để bạn có thể chắc chắn rằng cột dự định đã được chọn Bạn có thể thêm mẹo công cụ vào tiêu đề cột bằng cách đặt văn bản mẹo công cụ cho bảng 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)} };48. Thông thường, các tiêu đề cột khác nhau yêu cầu văn bản mẹo công cụ khác nhau. Bạn có thể thay đổi văn bản bằng cách ghi đè phương thức 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)} };92 của tiêu đề bảng. Ngoài ra, bạn có thể gọi 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)} };93 để cung cấp trình kết xuất tùy chỉnh cho tiêu đề Một ví dụ về việc sử dụng cùng một văn bản mẹo công cụ cho tất cả các tiêu đề cột là trong 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)} };94. Đây là cách nó đặt văn bản mẹo công cụ 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)} };7 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)} };88 có một ví dụ về triển khai các mẹo công cụ tiêu đề cột thay đổi theo cột. Nếu bạn chạy 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)} };87 (nhấp vào nút Khởi chạy) bằng cách sử dụng Java™ Web Start (tải xuống JDK 7 trở lên). Hoặc, để tự biên dịch và chạy ví dụ, hãy tham khảo tài liệu Bạn sẽ thấy mẹo công cụ khi di chuột qua bất kỳ tiêu đề cột nào ngoại trừ hai tiêu đề đầu tiên. Không có mẹo công cụ nào được cung cấp cho các cột tên vì chúng có vẻ dễ hiểu. Đây là hình ảnh của một trong những mẹo công cụ tiêu đề cột Đoạn mã sau thực hiện các mẹo công cụ. Về cơ bản, nó tạo ra một lớp con của 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)} };48 ghi đè phương thức 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)} };74 để nó trả về văn bản cho cột hiện tại. Để liên kết tiêu đề bảng đã sửa đổi với bảng, phương thức JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 JTable table = new JTable(data, columnNames);00 được ghi đè để nó trả về một thể hiện của lớp con 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)} };48 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)} };8 Sắp xếp và lọc bảng được quản lý bởi một đối tượng sắp xếp. Cách dễ nhất để cung cấp đối tượng sắp xếp là đặt thuộc tính ràng buộc JTable table = new JTable(data, columnNames);02 thành JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);46 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)} };9 Hành động này xác định trình sắp xếp hàng là phiên bản của JTable table = new JTable(data, columnNames);04. Điều này cung cấp một bảng thực hiện sắp xếp theo ngôn ngữ cụ thể đơn giản khi người dùng nhấp vào tiêu đề cột. Điều này được thể hiện trong JTable table = new JTable(data, columnNames);05, như đã thấy trong ảnh chụp màn hình này Để có nhiều quyền kiểm soát hơn đối với việc sắp xếp, bạn có thể tạo một phiên bản của JTable table = new JTable(data, columnNames);06 và chỉ định rằng đó là đối tượng sắp xếp cho bảng của bạn JTable table = new JTable(data, columnNames);0 JTable table = new JTable(data, columnNames);06 sử dụng các đối tượng JTable table = new JTable(data, columnNames);08 để sắp xếp các hàng của nó. Một lớp thực hiện giao diện này phải cung cấp một phương thức có tên là JTable table = new JTable(data, columnNames);09 để xác định cách so sánh hai đối tượng bất kỳ nhằm mục đích sắp xếp. Ví dụ: đoạn mã sau tạo một JTable table = new JTable(data, columnNames);10 để sắp xếp một tập hợp các chuỗi theo từ cuối cùng trong mỗi chuỗi JTable table = new JTable(data, columnNames);1 Ví dụ này khá đơn giản; . Bạn có thể xác định lớp con của riêng mình, sử dụng các phương thức xuất xưởng trong JTable table = new JTable(data, columnNames);13 để lấy JTable table = new JTable(data, columnNames);10 cho một ngôn ngữ cụ thể hoặc sử dụng JTable table = new JTable(data, columnNames);15 Để xác định sử dụng JTable table = new JTable(data, columnNames);10 nào cho một cột, JTable table = new JTable(data, columnNames);06 cố gắng lần lượt áp dụng từng quy tắc sau. Các quy tắc được tuân theo thứ tự được liệt kê dưới đây;
Đối với các kiểu sắp xếp phức tạp hơn, lớp con JTable table = new JTable(data, columnNames);06 hoặc lớp cha của nó là JTable table = new JTable(data, columnNames);28 Để chỉ định thứ tự sắp xếp và ưu tiên sắp xếp cho các cột, hãy gọi. Đây là một ví dụ sắp xếp bảng được sử dụng trong các ví dụ theo hai cột đầu tiên. Thứ tự ưu tiên của các cột trong sắp xếp được biểu thị bằng thứ tự của các khóa sắp xếp trong danh sách khóa sắp xếp. Trong trường hợp này, cột thứ hai có khóa sắp xếp đầu tiên, vì vậy các hàng của chúng được sắp xếp theo tên, sau đó là họ JTable table = new JTable(data, columnNames);2 Ngoài việc sắp xếp lại kết quả, trình sắp xếp bảng cũng có thể chỉ định những hàng nào sẽ được hiển thị. Điều này được gọi là lọc. JTable table = new JTable(data, columnNames);06 thực hiện lọc bằng cách sử dụng các đối tượng JTable table = new JTable(data, columnNames);31. JTable table = new JTable(data, columnNames);32 triển khai một số phương thức xuất xưởng để tạo các loại bộ lọc phổ biến. Ví dụ: trả về một JTable table = new JTable(data, columnNames);32 lọc dựa trên biểu thức chính quy Trong mã ví dụ sau, bạn tạo rõ ràng một đối tượng sắp xếp để sau này bạn có thể sử dụng nó để chỉ định bộ lọc JTable table = new JTable(data, columnNames);3 Sau đó, bạn lọc dựa trên giá trị hiện tại của trường văn bản JTable table = new JTable(data, columnNames);4 Trong một ví dụ tiếp theo, JTable table = new JTable(data, columnNames);35 được gọi mỗi khi trường văn bản thay đổi. Khi người dùng nhập các biểu thức chính quy phức tạp, JTable table = new JTable(data, columnNames);36 sẽ ngăn ngoại lệ cú pháp can thiệp vào đầu vào Khi một bảng sử dụng bộ sắp xếp, dữ liệu mà người dùng nhìn thấy có thể theo thứ tự khác với thứ tự do mô hình dữ liệu chỉ định và có thể không bao gồm tất cả các hàng do mô hình dữ liệu chỉ định. Dữ liệu mà người dùng thực sự nhìn thấy được gọi là chế độ xem và có bộ tọa độ riêng. JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 cung cấp các phương thức chuyển đổi từ tọa độ mô hình sang tọa độ xem — và — và chuyển đổi từ tọa độ xem sang tọa độ mô hình — và GHI CHÚ. Khi sử dụng bộ sắp xếp, hãy luôn nhớ dịch tọa độ ô Ví dụ sau tập hợp các ý tưởng được thảo luận trong phần này. JTable table = new JTable(data, columnNames);42 thêm một số thay đổi nhỏ vào 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)} };01. Chúng bao gồm các đoạn mã trước đó trong phần này, cung cấp bộ sắp xếp cho bảng chính và sử dụng trường văn bản để cung cấp biểu thức chính quy lọc. Ảnh chụp màn hình sau đây hiển thị JTable table = new JTable(data, columnNames);44 trước khi thực hiện bất kỳ phân loại hoặc lọc nào. Lưu ý rằng hàng 3 trong mô hình vẫn giống như hàng 3 trong chế độ xem Nếu người dùng nhấp hai lần vào cột thứ hai, hàng thứ tư sẽ trở thành hàng đầu tiên — nhưng chỉ trong chế độ xem Như đã lưu ý trước đó, văn bản người dùng nhập vào trường văn bản "Văn bản bộ lọc" xác định bộ lọc xác định hàng nào được hiển thị. Giống như sắp xếp, lọc có thể khiến tọa độ xem khác với tọa độ mô hình Đây là mã cập nhật trường trạng thái để phản ánh lựa chọn hiện tại JTable table = new JTable(data, columnNames);5 Việc thiết lập hộp tổ hợp làm trình chỉnh sửa rất đơn giản, như ví dụ sau minh họa. Dòng mã in đậm thiết lập hộp tổ hợp làm trình chỉnh sửa cho một cột cụ thể JTable table = new JTable(data, columnNames);6 Dưới đây là hình ảnh của trình chỉnh sửa hộp tổ hợp đang được sử dụng Mã trước là từ JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);32. Bạn có thể chạy 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)} };77 (nhấp vào nút Khởi chạy) bằng cách sử dụng Java™ Web Start (tải xuống JDK 7 trở lên). Hoặc, để tự biên dịch và chạy ví dụ, hãy tham khảo tài liệu Cho dù bạn đang đặt trình chỉnh sửa cho một cột ô (sử dụng phương pháp JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);49 JTable table = new JTable(data, columnNames);48) hay cho một loại dữ liệu cụ thể (sử dụng phương pháp JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 JTable table = new JTable(data, columnNames);50), bạn chỉ định trình chỉnh sửa bằng cách sử dụng đối số tuân theo giao diện JTable table = new JTable(data, columnNames);51. May mắn thay, lớp JTable table = new JTable(data, columnNames);52 triển khai giao diện này và cung cấp các hàm tạo để cho phép bạn chỉ định một thành phần chỉnh sửa là 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)} };32, JTable table = new JTable(data, columnNames);54 hoặc JTable table = new JTable(data, columnNames);55. Thông thường, bạn không cần phải chỉ định rõ ràng hộp kiểm làm trình chỉnh sửa, vì các cột có dữ liệu JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);9 sẽ tự động sử dụng trình kết xuất và trình chỉnh sửa hộp kiểm Điều gì sẽ xảy ra nếu bạn muốn chỉ định một trình soạn thảo không phải là trường văn bản, hộp kiểm hoặc hộp tổ hợp? . Bạn cần tạo một lớp triển khai giao diện JTable table = new JTable(data, columnNames);51. Lớp JTable table = new JTable(data, columnNames);59 là một lớp cha tốt để sử dụng. Nó triển khai siêu giao diện của JTable table = new JTable(data, columnNames);51, JTable table = new JTable(data, columnNames);61, giúp bạn không gặp rắc rối khi triển khai mã kích hoạt sự kiện cần thiết cho trình chỉnh sửa ô Lớp trình soạn thảo ô của bạn cần xác định ít nhất hai phương thức — JTable table = new JTable(data, columnNames);62 và JTable table = new JTable(data, columnNames);63. Phương thức JTable table = new JTable(data, columnNames);62, được yêu cầu bởi JTable table = new JTable(data, columnNames);61, trả về giá trị hiện tại của ô. Phương thức JTable table = new JTable(data, columnNames);63, được yêu cầu bởi JTable table = new JTable(data, columnNames);51, sẽ định cấu hình và trả về thành phần mà bạn muốn sử dụng làm trình chỉnh sửa Dưới đây là hình ảnh của một bảng có hộp thoại đóng vai trò gián tiếp như một trình soạn thảo ô. Khi người dùng bắt đầu chỉnh sửa một ô trong cột Màu yêu thích, một nút (trình chỉnh sửa ô thực sự) sẽ xuất hiện và hiển thị hộp thoại mà người dùng có thể chọn một màu khác Bạn có thể chạy 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)} };64 (nhấp vào nút Khởi chạy) bằng cách sử dụng Java™ Web Start (tải xuống JDK 7 trở lên). Hoặc, để tự biên dịch và chạy ví dụ, hãy tham khảo tài liệu Đây là mã, được lấy từ JTable table = new JTable(data, columnNames);69, thực hiện trình chỉnh sửa ô JTable table = new JTable(data, columnNames);7 Như bạn có thể thấy, mã này khá đơn giản. Phần duy nhất hơi phức tạp là lệnh gọi tới JTable table = new JTable(data, columnNames);70 ở cuối trình xử lý hành động của nút chỉnh sửa. Nếu không có cuộc gọi này, trình chỉnh sửa sẽ vẫn hoạt động, mặc dù hộp thoại phương thức không còn hiển thị. Cuộc gọi đến JTable table = new JTable(data, columnNames);70 cho phép bảng biết rằng nó có thể hủy kích hoạt trình chỉnh sửa, cho phép trình kết xuất xử lý lại ô Nếu trình chỉnh sửa mặc định của ô cho phép nhập văn bản, bạn sẽ được kiểm tra lỗi miễn phí nếu loại ô được chỉ định là thứ gì đó không phải là JTable table = new JTable(data, columnNames);72 hoặc 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)} };44. Việc kiểm tra lỗi là một tác dụng phụ của việc chuyển đổi văn bản đã nhập thành một đối tượng thuộc loại phù hợp Việc kiểm tra tự động các chuỗi do người dùng nhập xảy ra khi trình chỉnh sửa mặc định cố gắng tạo một phiên bản mới của lớp được liên kết với cột của ô. Trình chỉnh sửa mặc định tạo phiên bản này bằng cách sử dụng một hàm tạo lấy một đối số là JTable table = new JTable(data, columnNames);72. Ví dụ: trong một cột có các ô có loại 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)} };29, khi người dùng nhập "123", trình chỉnh sửa mặc định sẽ tạo 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)} };29 tương ứng bằng cách sử dụng mã tương đương với JTable table = new JTable(data, columnNames);77. Nếu hàm tạo đưa ra một ngoại lệ, đường viền của ô sẽ chuyển sang màu đỏ và từ chối để tiêu điểm di chuyển ra khỏi ô. Nếu bạn triển khai một lớp được sử dụng làm kiểu dữ liệu cột, thì bạn có thể sử dụng trình soạn thảo mặc định nếu lớp của bạn cung cấp một hàm tạo nhận một đối số kiểu JTable table = new JTable(data, columnNames);72 Nếu bạn muốn có một trường văn bản làm trình chỉnh sửa cho một ô, nhưng muốn tùy chỉnh nó — có thể để kiểm tra văn bản do người dùng nhập nghiêm ngặt hơn hoặc để phản ứng khác khi văn bản không hợp lệ — bạn có thể thay đổi trình chỉnh sửa ô để sử dụng văn bản được định dạng . Trường văn bản được định dạng có thể kiểm tra giá trị liên tục trong khi người dùng đang nhập hoặc sau khi người dùng cho biết kết thúc nhập (chẳng hạn như bằng cách nhấn Enter) Đoạn mã sau, được lấy từ bản trình diễn có tên JTable table = new JTable(data, columnNames);79, thiết lập trường văn bản được định dạng làm trình chỉnh sửa giới hạn tất cả các giá trị số nguyên nằm trong khoảng từ 0 đến 100. Bạn có thể chạy JTable table = new JTable(data, columnNames);80 (nhấp vào nút Khởi chạy) bằng cách sử dụng Java™ Web Start (tải xuống JDK 7 trở lên). Hoặc, để tự biên dịch và chạy ví dụ, hãy tham khảo tài liệu Đoạn mã sau làm cho trường văn bản được định dạng trở thành trình chỉnh sửa cho tất cả các cột chứa dữ liệu kiểu 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)} };29 JTable table = new JTable(data, columnNames);8 Lớp JTable table = new JTable(data, columnNames);82 được triển khai như một lớp con của JTable table = new JTable(data, columnNames);52 sử dụng JTable table = new JTable(data, columnNames);84 thay vì 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)} };32 mà JTable table = new JTable(data, columnNames);52 hỗ trợ. Nó thực hiện điều này bằng cách thiết lập trường văn bản được định dạng trước tiên để sử dụng định dạng số nguyên và có các giá trị tối thiểu và tối đa được chỉ định, sử dụng API được mô tả trong Cách sử dụng trường văn bản được định dạng. Sau đó, nó sẽ ghi đè việc triển khai JTable table = new JTable(data, columnNames);52 của các phương thức JTable table = new JTable(data, columnNames);63, JTable table = new JTable(data, columnNames);62 và JTable table = new JTable(data, columnNames);90, thêm các thao tác cần thiết cho các trường văn bản được định dạng Ghi đè của JTable table = new JTable(data, columnNames);63 đặt thuộc tính giá trị của trường văn bản được định dạng (chứ không chỉ thuộc tính văn bản mà nó kế thừa từ 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)} };32) trước khi trình chỉnh sửa được hiển thị. Ghi đè của JTable table = new JTable(data, columnNames);62 giữ giá trị ô là một 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)} };29, thay vì, giả sử, giá trị JTable table = new JTable(data, columnNames);95 mà trình phân tích cú pháp của trường văn bản được định dạng có xu hướng trả về. Cuối cùng, ghi đè JTable table = new JTable(data, columnNames);90 cho phép bạn kiểm tra xem văn bản có hợp lệ hay không, có thể ngăn trình chỉnh sửa bị loại bỏ. Nếu văn bản không hợp lệ, việc triển khai JTable table = new JTable(data, columnNames);90 của bạn sẽ hiển thị hộp thoại cung cấp cho người dùng tùy chọn tiếp tục chỉnh sửa hoặc hoàn nguyên về giá trị tốt nhất cuối cùng. Mã nguồn hơi dài để đưa vào đây, nhưng bạn có thể tìm thấy nó trong JTable table = new JTable(data, columnNames);98 JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 cung cấp API đơn giản để in bảng. Cách dễ nhất để in ra một bảng là gọi mà không có đối số JTable table = new JTable(data, columnNames);9 Gọi JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);01 trên ứng dụng Swing bình thường sẽ hiển thị hộp thoại in tiêu chuẩn. (Trên ứng dụng không đầu, bảng được in đơn giản. ) Giá trị trả về cho biết liệu người dùng có tiếp tục với lệnh in hay hủy bỏ nó. JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);00 có thể ném JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);03, đây là một ngoại lệ được kiểm tra; JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);1 cung cấp một số tình trạng quá tải của JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);01 với nhiều tùy chọn khác nhau. Đoạn mã sau từ JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);07 cho biết cách xác định tiêu đề trang JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);0 Đối với các ứng dụng in phức tạp hơn, hãy sử dụng để lấy đối tượng JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);09 cho bảng. Để biết thêm về JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);09, hãy tham khảo bài học In ấn trong đồ họa 2D |