Java Swing - Swing trong Java



Java Swing là một phần của Java Foundation Classes (JFC) được sử dụng để tạo các ứng dụng Window-Based. Nó được xây dựng ở trên cùng của AWT (Abstract Windowing Toolkit) API và được viết hoàn toàn bằng Java.

Không giống AWT, Java Swing cung cấp các thành phần (Component) gọn nhẹ và độc lập nền tảng. Javax.swing. Package cung cấp các lớp cho Java Swing chảng hạn như JButton, JTextField, JTextArea, JRadioButton, JCheckbox, JMenu, JColorChooser, …

Điểm khác nhau giữa AWT và Swing

Bảng dưới đây liệt kê một số điểm khác nhau giữa AWT và Swing:

Ghi chú: Đối tượng L&F là viết tắt của Look and Feel, bạn có thể hiểu đó là đối tượng thuộc về cảm quan.

Java AWT Java Swing
Các thành phần AWT là phụ thuộc nền tảng Các thành phần Java Swing là độc lập nền tảng
Các thành phần AWT là nặng Các thành phần Swing là gọn nhẹ
AWT không hỗ trợ pluggable L&F Swing hỗ trợ pluggable L&F
AWT cung cấp ít thành phần hơn Swing Swing cung cấp các thành phần mạnh mẽ hơn như table, list, scrollpanes, colorchooser, tabbedpane ...
AWT không theo sau MVC (Model View Controller), ở đây model biểu diễn dữ liệu, view biểu diễn sự trình bày và controller hoạt động như một Interface giữa model và view Swing theo sau MVC

Câu hỏi: JFC là gì?

Java Foundation Classes (JFC) là một tập hợp các thành phần GUI giúp đơn giản hóa việc phát triển các ứng dụng Destop.

Cấu trúc thứ bậc của các lớp trong Java Swing

Sơ đồ dưới đây cung cấp cho các bạn cái nhìn tổng quan về cấu trúc theo thứ bậc của các lớp trong Java Swing.

Cấu trúc Swing

Các phương thức được sử dụng phổ biến của lớp Component

Trong bảng sau, chúng tôi liệt kê một số phương thức thường được sử dụng trong Java Swing.

Phương thức Miêu tả
public void add(Component c) Thêm một thành phần trên một thành phần khác
public void setSize(int width,int height) Thiết lập kích cỡ của thành phần
public void setLayout(LayoutManager m) Thiết lập Layout Manager cho thành phần
public void setVisible(boolean b) Thiết lập tính nhìn thấy (visible) của thành phần. Theo mặc định là false

Một số ví dụ cơ bản về Java Swing

Có hai cách để tạo một Frame:

  • Bởi tạo đối tượng của lớp Frame (quan hệ kết hợp - Association)

  • Bởi kế thừa lớp Frame (quan hệ kế thừa - inheritance)

Bạn có thể viết code của Swing bên trong phương thức main(), constructor hoặc bất cứ phương thức nào khác.

Ghi chú: Có lẽ bây giờ bạn có thể chưa hiểu khi theo dõi các ví dụ này, nhưng hãy cứ làm quen dần trước đã. Sau khi theo dõi hết loạt bài, bạn sẽ thấy chúng trở nên dễ dàng hơn.

Ví dụ

Trong chương trình ví dụ về Java Swing sau, chúng ta tạo một button và thêm nó trên đối tượng JFrame bên trong phương thức main().

File: FirstSwingExample.java

import javax.swing.*;  
public class FirstSwingExample {  
public static void main(String[] args) {  
JFrame f=new JFrame();//Tao instance cua JFrame  
          
JButton b=new JButton("click");//Tao instance cua JButton  
b.setBounds(130,100,100, 40);//truc x, truc y, do rong, chieu cao  
          
f.add(b);//Them button vao trong JFrame  
          
f.setSize(400,500);//Do rong la 400 va chieu cao la 500  
f.setLayout(null);//Khong su dung Layout Manager  
f.setVisible(true);//Tao Frame la co the nhin thay (visible)  
}  
}  

Ví dụ về Swing bởi quan hệ kết hợp bên trong Constructor

Chúng ta có thể viết tất cả code để tạo JFrame, JButton và lời gọi phương thức bên trong Java Constructor.

File: Simple.java

import javax.swing.*;  
public class Simple {  
JFrame f;  
Simple(){  
f=new JFrame();//Tao instance cua JFrame  
          
JButton b=new JButton("click");//Tao instance cua JButton  
b.setBounds(130,100,100, 40);  
          
f.add(b);//Them button vao trong JFrame  
          
f.setSize(400,500);//Do rong la 400 va chieu cao la 500  
f.setLayout(null);//Khong su dung Layout Manager  
f.setVisible(true);//Tao Frame la co the nhin thay (visible)  
}  
  
public static void main(String[] args) {  
new Simple();  
}  
}  

Phương thức setBounds(int xaxis, int yaxis, int width, int height) được sử dụng trong ví dụ trên để thiết lập vị trí của button.

Ví dụ về Swing bởi quan hệ kế thừa

Bạn cũng có thể kế thừa lớp JFrame, vì thế bạn không cần tạo instance của lớp JFrame một cách tường minh.

File: Simple2.java

import javax.swing.*;  
public class Simple2 extends JFrame{//Ke thua JFrame 
JFrame f;  
Simple2(){  
JButton b=new JButton("click");//Tao button  
b.setBounds(130,100,100, 40);  
          
add(b);//Them button tren frame  
setSize(400,500);  
setLayout(null);  
setVisible(true);  
}  
public static void main(String[] args) {  
new Simple2();  
}}  

Biên dịch và chạy các chương trình ví dụ trong bài

Để biên dịch các chương trình ví dụ trên cũng như các chương trình trong bài, bạn sử dụng command prompt. Vào D:/ > SWING và gõ lệnh sau (chẳng hạn với ví dụ này).

D:\SWING>javac com\vietjack\gui\Simple2.java

Nếu không có lỗi nào xảy ra, tức là việc biên dịch chương trình của bạn đã thành công. Bạn chạy chương trình bởi sử dụng lệnh sau:

D:\SWING>java com.vietjack.gui.Simple2