Ẩ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

Ẩn bảng html

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.  
  1. Nhấp vào nút Khởi chạy để chạy

    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    3 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


  2. Nhấp vào ô có chứa "Trượt tuyết".
    Toàn bộ hàng đầu tiên được chọn, cho biết bạn đã chọn dữ liệu của Kathy Smith. Điểm nổi bật đặc biệt cho biết ô "Trượt tuyết" có thể chỉnh sửa được. Nói chung, bạn bắt đầu chỉnh sửa một ô văn bản bằng cách bấm đúp vào ô đó.

  3. Đặt con trỏ lên trên "Tên". Bây giờ hãy nhấn nút chuột và kéo sang phải.
    Như bạn thấy, người dùng có thể sắp xếp lại các cột trong bảng.

  4. Đặt con trỏ ngay bên phải tiêu đề cột. Bây giờ hãy nhấn nút chuột và kéo sang phải hoặc trái.
    Cột thay đổi kích thước và các cột khác điều chỉnh để lấp đầy khoảng trống còn lại.

  5. Thay đổi kích thước cửa sổ chứa bảng sao cho lớn hơn mức cần thiết để hiển thị toàn bộ bảng.
    Tất cả các ô trong bảng trở nên rộng hơn, mở rộng để lấp đầy không gian theo chiều ngang thừa.

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)

  • JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    7
  • JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    8

Ư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

  • Chúng tự động làm cho mọi ô có thể chỉnh sửa được
  • Họ xử lý tất cả các loại dữ liệu giống nhau (dưới dạng chuỗi). Ví dụ: nếu một cột trong bảng có dữ liệu
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    9, bảng có thể hiển thị dữ liệu trong hộp kiểm. Tuy nhiên, nếu bạn sử dụng một trong hai hàm tạo
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    1 được liệt kê trước đó, thì dữ liệu
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    9 của bạn sẽ được hiển thị dưới dạng chuỗi. Bạn có thể thấy sự khác biệt này trong cột
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    42 của hình trước
  • Chúng yêu cầu bạn đặt tất cả dữ liệu của bảng vào một mảng hoặc vectơ, điều này có thể không phù hợp với một số dữ liệu. Ví dụ: nếu bạn đang khởi tạo một tập hợp các đối tượng từ cơ sở dữ liệu, bạn có thể muốn truy vấn trực tiếp các đối tượng để lấy giá trị của chúng, thay vì sao chép tất cả các giá trị của chúng vào một mảng hoặc vectơ

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

  • Hàm tạo
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    43 được gọi với một đối số đề cập đến đối tượng bảng. Thao tác này tạo ra một ngăn cuộn dưới dạng vùng chứa cho bảng;
  • JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    44 được gọi để đặt thuộc tính
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    45. Khi thuộc tính này là
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    46, bảng sẽ sử dụng toàn bộ chiều cao của vùng chứa, ngay cả khi bảng không có đủ hàng để sử dụng toàn bộ không gian theo chiều dọc. Điều này giúp sử dụng bảng làm mục tiêu kéo và thả dễ dàng hơn

Ô 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;

Ẩn bảng html

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

  • Điều khiển "Lựa chọn hàng"
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    43 có phương thức setter
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    44 và phương thức getter
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    45. Khi thuộc tính ràng buộc này là
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    46 (và thuộc tính
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    47 là
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    48), người dùng có thể chọn theo hàng
  • Điều khiển "Lựa chọn cột"
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    47 có phương thức setter
    String[] columnNames = {"First Name",
                            "Last Name",
                            "Sport",
                            "# of Years",
                            "Vegetarian"};
    
    30 và phương thức getter
    String[] columnNames = {"First Name",
                            "Last Name",
                            "Sport",
                            "# of Years",
                            "Vegetarian"};
    
    31. Khi thuộc tính ràng buộc này là
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    46 (và thuộc tính ràng buộc của
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    43 là
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    48) thì người dùng có thể chọn theo cột
  • "Lựa chọn ô" điều khiển
    String[] columnNames = {"First Name",
                            "Last Name",
                            "Sport",
                            "# of Years",
                            "Vegetarian"};
    
    35, có phương thức setter
    String[] columnNames = {"First Name",
                            "Last Name",
                            "Sport",
                            "# of Years",
                            "Vegetarian"};
    
    36 và phương thức getter
    String[] columnNames = {"First Name",
                            "Last Name",
                            "Sport",
                            "# of Years",
                            "Vegetarian"};
    
    37. Khi thuộc tính ràng buộc này là
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    46, người dùng có thể chọn một ô hoặc một khối ô hình chữ nhật

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

Ẩn bảng html

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

  • Mẫu bảng tùy chỉnh 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)}
    };
    
    01 tuy đơn giản nhưng có thể dễ dàng xác định kiểu dữ liệu, giúp
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    1 hiển thị dữ liệu ở định dạng tốt nhất. Mặt khác, mô hình bảng được tạo tự động của
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    3 không biết rằng cột Số năm chứa các số (thường phải được căn phải và có định dạng cụ thể). Nó cũng không biết rằng cột
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    42 chứa các giá trị boolean, có thể được biểu thị bằng các hộp kiểm
  • Mô hình bảng tùy chỉnh đượ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)}
    };
    
    01 không cho phép bạn chỉnh sửa các cột tên; . Trong
    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    3, tất cả các ô đều có thể chỉnh sửa

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ài

MethodChange____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

  • JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    
    9 — được hiển thị bằng hộp kiểm
  • 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 hiển thị bởi nhãn căn phả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)}
    };
    
    36,
    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)}
    };
    
    37 — giống 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)}
    };
    
    28, nhưng bản dịch từ đối tượng sang văn bản được thực hiện bởi 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)}
    };
    
    39 (sử dụng định dạng số mặc định cho ngôn ngữ hiện 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)}
    };
    
    40 — được hiển thị bởi nhãn, với bản dịch từ đối tượng sang văn bản được thực hiện bởi 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)}
    };
    
    41 (sử dụng kiểu ngắn cho ngày và giờ)
  • 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)}
    };
    
    42,
    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)}
    };
    
    43 — được hiển thị bởi nhãn ở giữ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)}
    };
    
    44 — được hiển thị bởi nhãn hiển thị giá trị chuỗi của đối tượng

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ượ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 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

  • Thêm một chút mã vào 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)}
    };
    
    63 của trình kết xuất
  • Ghi đè phương thức
    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)}
    };
    
    74

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ụ

Ẩn bảng html

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ó

Ẩn bảng html

Đâ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

Ẩn bảng html

Đ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

Ẩn bảng html

Để 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;

  1. Nếu một bộ so sánh đã được chỉ định bằng cách gọi, hãy sử dụng bộ so sánh đó
  2. Nếu mô hình bảng báo cáo rằng dữ liệu cột bao gồm các chuỗi (_______620 trả về ____621 cho cột đó), hãy sử dụng một bộ so sánh để sắp xếp các chuỗi dựa trên ngôn ngữ hiện tại
  3. Nếu lớp cột được trả về bởi
    JTable table = new JTable(data, columnNames);
    
    20 thực hiện
    JTable table = new JTable(data, columnNames);
    
    23, hãy sử dụng một bộ so sánh để sắp xếp các chuỗi dựa trên các giá trị được trả về bởi
  4. Nếu một bộ chuyển đổi chuỗi đã được chỉ định cho bảng bằng cách gọi , hãy sử dụng một bộ so sánh để sắp xếp các biểu diễn chuỗi kết quả dựa trên ngôn ngữ hiện tại
  5. Nếu không có quy tắc nào trước đó áp dụng, hãy sử dụng một bộ so sánh gọi
    JTable table = new JTable(data, columnNames);
    
    26 trên dữ liệu cột và sắp xếp các chuỗi kết quả dựa trên ngôn ngữ hiện tại

Đố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 bảng html

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

Ẩn bảng html

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

Ẩn bảng html

Đâ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

Ẩn bảng html

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

Ẩn bảng html

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