Ngôn ngữ lập trình Java là một ngôn ngữ lập trình có nhu cầu sử dụng ngày càng cao, do đó việc nắm vững tất cả các khái niệm trong lập trình Java trở nên vô cùng quan trọng.
Swing là một trong số những khái niệm quan trọng trong Java.
Nó là một bộ công cụ có trọng lượng nhẹ, hỗ trợ các nhà lập trình tạo giao diện đồ hoạ người dùng.
Trong bài này chúng ta sẽ đi qua cái khái niệm về Java Swing và cách ứng dụng chúng nhé!
1. Java Swing là gì?
Java Swing là cách gọi rút gọn khi người ta nhắc đến Swing của Java Foundation (JFC). Nó là bộ công cụ GUI mà Sun Microsystems phát triển để xây dựng các ứng dụng tối ưu dùng cho window (bao gồm các thành phần như nút, thanh cuộn,…).
Swing được xây dựng trên AWT API và hoàn toàn được viết bằng Java. Tuy nhiên, nó lại khác với AWT ở chỗ bộ công cụ này thuộc loại nền tảng độc lập, bao gồm các thành phần nhẹ và phức tạp hơn AWT.
Các gói javax.swing bao gồm các lớp cho Java Swing API như JMenu, JButton, JTextField, JRadioButton, JColorChooser,…
Việc xây dựng ứng dụng sẽ trở nên dễ dàng hơn với Java Swing vì chúng ta có các bộ công cụ GUI giúp đỡ công việc.
Swing được chính thức phát hành vào tháng 3/1998. Nó đi kèm với thư viện Swing 1.0 với hơn 250 lớp, 80 giao tiếp.
Hiện nay con số này đã được tăng lên, ở phiên bản Swing 1.4 có 451 lớp và 85 giao tiếp.
Các bản phát hành Java 2 (SDK 1.2 và các phiên bản mới hơn) đều bao gồm Swing trong runtime environment.
2. Ứng dụng của Java Swing
Java Swing được dùng để hỗ trợ tạo giao diện đồ hoạ người dùng (với Java).
Bộ công cụ này cung cấp các bộ điều khiển nâng cao như thanh trượt, colorpicker, Tree, TabbedPane và bảng điều khiển,..
Swing có những đặc điểm:
Độc lập với thiết bị
Có thể tuỳ chỉnh, mở rộng
Khá nhẹ
Có thể cấu hình
Ngoài ra bạn cũng có thể tùy chỉnh các điều khiển xoay một cách dễ dàng mà không ảnh hưởng đến các thành phần khác.
3. Sự khác biệt giữa AWT và Swing
No. | Java AWT | Java Swing |
1) | Phụ thuộc nền tảng (Platform Dependent) | Độc lập với nền tảng (Platform Independent) |
2) | Thành phần của AWT nặng | Thành phần của Swing khá nhẹ |
3) | AWT không hỗ trợ pluggable look and feel. | Swing hỗ trợ pluggable look and feel. |
4) | AWT có ít thành phần hơn Swing | Swing cung cấp nhiều thành phần và các thành phần cũng mạnh mẽ hơn AWT như: bảng, danh sách, cuộn màn hình, trình chọn màu,.. |
5) | AWT không tuân theo cấu trúc MVC (Model View Controller) | Swing theo cấu trúc MVC |
4. Cấu trúc phân cấp lớp Java Swing
Phân cấp của API Java swing như liệt kê ở hình dưới đây:
Chú thích: Tất cả các thành phần trong swing được kế thừa từ lớp Jcomponent như JButton, JComboBox, JList, JLabel đều có thể được thêm vào lớp Container.
Container là các window như Frame và Dialog. Các container này chỉ có thể thêm một thành phần vào chính nó.
5. Các phương thức được sử dụng phổ biến của Component Class
Có một số phương thức trong lớp Component được sử dụng khá phổ biến, đó là:
Phương thức | Mục đích |
public void add(Component c) | Bổ sung một thành phần trên một phần khác |
public void setSize(int width,int height) | Để cài đặt và tùy chỉnh kích cỡ của thành phần (chiều rộng, chiều cao) |
public void setLayout(LayoutManager m) | Để cài đặt Layout Manager cho thành phần |
public void setVisible(boolean b) | Để cài đặt tính nhìn thấy được (visible) của thành phần. Theo mặc định là false. |
6. Hướng dẫn học lập trình Java Swing từ A đến Z
Dưới đây là một số ví dụ đơn giản để tạo GUI bằng Swing trong Java:
JButton Class – Lớp JButton
Nó được dùng để tạo ra một nút (button) có tên.
Việc sử dụng ActionListener sẽ dẫn đến một số hành động khi nút được nhấn.
Nó kế thừa lớp AbstractButton và độc lập với nền tảng.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 | import javax.swing.*; public class example{ public static void main(String args[]) { JFrame a = new JFrame(“example”); JButton b = new JButton(“click me”); b.setBounds(40,90,85,20); a.add(b); a.setSize(300,300); a.setLayout(null); a.setVisible(true); } } |
Output:
JTextField Class – Lớp JTextField
Nó kế thừa lớp JTextComponent và dùng để cho phép chỉnh sửa dòng đơn
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 | import javax.swing.*; public class example{ public static void main(String args[]) { JFrame a = new JFrame(“example”); JTextField b = new JTextField(“edureka”); b.setBounds(50,100,200,30); a.add(b); a.setSize(300,300); a.setLayout(null); a.setVisible(true); } } |
Output:
JScrollBar Class – lớp JScrollBar
Dùng để thêm thanh cuộn (cả ngang và dọc)
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import javax.swing.*; class example{ example(){ JFrame a = new JFrame(“example”); JScrollBar b = new JScrollBar(); b.setBounds(90,90,40,90); a.add(b); a.setSize(300,300); a.setLayout(null); a.setVisible(true); } public static void main(String args[]){ new example(); } } |
Output:
JPanel Class – Lớp JPanel
Kế thừa lớp JComponent, cung cấp không gian cho một ứng dụng (có thể đính kèm bất kỳ thành phần nào khác).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import java.awt.*; import javax.swing.*; public class Example{ Example(){ JFrame a = new JFrame(“example”); JPanel p = new JPanel(); p.setBounds(40,70,200,200); JButton b = new JButton(“click me”); b.setBounds(60,50,80,40); p.add(b); a.add(p); a.setSize(400,400); a.setLayout(null); a.setVisible(true); } public static void main(String args[]) { new Example(); } } |
Output:
JMenu Class – Lớp JMenu
Kế thừa lớp JMenuItem, là một thành phần menu kéo xuống (hiển thị từ thanh menu).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import javax.swing.*; class Example{ JMenu menu; JMenuItem a1,a2; Example() { JFrame a = new JFrame(“Example”); menu = new JMenu(“options”); JMenuBar m1 = new JMenuBar(); a1 = new JMenuItem(“example”); a2 = new JMenuItem(“example1”); menu.add(a1); menu.add(a2); m1.add(menu); a.setJMenuBar(m1); a.setSize(400,400); a.setLayout(null); a.setVisible(true); } public static void main(String args[]) { new Example(); } } |
Output:
JList Class – Lớp JList
Kế thừa lớp JComponent, đối tượng của lớp Jlist đại diện cho danh sách các mục văn bản.
Next
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import javax.swing.*; public class Example { Example(){ JFrame a = new JFrame(“example”); DefaultListModel<String> l = new DefaultListModel< >(); l.addElement(“first item”); l.addElement(“second item”); JList<String> b = new JList< >(l); b.setBounds(100,100,75,75); a.add(b); a.setSize(400,400); a.setVisible(true); a.setLayout(null); } public static void main(String args[]) { new Example(); } } |
Output:
JLabel Class – Lớp JLabel
Được dùng để đặt văn bản trong vùng chứa, lớp JLabel cũng kế thừa lớp JComponent.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import javax.swing.*; public class Example{ public static void main(String args[]) { JFrame a = new JFrame(“example”); JLabel b1; b1 = new JLabel(“edureka”); b1.setBounds(40,40,90,20); a.add(b1); a.setSize(400,400); a.setLayout(null); a.setVisible(true); } } |
Output:
JComboBox Class- Lớp JComboBox
Kế thừa lớp JComponent, dùng để hiển thị menu lựa chọn bật lên.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import javax.swing.*; public class Example{ JFrame a; Example(){ a = new JFrame(“example”); string courses[] = { “core java”,”advance java”, “java servlet”}; JComboBox c = new JComboBox(courses); c.setBounds(40,40,90,20); a.add(c); a.setSize(400,400); a.setLayout(null); a.setVisible(true); } public static void main(String args[]) { new Example(); } } |
Output:
Layout Manager – Trình quản lý bố cục
Để sắp xếp các thành phần bên trong vùng chứa, chúng ta sử dụng Layout Manager.
Có một số bố cục như sau:
Border layout – Bố cục đường viền
Flow layout – Bố cục luồng
GridBag layout – Bố cục dạng khung
Border Layout
Trình quản lý bố cục mặc định tất cả JFrame là Border Layout.
Nó đặt các thành phần ở tối đa 5 vị trí: trên, dưới, trái, phải và trung tâm.
Flow Layout
Bố cục này đặt các thành phần lần lượt vào một hàng.
Đây là bố cục mặc định cho mọi JPanel.
GridBag Layout
GridBag Layout đặt các thành phần trong một lưới, nó cho phép các thành phần này trải dài hơn 1 ô.
Ví dụ: Dưới đây là một khung chat ở dạng Flow Layout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import javax.swing.*; import java.awt.*; class Example { public static void main(String args[]) { JFrame frame = new JFrame(“Chat Frame”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 400); JMenuBar ob = new JMenuBar(); JMenu ob1 = new JMenu(“FILE”); JMenu ob2 = new JMenu(“Help”); ob.add(ob1); ob.add(ob2); JMenuItem m11 = new JMenuItem(“Open”); JMenuItem m22 = new JMenuItem(“Save as”); ob1.add(m11); ob1.add(m22); JPanel panel = new JPanel(); // the panel is not visible in output JLabel label = new JLabel(“Enter Text”); JTextField tf = new JTextField(10); // accepts upto 10 characters JButton send = new JButton(“Send”); JButton reset = new JButton(“Reset”); panel.add(label); // Components Added using Flow Layout panel.add(label); // Components Added using Flow Layout panel.add(tf); panel.add(send); panel.add(reset); JTextArea ta = new JTextArea(); frame.getContentPane().add(BorderLayout.SOUTH, panel); frame.getContentPane().add(BorderLayout.NORTH, tf); frame.getContentPane().add(BorderLayout.CENTER, ta); frame.setVisible(true); } } |
Output:
Kết luận:
Trong bài viết trên, chúng ta đã thảo luận về Java Swing là gì, hệ thống phân cấp các lớp Swing Java.
Với tất cả các thành phần đi kèm với Swing trong Java, việc xây dựng các ứng dụng GUI được tối ưu hóa trở nên dễ dàng hơn.
Hy vọng thông qua bài viết này các bạn đã hiểu về Swing và biết cách ứng dụng nó khi sử dụng ngôn ngữ lập trình Java.
Và nếu bạn muốn tìm hiểu rõ hơn ngôn ngữ này, có thể tham gia ngay khóa học lập trình Java của Onschool Bootcamp.
Chúc các bạn thành công.