[JavaSwing] JButton
Nội dung
Tạo JButton đơn giản
Các cách tạo Action
Đặt margin
JButton là một đối tượng mà cho phép chúng ta khi click chuột vào sẽ thực hiện một việc gì đó.
Ví dụ button “Tính” dưới đây, khi click chuột vào thì sẽ tính tiền lãi dựa vào các thông tin đã nhập trong các JTextField
Ví dụ 1: Tạo một JButton đơn giản
package nguyenvanquan7826.JButton; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class MyJButton extends JFrame { private JLabel lb; public MyJButton() { // create JFrame setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setLayout(new GridLayout(2, 1, 5, 5)); // create JLabel lb = new JLabel("My JLabel"); lb.setHorizontalAlignment(JLabel.CENTER); add(lb); // create JButton with text "Click Button" JButton btn = new JButton("Click Button"); // add action btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { changeTextJLabel(); } }); add(btn); // display JFrame setLocationRelativeTo(null); setVisible(true); } // change text of lb private void changeTextJLabel() { lb.setText("You are clicked JButton"); } public static void main(String[] args) { new MyJButton(); } }
Một số điểm lưu ý
* Khởi tạo JButton: chúng ta có một số phương thức khởi tạo JButton
– JButton() : Tạo một Button không có text hoặc icon
– JButton(Action a) : Tạo một Button có thuộc tính được lấy từ một Action
– JButton(Icon icon) : Tạo một Button chỉ định một icon
– JButton(String text) : Tạo một Button chỉ định text
– JButton(String text, Icon icon) : Tạo một Button chỉ định text và icon
* Tạo action cho Jbutton ta sử dụng phương thức addActionListener của JButton để thực hiện việc này. Sau đó có thể tạo mới 1 ActionListener ngay trong đó như ví dụ trên. Các bạn chỉ cần viết new Action sau đó ấn Ctrl + Space (cách) NetBean hoặc Eclipse sẽ hiển thị cho các bạn danh sách các phương thức và interface, bạn chọn ActionListener() nó sẽ tự động tạo phương thức ActionPerformed() cho các bạn. Sau đó chúng ta gọi phương thức changeTextJLabel() để thay đổi text của JLabel khi ta click vào button. Lưu ý do ta tạo mới cái ActionListener ngay trong addActionListener nên không thể gọi trực tiếp setText của JLabel. Nếu muốn gọi trực tiếp ta cần gọi thông qua tên class: MyJButton.lb.setText(), tuy nhiên chúng ta ít làm theo cách này.
Ví dụ 2: Các cách tạo và bắt sự kiện JButton
package nguyenvanquan7826.JButton; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class JButtonAction extends JFrame implements ActionListener { private JButton btnGreen; private JLabel lb; public JButtonAction() { // create JFrame setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(200, 300); setLayout(new GridLayout(3, 1, 5, 5)); // add JFrame content lb = new JLabel("Background default"); lb.setOpaque(true); add(lb); btnGreen = createJButton("Green"); add(btnGreen); add(createJButton("Blue")); // display JFrame setLocationRelativeTo(null); setVisible(true); } // create JButton with text is title private JButton createJButton(String title) { JButton btn = new JButton(title); // add action for JButton btn.addActionListener(this); return btn; } // change text and background of JLabel when click button private void changeBackgroundJLabel(Color bgcolor, String nameBgcolor) { lb.setBackground(bgcolor); lb.setText("Background is " + nameBgcolor); } @Override public void actionPerformed(ActionEvent e) { // click button green if (e.getSource() == btnGreen) { changeBackgroundJLabel(Color.green, "Green"); } // click button blue if (e.getActionCommand() == "Blue") { changeBackgroundJLabel(Color.blue, "Blue"); } } public static void main(String[] args) { new JButtonAction(); } }
Trong ví dụ 2 này chúng ta tạo một JLabel và 2 JButton được đặt trong một GriLayour với 3 hàng và 1 cột. Khi click vào button “Green” hoặc “Blue” thì text và background của JLabel được thay đổi.
2 cách tạo và bắt sự kiện trong ví dụ này cũng khác hoàn toàn so với ví dụ trước. Ở đây chúng ta implements Interface ActionListener để phục vụ việc lắng nghe sự kiện. Khi implements Interface này thì chúng ta cần phải Override phương thức actionPerfomed() của nó để thực hiện việc lắng nghe sự kiện. Đối của phương thức này là 1 ActionEvent e, đây chính là sự kiện mà nó nghe được.
Để biết được chính xác button nào được ấn thì ta cần so sánh nó với các button. Đối với btnGreen, nó là 1 biến “toàn cục” của class nên ta có thể so sánh bằng cách dùng e.getSource() == btnGreen để kiểm tra, tuy nhiên với button Blue thì nó không phải vậy mà nó là một JButton được tạo trong phương thức createJButton() nên muốn kiểm tra được nó ta so sánh với nhãn text của nó bằng lệnh e.getActionCommand() == “Blue”.
Bạn lại chú ý lên phương thức createJButton() nó trả về 1 JButton. Các button được tạo bới phương thức này cần được addActionListener(this). Vì chúng ta đã implements Interface ActionListener nên phương thức này có đối là this tức là tác động đến chính cái ActionListener đó do đó mà các button có thể nghe được sự kiện.
Đặt Magin cho JButton:
Nếu text của Jbutton hơi dài quá so với kích thước của nó, bạn có thể đặt khoảng cách giữa biên của button tới text bằng cách dùng phương thức:
setMargin(new Insets(int bottom, int left, int right, int top));
VD: btn.setMargin(new Insets(0, 0, 0, 0)); text sẽ cách các biên là 0 (sát biên).
Tham khảo thêm: Class JButton, Use Button
thanks bác nhé! bài viết rất hay
Cảm ơn bạn. Ghé thăm blog thường xuyên nhé. 😀
a Nguyenvanquan7826, e mới bắt đầu với JFrame trong NetBeans, e tạo 1 form đăng nhập và 1 form giao diện chính của chương trình, a cho e hỏi là làm thế nào khi click vào button login trên form đăng nhập thì form đăng nhập sẽ ẩn đi và đưa ra giao diện chính luôn, thk a
Giả sử giao diện chính là MainFrame.
Khi ấn button login thì thực hiện lệnh
new MainFrame
và setVisibale cho Frame Login là fale.
Mình có 2 frame. Main với login. Muốn mỗi lần login thì frame login sẽ trả về cho frame main một giá trị boolean .thành công sẽ trả về true. Giúp e với admin. Đang bị cấn. Email e: sonitiuh@gmail.com.
Bạn là lập trình viên à
Đúng vậy. Có vấn đề gì không bạn?
anh ơi trong ví dụ đầu có lỗi ở dòng 25 runtimeException.
em nhầm ạ. em làm lại bị thiếu :)))
NẾU MÌNH MUỐN 1 LÚC CÓ 3 button chứ ko phải từng cái riêng biệt thì phải ntn ạ.do e vừa học java cơ bản mà cách code nó khác với cách của a
Thì bạn cứ tạo 3 button rồi bắt sự kiện cho nó thôi. 🙂 Bên trên mình hướng dẫn rùi.