Tìm hiểu JScrollPane trong Java Swing

JScrollPane được sử dụng để cung cấp cơ chế cuộn cho một component. Khi kích thước màn hình bị giới hạn chúng ta có thể sử dụng JScrollPane để hiển thị một component có kích thước lớn hoặc có thể thay đổi linh hoạt.

JScrollPabe class là sự kết hợp của khung nhìn và scrollbar do vậy chúng có thể kiểm soát sự xuất hiện thanh cuộn của mình bằng cách sử dụng các thuộc tính: verticalScrollbarPolicy và horizontalScrollbarPolicy.

Khởi tạo JScrollPane

Chúng ta có thể khởi tạo JScrollPane thông qua một số constructor sau:

  • JScrollPane() – Khởi tạo JScrollPane rỗng, thanh cuộn có thể xuất hiện theo cả chiều ngang và chiều rộng khi cần thiết.
  • JScollPane(Component component) – Khởi tạo JScrollPane cho một component được chỉ định, khi nội dung của component này lớn hơn kích thước được phép, thì thanh cuộn ngang và dọc sẽ xuất hiện.
  • JScrollPane(int vsPolicy, int hsPolicy) – Khởi tạo JScrollPane với vsPolicyhsPolicy được chỉ định.
  • JScrollPane(Component c, int vsPolicy, int hsPolicy) – Khởi tạo JScrollPane cho một component và vsPolicy, hsPolicy được chỉ định.

Ví dụ ScrollPane cơ bản

Sau đây chúng ta sẽ lấy ví dụ tạo ra một JScrollPane với JTextArea cho phép thêm văn bản vào đây. Khi văn bản nhiều lên vượt khỏi sức chứa của JTextArea thì thành cuộn sẽ xuất hiện.

 

import javax.swing.*;
import java.awt.*;

public class Main {
    
    public static void main(String[] args) {
        JFrame jFrame = new JFrame("Scroll Pane Example");
        jFrame.setSize(500, 300);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setLayout(new BorderLayout());
        JScrollPane pane = new JScrollPane();
        JTextArea txtMain = new JTextArea();
        pane.setViewportView(txtMain);
        jFrame.add(pane, BorderLayout.CENTER);

        JButton btnAddText = new JButton("Add Text");
        btnAddText
                .addActionListener(e -> {
                    txtMain.setText(txtMain.getText()
                            + "Example text Example text Example text Example textExample textExample textExample text\n");
                    String text = txtMain.getText();
                    txtMain.setCaretPosition(text != null ? text.length() : 0);
                });
        jFrame.add(btnAddText, BorderLayout.SOUTH);
        jFrame.setLocationRelativeTo(null);
        jFrame.setVisible(true);
    }
}

Output

Tạo JScrollPane cuộn theo chiều dọc

Để tạo một JScrollPane chỉ cuộn theo chiều dọc, chúng ta có thể sử dụng thuộc tính JScrollPane.VERTICAL_SCROLLBAR_ALWAYS trong lúc khởi tạo. Kèm  theo thuộc tính JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED chỉ định thanh cuộn ngang chỉ xuất hiện khi cần thiết tức là khi component hết sức chứa các nội dung bên trong nó. Nếu không muốn thanh cuộn ngang xuất hiện chúng ta có thể thay thế JScrollPane.HORIZONTAL_SCROLLBAR_NEVER.

import javax.swing.*;
import java.awt.*;

public class Main {

    public static void main(String[] args) {
        int TA_ROWS = 10;
        int TA_COLS = 60;
        JTextArea talkArea = new JTextArea(TA_ROWS, TA_COLS);

        JFrame f = new JFrame("Main");
        JScrollPane talkPane = new JScrollPane(talkArea,
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        JPanel jPanel = new JPanel();

        int gap = 10;
        jPanel.setLayout(new BorderLayout(gap, gap));
        jPanel.add(talkPane, BorderLayout.CENTER);
        f.getContentPane().add(jPanel);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}

Output

Tạo JScrollPane cuộn theo chiều ngang

Tương tự, nếu muốn tạo thanh cuộn theo chiều ngang mà không muốn xuất hiện thanh cuộn dọc chúng ta có thể sử dụng VERTICAL_SCROLLBAR_NEVERHORIZONTAL_SCROLLBAR_ALWAYS.

import javax.swing.*;
import java.awt.*;

public class Main {

    public static void main(String[] args) {
        int TA_ROWS = 10;
        int TA_COLS = 60;
        JTextArea talkArea = new JTextArea(TA_ROWS, TA_COLS);
        JFrame f = new JFrame("Main");
        JScrollPane talkPane = new JScrollPane(talkArea,
                JScrollPane.VERTICAL_SCROLLBAR_NEVER,
                JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        JPanel jPanel = new JPanel();

        int gap = 10;
        jPanel.setLayout(new BorderLayout(gap, gap));
        jPanel.add(talkPane, BorderLayout.CENTER);
        f.getContentPane().add(jPanel);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}

Output

Nguồn tham khảo

http://www.java2s.com/Tutorials/Java/Swing_How_to/JScrollPane/index.htm

https://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html

JScrollPane in Java

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x