JTextArea trong Java Swing

JTextArea một trong những thành phần cốt lõi của Java Swing, cung cấp một giao diện cho phép hiển thị và chỉnh sửa văn bản. Khác với JTextField, nó hiển thị một vùng chứa văn bản bao gồm nhiều dòng thay vì một dòng như JTextField, nó thường được sử dụng để nhập, chỉnh sửa hoặc hiển thị các văn bản chứa nội dung dài như là mô tả, thông tin liên hệ, v.v.

Khởi tạo JTextArea

Chúng ta có các constructor dùng để khởi tạo JTextArea cơ bản sau:

  1. JTextArea() : Tạo JtextArea rỗng .
  2. JTextArea(String s) : Tạo JTextArea với nội dung ban đầu là chuỗi s được truyền vào..
  3. JTextArea(int row, int column) : Khởi tạo JTextArea không chứa văn bản, có số dòng row và số cột column như giá trị truyền vào.
  4. JTextArea(String s, int row, int column) : Khởi tạo JTextArea với văn bản, số dòng row và cột column được truyền vào.

Một số method thường xuyên sử dụng trong JTextArea:

  1. append(String s) : Gắn một s vào văn bản hiện tại của JTextArea.
  2. getLineCount() : Lấy số dòng của văn bản trong JTextArea ( số dòng mà văn bản đang chiếm giữ, có thể nhỏ hơn tổng số dòng có thể có của JTextArea).
  3. setFont(Font f) : Thay đổi font chữ.
  4. setColumns(int c) : Thay đổi số cột
  5. setRows(int r) : Thay đổi số dòng.
  6. getColumns() : Lấy tổng số cột của JTextArea.
  7. getRows() : Lấy tổng số dòng của JTextArea

Ví dụ tạo JTextArea đơn giản

Trong phần này mình sẽ tạo một JTextArea cho phép người dùng nhập vào văn bản bất kỳ. Sau khi người dùng nhấp vào JButton thì sẽ lấy văn bản trong JTextArea hiển thị lên JLabel.

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class Main {
    public static void main(String[] args) {

        JFrame jFrame = new JFrame("TextArea");
        jFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        JLabel jLabel = new JLabel();
        JButton jButton = new JButton("Submit");
        JTextArea jt = new JTextArea(10, 10);

        JPanel p = new JPanel();
        p.add(jt);
        p.add(jButton);
        jFrame.add(p);
        p.add(jLabel);

        // Bat su kien button click
        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jLabel.setText(jt.getText());
            }
        });

        jFrame.setSize(300, 300);
        jFrame.setLocationRelativeTo(null);
        jFrame.setVisible(true);
    }
}

Output

Khởi tạo JTextArea với văn bản có sẵn, thay đổi font chữ JTextArea

Trong phần này mình sẽ tạo JTextArea cho phép người dùng nhập và hiển thị văn bản, bên cạnh đó cho phép người dùng thay đổi font chữ tùy thích.

 

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

class text11 extends JFrame{

    // JFrame 
    static JFrame f;

    // JButton 
    static JButton b, b1, b2, b3;

    // label to display text 
    static JLabel l, l1;

    // text area 
    static JTextArea jt;

    // default constructor 
    text11() {
    }

    // main class 
    public static void main(String[] args) {
        // create a new frame to store text field and button 
        f = new JFrame("textfield");
        f.setLocationRelativeTo(null);

        // create a label to display text 
        l = new JLabel("nothing entered");
        l1 = new JLabel("0 lines");

        // create a new buttons 
        b = new JButton("submit");
        b1 = new JButton("plain");
        b2 = new JButton("italic");
        b3 = new JButton("bold");

        // create a object of the text class 
        text11 te = new text11();

        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                l.setText(jt.getText() + ", ");
                l1.setText(jt.getLineCount() + " lines");
            }
        });

        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Font f = new Font("Serif", Font.PLAIN, 15);
                jt.setFont(f);
            }
        });
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Font f = new Font("Serif", Font.ITALIC, 15);
                jt.setFont(f);
            }
        });
        b3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Font f = new Font("Serif", Font.BOLD, 15);
                jt.setFont(f);
            }
        });

        // create a text area, specifying the rows and columns 
        jt = new JTextArea("please write something ", 10, 10);

        JPanel p = new JPanel();

        // add the text area and button to panel 
        p.add(jt);
        p.add(b);
        p.add(b1);
        p.add(b2);
        p.add(b3);
        p.add(l);
        p.add(l1);

        f.add(p);
        // set the size of frame 
        f.setSize(500, 300);

        f.setVisible(true);
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);

    }
} 

Output

Cho phép Scroll JTextArea

Chúng ta đã biết rằng JTextArea dùng để chứa các đoạn văn bản có kích thước lớn. Do vậy đôi khi ứng dụng không đủ khoảng cách cho nó để hiển thị đầy đủ văn bản bên trong. Chúng ta cần cung cấp một lựa chọn khác đó là cho người dùng scroll để đọc các đoạn văn bản tiếp theo mà không tốn quá nhiều diện tích của ứng dụng.

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

 class JTextAreaTest {
    public static void main(String[] args) {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("JTextArea Test");
        frame.setLayout(new FlowLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        String text = "A JTextArea object represents a multiline area for displaying text. "
                + "You can change the number of lines that can be displayed at a time, "
                + "as well as the number of columns. You can wrap lines and words too. "
                + "You can also put your JTextArea in a JScrollPane to make it scrollable.";
        JTextArea textAreal = new JTextArea(text, 5, 10);
        textAreal.setPreferredSize(new Dimension(100, 100));
        JTextArea textArea2 = new JTextArea(text, 5, 10);
        textArea2.setPreferredSize(new Dimension(100, 100));
        JScrollPane scrollPane = new JScrollPane(textArea2, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        textAreal.setLineWrap(true);
        textArea2.setLineWrap(true);
        frame.add(textAreal);
        frame.add(scrollPane);
        frame.pack();
        frame.setVisible(true);
    }
}

Output

Highlight văn bản trong JTextArea

Highlight văn bản được dùng để gây chú ý một số đoạn nhỏ trong văn bản với mục đích nhấn mạnh điều gì đó đến người dùng. Chúng ta có thể làm được điều này thông qua đối tượng Highlighter được lấy từ JTextArea.

import javax.swing.*;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;

public class Main {

    public static void main(String args[]) {
        JTextArea area = new JTextArea(5, 20);
        area.setText("this is a test.");
        String charsToHighlight = "aeiouAEIOU";
        Highlighter h = area.getHighlighter();
        h.removeAllHighlights();
        String text = area.getText().toUpperCase();
        for (int i = 0; i < text.length(); i += 1) {
            char ch = text.charAt(i);
            if (charsToHighlight.indexOf(ch) >= 0)
                try {
                    h.addHighlight(i, i + 1, DefaultHighlighter.DefaultPainter);
                } catch (Exception ble) {
                }
        }
        JFrame jFrame = new JFrame();
        jFrame.add(area);
        jFrame.setSize(300, 300);
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jFrame.setLocationRelativeTo(null);
        jFrame.setVisible(true);
    }
}

Output

Duyệt từng dòng trong JTextArea

Để từng dòng và truy xuất văn bản chứa trên đó chúng ta có thể sử dụng đối tượng Element được cung cấp bởi JTextArea.

import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;

public class Main {

    public static void main(String args[]) throws BadLocationException {
        JTextArea area = new JTextArea("word1 word2\nword3\nword4");
        Element paragraph = area.getDocument().getDefaultRootElement();
        int contentCount = paragraph.getElementCount();
        for (int i = 0; i < contentCount; i++) {
            Element e = paragraph.getElement(i);
            int rangeStart = e.getStartOffset();
            int rangeEnd = e.getEndOffset();
            String line = area.getText(rangeStart, rangeEnd - rangeStart);
            System.out.println(line);
        }
    }
}

Output

word1 word2

word3

word4

Nguồn

https://www.geeksforgeeks.org/java-swing-jtextarea/

http://www.java2s.com/Tutorial/Java/0240__Swing/0280__JTextArea.htm

 

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