[Java Swing] JRadioButton trong Java – JRadioButton in java
Nội dung
Tạo JRadioButton
Đặt JRadioButton vào nhóm
Bắt sự kiện cho JRadioButton
JRadioButton là một đối tượng cho phép chúng ta chọn lựa các thuộc tính giốn như JCheckBox. Tuy nhiên chúng ta hay sử dụng JRadioButton khi mà muốn người dùng chỉ chọn được một trong các thuộc tính. Ví dụ chọn giới tính thì người dùng chỉ được chọn là Nam hoặc Nữ.
Cách tạo JRadioButton – How to create JRadioButton
Để tạo được JRadioButton chúng ta dùng một trong các hàm khởi tạo sau:
– JRadioButton(): Tạo JRadioButton không có text, không được chọn trước.
– JRadioButton(Action a): Tạo JRadioButton với sự kiện a
– JRadioButton(Icon icon): Tạo JRadioButton với icon
– JRadioButton(Icon icon, boolean selected): Tạo JRadioButton với icon và đặt là được chọn hay không
– JRadioButton(String text): Tạo JRadioButton với text
– JRadioButton(String text, boolean selected): Tạo JRadioButton với text và đặt là được chọn hay không
– JRadioButton(String text, Icon icon): Tạo JRadioButton với text và icon
– JRadioButton(String text, Icon icon, boolean selected): Tạo JRadioButton với text, icon và đặt lựa chọn.
Bây giờ chúng ta sẽ thực hiện tạo JFrame gồm 2 JRadioButton là Boy và Girl (Boy được chọn mặc định) cùng với 1 JLabel để hiển thực hiện hiển thị kết quả khi chọn JRadioButton.
package nguyenvanquan7826.JRadioButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; public class MyRadioButton extends JFrame { private JRadioButton radBoy, radGirl; private JLabel lbGender; public MyRadioButton() { // add main panel add(createMainPanel()); // set display setTitle("JRadioButton"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(200, 100); setLocationRelativeTo(null); setVisible(true); } // create main panel private JPanel createMainPanel() { JPanel panel = new JPanel(); // add two radiobutton and a label to frame panel.add(radBoy = createRadioButton("Boy", true)); panel.add(radGirl = createRadioButton("Girl", false)); panel.add(lbGender = createLabel("You are a boy")); return panel; } // create a JRadioButton with name private JRadioButton createRadioButton(String name, boolean select) { JRadioButton rad = new JRadioButton(name, select); return rad; } // create a JLabel with text private JLabel createLabel(String text) { JLabel lb = new JLabel(text); return lb; } public static void main(String[] args) { new MyRadioButton(); } }
Vậy là đã tạo được JRadioButton, tuy nhiên khi bạn chọn giới tính thì không có hiện tượng gì xảy ra với JLabel cả, thậm chí là cùng một lúc có thể chọn cả 2 JRadioButton. Vậy làm sao để chỉ chọn được một JRadioButton? làm sao để bắt sự kiện cho JRadioButton?
Đặt JRadioButton vào nhóm – Set group for JRadioButton
Để làm được việc mà chỉ cho phép người dùng chọn một trong các JRadioButton chúng ta cần đặt các JRadioButton vào một nhóm – ButtonGroup. Tức là chúng ta cần tạo ra một ButtonGroup và đặt chúng vào trong ButtonGroup đó. Bạn sửa lại code của phương thức createMainPanel() như sau:
private JPanel createMainPanel() { JPanel panel = new JPanel(); // add two radiobutton and a label to frame panel.add(radBoy = createRadioButton("Boy", true)); panel.add(radGirl = createRadioButton("Girl", false)); panel.add(lbGender = createLabel("You are a boy")); // create ButtonGroup for radBoy and radGirl ButtonGroup genderGroup = new ButtonGroup(); // add radBoy and radGirl into Group genderGroup.add(radBoy); genderGroup.add(radGirl); return panel; }
Vậy là giờ chúng ta chỉ được chọn Boy hoặc Girl.
Bắt sự kiện cho JRadioButton – Action on JRadioButton
Tiếp theo sẽ là bắt sự kiện cho JRadioButton, nó tương tự như bắt sự kiện cho JCheckBox. Chúng ta cần implements giao diện ItemListener để thực hiện addItemListener cho các JRadioButton. Tiếp theo là viết phương thức itemStateChanged để bắt sự kiện. Kiểm tra một JRadioButton được chọn hay không bằng phương thức isSelected().
Chúng ta sửa lại phương thức createRadioButton như sau:
private JRadioButton createRadioButton(String name, boolean select) { JRadioButton rad = new JRadioButton(name, select); rad.addItemListener(this); return rad; }
Tiếp theo là bắt sự kiện trong phương thức itemStateChanged
private void changeSelect() { lbGender.setText("You are a " + (radBoy.isSelected() ? "boy" : "girl")); } @Override public void itemStateChanged(ItemEvent e) { changeSelect(); }
Code hoàn chỉnh của chúng ta như sau:
package nguyenvanquan7826.JRadioButton; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; public class MyRadioButton extends JFrame implements ItemListener { private JRadioButton radBoy, radGirl; private JLabel lbGender; public MyRadioButton() { // add main panel add(createMainPanel()); // set display setTitle("JRadioButton"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(200, 100); setLocationRelativeTo(null); setVisible(true); } // create main panel private JPanel createMainPanel() { JPanel panel = new JPanel(); // add two radiobutton and a label to frame panel.add(radBoy = createRadioButton("Boy", true)); panel.add(radGirl = createRadioButton("Girl", false)); panel.add(lbGender = createLabel("You are a boy")); // create ButtonGroup for radBoy and radGirl ButtonGroup genderGroup = new ButtonGroup(); // add radBoy and radGirl into Group genderGroup.add(radBoy); genderGroup.add(radGirl); return panel; } // create a JRadioButton with name private JRadioButton createRadioButton(String name, boolean select) { JRadioButton rad = new JRadioButton(name, select); rad.addItemListener(this); return rad; } // create a JLabel with text private JLabel createLabel(String text) { JLabel lb = new JLabel(text); return lb; } private void changeSelect() { lbGender.setText("You are a " + (radBoy.isSelected() ? "boy" : "girl")); } @Override public void itemStateChanged(ItemEvent e) { changeSelect(); } public static void main(String[] args) { new MyRadioButton(); } }
Đọc thêm: class JRadioButton, use JRadioButton
cho em hỏi :còn khi mình có một mảng JRadioButton thì làm sao để bắt sự kiện cho từng phần tử trong mảng được ItemListenner được?
Nếu nhiều thì có thể bắt như button bình thường băng cách addActionListener cho các phần tử.
cho em hỏi em có 3 nút button khi em kick vào nhưng cái khác nhau thì các JRadioButton sẽ thay đổi thì phải làm như thế nào à.
Bạn bắt sự kiện cho nó. Trong onclick thay đổi radio select là được.
em vẫn không hiểu anh à 😀 anh có thể viết ra cho em xem được không
a ơi cho e hỏi với ạ. để bắt sự kiện cho radiobutton mà khi ấn chọn sẽ mở ra một giao diện khác thì như thế nào ạ?
Bạn làm như với JButton
a ơi e dùng RadiobuttonMenuItem vì dùng nhiều nút. e bắt thế này mà chạy n k ra. @Override
public void itemStateChanged(ItemEvent e) {
if(rb1.isSelected()){
LopClient1 c=new LopClient1();
}
}
Bạn thử addActionPerfrom xem
anh ơi .em muốn đặt lại giá trị mặc định cho cả 2 nút là false thì làm sao ạ.k phải khởi tạo giá tri ban đầu a nhé.e muốn set lại sao khi mình khởi tạo ý ạ
Bạn setSelect cho nó nhé
Các Bài tutorial rõ ràng dễ hiểu. thanks alot