Java: JScrollPane

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Tổng quan

JScrollPane cung cấp một view cho phép cuộn một thành phần. Một số thành phần Swing như JTextArea, JList, JTable và JTree đòi hỏi nhiều không gian hơn khi chúng mở rộng. Các thành phần này vốn không hỗ trợ cuộn cơ sở và yêu cầu một JScrollPane. Ngoài các thành phần đã đề cập, một JPanel còn chứa một số thành phần có thể là một ứng viên tốt cho một JScrollPane. Hình 1 hiển thị JScrollPane.

Java: Swing JScrollPane

Hình 1: JScrollPane

Như thể hiện trong Hình 1, một JScrollPane cung cấp cả hai thanh cuộn ngang và dọc. JScrollPane như là một phần của view cung cấp bốn góc, trong đó bạn có thể thêm các thành phần. Các góc được cố định và không di chuyển với các thanh cuộn.

Ngoài bốn góc, hơn hai phần đầu được cung cấp cụ thể là, RowHeader và ColumnHeader.

- RowHeader - Tiêu đề hàng được cung cấp giữa các góc trên bên trái và góc dưới bên trái, có thể di chuyển theo chiều dọc khi các thanh cuộn bắt đầu di chuyển.

- ColumnHeader - Tiêu đề cột được cung cấp giữa các góc trên cùng bên trái và ô trên cùng bên phải, nó di chuyển như các thanh cuộn bắt đầu di chuyển.

Hình 2 cho thấy các góc và các tiêu đề của JScrollPane.

Java Swing: corner and header

Hình 2: Corners và Headers của một JScrollPane

Các JScrollPane có JViewport để quản lý vùng nhìn thấy được của khách. Các khung nhìn tính giới hạn của vùng hiển thị hiện tại, dựa trên vị trí của thanh cuộn. Các tấm cuộn này được gọi là view hoặc view của khung nhìn. Khách của một cửa sổ cuộn có thể được tự động thay đổi bằng cách gọi phương thức setViewportView (). Các ô cuộn không có phương thức hồi đáp getViewportView (). Nếu lập trình viên yêu cầu truy xuất khách hàng sau, thì phương thức getViewport().GetViewportView() của ô cuộn có thể được gọi.

Hình 3 cho thấy viewport của JScrollPane.

Java Swing JScrollPane Viewport

Hình 3: Viewport của một JScrollPane

Khi người dùng cuộn thanh cuộn trên ScrollPane, khu vực khách hàng có thể nhìn thấy cũng thay đổi. Một thể hiện của JViewport được sử dụng bởi JScrollPane để quản lý vùng hiển thị của khách hàng. Các vị trí, kích thước, và hiển thị các khách hàng được chăm sóc bởi JViewport.

Hình 4 cho thấy ba lĩnh vực của một thanh cuộn.

Java Swing JScrollPane: knob, track and button

Hình 4: knob, track, và button của Scroll Bar

Ba vùng phân biệt của một thanh cuộn là: núm, track, và nút như thể hiện trong hình 4. Trên một thanh cuộn dọc khi người dùng di chuyển núm, vùng hiển thị của khách hàng di chuyển lên và xuống. Tương tự như vậy, một thanh cuộn ngang khi người dùng di chuyển các núm, các vùng hiển thị của khách hàng di chuyển trái phải. Các vị trí núm tỷ lệ với diện tích tương đối rõ ràng cho khách hàng. Khi nhấn vào nút mũi tên, người dùng cuộn bằng cách tăng đơn vị trong khi nhấn vào track, người dùng cuộn bằng cách tăng khối.

Tạo JScrollPane

Một JScrollPane được tạo ra bằng cách gọi constructor của nó và truyền thành phần như một tham số. Sau đó JScrollPane được thêm vào một container như các thành phần khác.

Hình 5 hiển thị việc tạo ra một JScrollPane với JTextArea.

Java Swing JScrollPane: JTextArea

Hình 5: JScrollPane với JTextArea

Đoạn mã 1 cho thấy cách thêm một thành phần JTextArea với JScrollPane.

Đoạn mã 1:

JFrame frmDisplay;
JScrollPane scpScrollPane;
JTextArea txaNotes;
...
txaNotes = new JTextArea();
frmDisplay = new JFrame(“Scrolling JTextArea with JScrollPane”);
// Provides the text area to the scroll pane
scpScrollPane = new JScrollPane(txaNotes);
// Adds the scroll pane to the frame
frmDisplay.getContentPane().add(scpScrollPane);

Hình 6 cho thấy đầu ra cho Đoạn mã 1.

Java Swing JScrollPane JTextArea: output

Hình 6.

Thay đổi động ScrollPane

Hai bước sau cần thực hiện khi khách của một JScrollPane được thay đổi động với phương thức setViewportView():

- Thiết lập kích thước ưa thích của khách với phương thức setPreferredSize().

- Gọi phương thức revalidate() trên máy khách.

Phương revalidate() là bắt buộc phải được gọi để ô cuộn có thể cập nhật chính nó và điều chỉnh các thanh cuộn. Khi khách thay đổi kích thước động thì các thanh cuộn cũng điều chỉnh tự động, tuy nhiên ô cuộn hoặc khung nhìn không thay đổi kích thước.

Đoạn mã 2 thể hiện làm thế nào để tự động thay đổi kích thước của khách.

Đoạn mã 2:

JPanel pnlClient; 
JScrollPane scpScroller;
// Initialize the Client
pnlClient = new JPanel(); 
pnlClient.setSize(600,600);
// Add the components of the client
...
// Construct the scroll pane with the old view
scpScroller = new JScrollPane(pnlClient);
...
// Resize the client
pnlClient.setSize(600,800);
// Add more components to the client
...
pnlClient.setPreferredSize(600,800); 
pnlClient.revalidate();

Các phương thức của JScrollPane

Bảng dưới đây liệt kê một số phương thức thường được sử dụng của JScrollPane.

Phương thức Mô tả
public void setCorner(String key, Component corner)

Phương pháp này được sử dụng để thiết lập một thành phần ở góc của một cuộn cửa sổ.

Đối số key quyết định vị trí của góc.

Các giá trị hợp lệ chính là: JScrollPane.LOWER_LEFT_CORNER, JScrollPane.LOWER_RIGHT_CORNER,

JScrollPane.UPPER_LEFT_CORNER, và JScrollPane.UPPER_RIGHT_CORNER.

Đối số corner thành phần được thêm vào góc.

public void setHorizontalScrollBarPolicy(int policy)

Phương pháp này xác định khi nào thanh cuộn ngang xuất hiện trong ô cuộn.

Đối số policycan có một trong các giá trị sau:

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS

Thí dụ:

JScrollPane scpScrollPane = new JScrollPane ();

scpScrollPane.setHorizontalScrollBarPolicy (Scroll PaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

public void setVerticalScrollBarPolicy(int policy)

Phương pháp này xác định khi nào thanh cuộn dọc xuất hiện trong JScrollPane.

Đối số policy có thể có một trong các giá trị sau:

ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,

ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,

ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS

Thí dụ:

JScrollPane scpScrollPane = new JScrollPane ();

scpScrollPane.setVerticalScrollBarPolicy (ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);

public void setRowHeaderView(Component view)

Thêm một thành phần theo chiều dọc dài như các tiêu đề hàng. Các thành phần cuộn lên và xuống. Đối số viewis một đối tượng của bất kỳ thành phần Swing.

public void setColumnHeaderView(Component view) Điều này được sử dụng để thêm một thành phần theo chiều ngang dài như cột tiêu đề. Các cuộn thành phần trái và phải.


Đoạn mã 3 cho thấy làm thế nào để thiết lập một nhãn với một biểu tượng ở góc của JScrollPane.

Đoạn mã 3:

. . .
public static void createFrameWithIcon() {
  JFrame frame = new JFrame(“Cornering Sample”);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  // Tạo nhãn là biểu tượng
  Icon columnImage = new ImageIcon(“close-icon.png”);
  Icon rowImage = new ImageIcon(“down-icon.png”);
  Icon mainImage = new ImageIcon(“steve-jobs.jpg”);
  Icon pageUp = new ImageIcon(“pageUp.png”);
  // Đưa biểu tượng vào nhãn
  JLabel columnLabel = new JLabel(columnImage);
  JLabel rowLabel = new JLabel(rowImage);
  JLabel coverLabel = new JLabel(mainImage);
  JLabel pageUpLabel = new JLabel(pageUp);
  // Tạo thanh cuộn
  JScrollPane scrollPane = new JScrollPane(coverLabel);
  // Đặt nhãn vào góc trên trái của thanh cuộn
  scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, pageUpLabel);
  // Thêm nhãn vào tiêu đề cột
  scrollPane.setColumnHeaderView(columnLabel);
  // Thêm nhãn vào tiêu đề hàng
  scrollPane.setRowHeaderView(rowLabel);
  // Thiết lập các thuộc tính cho frame 
  frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
  frame.setSize(300, 200);
  frame.setVisible(true);

. . .

Hình 7 thể hiện output của Đoạn mã 3.

Java Swing JScrollPane

Hình 7: Kết quả - Các biểu tượng trong JScrollPane

Các sự kiện được tạo ra khi người dùng di chuyển thanh cuộn của một JScrollPane. JScrollPane sẽ xử lý những sự kiện này, bạn không cần xử lý các sự kiện của JScrollPane.

Ví dụ có sử dụng ScrollPane

» Tiếp: JSlider
« Trước: Lớp JComponent
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!