Cách tạo, và xử lý sự kiện của JTextField trong Java Swing

JTextField là một component có lẽ cũng được sử dụng rất nhiều trong các ứng dụng Java Swing cùng với Button, Label, CheckBox, etc.

JTextField là một component cho phép nhập và chỉnh sữa đoạn văn bản trên cùng một dòng vì thế nó thường phù hợp cho việc nhập, chỉnh sửa các thông tin dạng ngắn gọn, mang đại ý như là email, password, tên công ty, tên sinh viên, etc. Còn những thông tin dài hơn thì chúng ta có thể sử dụng JTextArea cho phép nhập, chỉnh sửa dữ liệu trên nhiều dòng.

Tạo JTextField

Để khởi tạo một JTextField trong Java Swing rất đơn giản với cú pháp sau:

JTextField jTextField = new JTextField();

Để khởi tạo một JTextField với đoạn văn bản có sẵn thì có thể làm như sau:

JTextField jTextField = new JTextField("Default Text");

Trong JTextField có một thuộc tính gọi là columns được dùng để tính toán độ rộng của JTextField, mặc định nó là 0 nên khi không có dữ liệu thì kích thước của nó sẽ rất nhỏ. Để chỉ định columns cho JTextField chúng ta có thể khởi tạo như sau:

JTextField textField = new JTextField(20);

Note:

  • Nếu JTextField được khởi tạo mà không được cung cấp đoạn văn bản ban đầu thì giá trị này sẽ là null. Các bạn nhớ lưu ý khi thao tác nếu không có thể bị NullPointerException.
  • Nếu columns không được cung cấp lúc khởi tạo thì giá trị mặc định nó là 0, chiều rộng của JTextField sẽ được tính dựa vào văn bản. Nếu cả 2 văn bản và columns không được cung cấp thì chiều rộng của nó sẽ nhỏ tối đa.

Ví dụ tạo 2 JTextFiled trong JFrame

import javax.swing.*;

public class JTextFieldExample {

    public static void main(String[] agrs) {
        JFrame mainFrame = new JFrame("JtextField Exampke");
        mainFrame.setSize(400, 150);
        JPanel panel = new JPanel();
        // khoi tao JTextField
        JTextField jTextField = new JTextField(10);

        JTextField jTextField1 = new JTextField(20);

        panel.add(jTextField);
        panel.add(jTextField1);
        mainFrame.add(panel);
        mainFrame.setVisible(true);

    }
}

Lấy String trong JTextField

Để lấy giá trị của String trong JTextField chúng ta có thể sử dụng getText() method.

String content = textField.getText()

Hoặc có thể tuỳ chọn vị trí bắt đầu của String và đọc với số lượng tối đa bao nhiêu ký tự thì làm như sau:

int offset = 5;
int length = 10;
 
try {
    content = textField.getText(offset, length);
} catch (BadLocationException ex) {
    // invalid offset/length
}

 Đoạn code trên sẽ sẽ trả về 10 ký tự từ vị trí thứ 5 trong văn bản.

Tạo Tooltip cho JTextField

Đôi khi đoạn văn bản của chúng ta quá nhiều và không thể hiển thị đầy đủ trên JTextField, hay bạn muốn hiển thị một thông điệp gì đó khi người dùng rê chuột vào một JTextField thì các bạn có thể sử dụng setToolTipText() method

public class JTextFieldExample {

    public static void main(String[] agrs) {
        JFrame mainFrame = new JFrame("JtextField Exampke");

        mainFrame.setSize(400, 150);
        JPanel panel = new JPanel();
        JTextField jTextField = new JTextField(10);
        jTextField.setToolTipText("Tooltip here!");
        panel.add(jTextField);
        mainFrame.add(panel);
        mainFrame.setLocationRelativeTo(null);
        mainFrame.setVisible(true);
    }
}

Focus vào một JTextField

Thông thường JTextField sẽ ở trạng thái khi người dùng nhấp chuột vào đó, tuy nhiên chúng ta vẫn có thể xử lý chuyện này với code thông qua requestFocusInWindow() method.

textField.requestFocusInWindow();

Xử lý sự kiện trong JTextField

Việc thêm một sự kiện cho JTextField thông thường được dùng để kiểm tra xem người dùng đang nhập những gì từ đó có chương trình có thể làm những tác vụ tiếp theo, ví dụ JTextFiled dùng để tra từ điển thì khi người dùng đang nhập từng chữ thì có chúng ta thể tìm kiếm dưới database trước và hiển thị lên giao diện gợi ý cho người dùng. Hay kiểm tra lỗi realtime, mỗi ký tự nhập vào là kiểm tra lỗi luôn chẳng hạn.

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

public class JTextFieldExample {

    public static void main(String[] agrs) {
        JFrame mainFrame = new JFrame("JtextField Exampke");

        mainFrame.setSize(400, 150);
        JPanel panel = new JPanel();
        JTextField jTextField = new JTextField(10);
        jTextField.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent event) {
                System.out.println("key typed");
            }

            @Override
            public void keyReleased(KeyEvent event) {
                System.out.println("key released");
            }

            @Override
            public void keyPressed(KeyEvent event) {
                System.out.println("key pressed");
            }
        });
        panel.add(jTextField);
        jTextField.requestFocusInWindow();
        mainFrame.add(panel);
        mainFrame.setLocationRelativeTo(null);
        mainFrame.setVisible(true);


    }
}

Select các ký tự trong JTextFiled

Hành động này tương tự với việc người dùng nhấp chuột và kéo bôi những đoạn văn bản họ muốn.

Ví dụ chọn tất cả các văn bản trong JTextField

	
textField.selectAll();

Chọn các ký tự từ một vị trí bắt đầu và kết thúc được chỉ định

textField.setSelectionStart(8);
textField.setSelectionEnd(12);

Tuỳ biến JTextField

Với JTextField chúng ta có thể tuỳ biến nó trong một số trường hợp sau:

Vô hiệu hoá tính năng chỉnh sửa, tính năng này thường được dùng khi JTextField này không thể nhập dữ liệu đối với một số trường hợp cụ thể.

textField.setEditable(false);

Căn chỉnh văn bản ở giữa

 

textField.setHorizontalAlignment(JTextField.CENTER)

Chúng ta có thể tuỳ chỉnh bằng các hằng số khác tuỳ vào nhu cầu sử dụng

  • JTextField.LEFT
  • JTextField.CENTER
  • JTextField.RIGHT
  • JTextField.LEADING
  • JTextField.TRAILING

Có thể chỉ định font chữ, kích thước, màu nền

textField.setFont(new java.awt.Font("Arial", Font.ITALIC | Font.BOLD, 12));
textField.setForeground(Color.BLUE);
textField.setBackground(Color.YELLOW);

Nguồn tham khảo

https://www.codejava.net/java-se/swing/jtextfield-basic-tutorial-and-examples

Leave a Comment

Your email address will not be published. Required fields are marked *