Sử dụng JCheckbox – Swing để đưa ra các tuỳ chọn cho người dùng

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu JCheckBox trong Java Swing. Về cơ bản thì JCheckBox là một CheckBox component trong Swing để đại diện cho một ý định nào đó được người dùng chọn hay không chọn.

Khởi tạo JCheckBox

Trong Java Swing, JCheckBox kế thừa từ AbstractButton và JToggleButton, vì thế nó có hầu hết các đặc điểm của 2 class cha này. Chúng ta có một số hàm khởi tạo trong JCheckBox như:

  • JCheckBox() – Tạo JCheckBox mặc định không chứa bất kỳ văn bản và icon nào.
  • JCheckBox(Icon i) – Tạp JCheckBox với icon được chỉ định.
  • JCheckBox(Icon i, boolean selected) – Tạo CheckBox với Icon được chỉ định và giá trị boolean – selected là giá trị mặc định ban đầu xem checkbox này có được chọn hay không.
  • JCheckBox(String text, boolean selected) – Tạo CheckBox với văn bản được chỉ định và giá trị boolean – selected là giá trị mặc định ban đầu xem checkbox này có được chọn hay không.
  • JCheckBox(String text, Icon) – Tạo JCheckBox với Icon và văn bản được chỉ định.
  • JCheckBox(String text, Icon, boolean selected) – Tạo JCheckBox với Icon và văn bản được chỉ định  và giá trị boolean – selected là giá trị mặc định ban đầu xem checkbox này có được chọn hay không.

Một số method thường sử dụng trong JCheckBox

Một số hàm xử lý sự kiện:

  1. addActionListener(ItemListener l): Thêm một ItemListener vào JCheckBox.
  2. itemStateChanged(ItemEvent e) : Một abstract method, được gọi khi trạng thái của CheckBox thay đổi.
  3. getItem() :Trả về một đối tượng liên quan đến Item đang được chọn.
  4. getStateChange() : Trả về trạng thái mới nhất của Checkbox, 
  5. getSource() : Trả về component  đã kích hoạt item event.

Một số hàm thông dụng trên JCheckBox:

  1. setIcon(Icon i) – Chỉ định Icon cho checkbox.
  2. setText(String text) – Chỉ định văn bản hiển thị trên checkbox.
  3. setSelected(boolean selected) – Chuyển trạng thái của checkbok thành selected tương ứng nếu TRUE thì checkbox thì ở trạng thái được chọn ngược lại là không chọn.
  4. getIcon() – Trả về Icon hiện tại của checkbox.
  5. getText() – Trả về văn bản được hiển thị trên checkbox.
  6. updateUI() – Cập nhập giao diện của checkbox với các giá trị mới.
  7. getUI() – Trả về giao diện hiển thị checkbox.
  8. paramString() – Trả về một biểu diễn chuỗi của JCheckBox này.
  9. getUIClassID() – Trả về tên của lớp Giao diện hiển thị thành phần này.
  10. getAccessibleContext() – Lấy AccessibleContext được liên kết với JCheckBox này.
  11. isBorderPaintedFlat() – Nhận giá trị của thuộc tính borderPaintedFlat
  12. setBorderPaintedFlat(boolean b) – Đặt thuộc tính borderPaintedFlat.

Ví dụ sử dụng JCheckBox

Ví du tạo 5 JCheckBox lần lượt với tên là Apple, Banana, Grape, Orangle và Pear. Trong đó Apple, Grape và Pear mặc định sẽ được chọn.
import javax.swing.*;

class simpleCheckbox {

    public static void main(String[] args) {
        // Create and set up a frame window
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("Simple checkbox demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Define the panel to hold the checkbox
        JPanel panel = new JPanel();

        // Create checkbox with different constructors
        JCheckBox checkbox1 = new JCheckBox("Apple", true);
        JCheckBox checkbox2 = new JCheckBox("Banana");
        JCheckBox checkbox3 = new JCheckBox("Grape", true);
        JCheckBox checkbox4 = new JCheckBox("Orange");
        JCheckBox checkbox5 = new JCheckBox("Pear", true);

        // Set up the title for the panel
        panel.setBorder(BorderFactory.createTitledBorder("Fruits"));

        // Add the checkbox into the panels
        panel.add(checkbox1);
        panel.add(checkbox2);
        panel.add(checkbox3);
        panel.add(checkbox4);
        panel.add(checkbox5);

        // Add the panel into the frame
        frame.add(panel);

        // Set the window to be visible as the default to be false
        frame.pack();
        frame.setVisible(true);

    }

}

Output


Xử lý sự kiện trong JCheckBox

Xử ký sự kiện trong CheckBox là một phần không thể thiếu, khi người dùng chọn vào các CheckBox tương ứng. 

Ví dụ tạo CheckBox khi được chọn sẽ hiển thị ra màn hình “Checkbox được chọn”, khi bỏ chọn sẽ hiển thị ra màn hình “Checkbox bị bỏ chọn”.

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

class checkboxWithEvent {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Checkbox with event listener");
        frame.setSize(500, 300);
        // Define the panel to hold the checkbox
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        JLabel msg = new JLabel("", JLabel.CENTER);

        // Set up the title for the panel
        panel1.setBorder(BorderFactory.createTitledBorder("Name"));
        panel2.setBorder(BorderFactory.createTitledBorder("Output"));

        JCheckBox jCheckBox = new JCheckBox("JCheckBox");

        // Add the checkbox into the panels
        panel1.add(jCheckBox);

        panel2.add(msg);

        // Add action listener
        jCheckBox.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == 1) {
                    msg.setText("CheckBox duoc chon");
                } else {
                    msg.setText("Checkbox bi bo chon");
                }
            }
        });


        // Add the panel into the frame
        frame.setLayout(new GridLayout(2, 2));
        frame.getContentPane().add(panel1);
        frame.getContentPane().add(panel2);

        frame.setVisible(true);
    }


}

Output

Mới khởi chạy

Nhấp vào Checkbox

Cuối cùng bỏ chọn

Cách tạo Mnemonic key cho JCheckBox

Mnemonic key là một phím tắt nhanh dùng để gán cho các JCheckbox thường được sử dụng nhiều. 

Ví dụ tạo 4 Checkbox và tạo Mnemonic key cho JCheckBoxA, khi chúng ta nhấn ALT + A thì CheckBox này sẽ được chọn tương tự như hành động nhấp chuột của người dùng. Sử dụng setMnemonic() method để làm được điều như trên:

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

public class Main {

    public static void main(String[] args) {
        JCheckBox a = new JCheckBox("A");
        a.setSelected(true);
        a.setMnemonic(KeyEvent.VK_A);


        JCheckBox b = new JCheckBox("B");
        JCheckBox c = new JCheckBox("C");
        JCheckBox d = new JCheckBox("D");

        JFrame frame = new JFrame();
        frame.setLayout(new FlowLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(new JLabel("Car Features"));
        frame.add(a);
        frame.add(b);
        frame.add(c);
        frame.add(d);
        frame.pack();
        frame.setVisible(true);
    }
}

Tạo tooltip cho JCheckbox

Tooltip là một dạng khi người dùng rê chuột vào JCheckBox thì nó sẽ hiển thị một đoạn văn bản có thể dùng để mô tả một ý gì đó từ nhà phát triển. Chúng ta có thể làm điều này với setToolTipText() method.

import java.awt.BorderLayout;

import javax.swing.JCheckBox;
import javax.swing.JFrame;

public class Main {
    public static void main(String args[]) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JCheckBox checkBox = new JCheckBox("A");

        checkBox.setToolTipText("Italic font");

        frame.add(checkBox, BorderLayout.NORTH);
        frame.setSize(300, 100);
        frame.setVisible(true);
    }
}

Output

Vô hiệu hoá CheckBox

Một số trường hợp bạn cần vô hiệu hoá CheckBox không cho người dùng lựa chọn nó, có thể là giá trị  của Checkbox này không có giá trị so với ngữ cảnh hiện tại chẳng hạn. Các bạn có thể sử dụng setEnabled(false) trong trường hợp này.

import java.awt.BorderLayout;

import javax.swing.JCheckBox;
import javax.swing.JFrame;

public class Main {
    public static void main(String args[]) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JCheckBox checkBox = new JCheckBox("A");
        checkBox.setEnabled(false);
        frame.add(checkBox, BorderLayout.NORTH);
        frame.setSize(300, 100);
        frame.setVisible(true);
    }
}

Nguồn tham khảo

https://examples.javacodegeeks.com/desktop-java/swing/java-swing-checkbox-example/

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

https://www.geeksforgeeks.org/java-swing-jcheckbox-examples/

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