Java Swing 和 AWT 是 Java 提供的 GUI 工具包, 能夠方便地開發跨平臺的用戶界面, 但是 Java Swing 和 AWT 這幾十年來都沒有什么更新, 只是進行了少量的修補, 而且也存在一些局限性。
而 AWT 的問題是它的自然外觀。AWT 窗口使用本地機器的本地窗口管理器進行呈現,而 Java Swing 容器是托管的,意味著它根本不需要依靠本地機器來呈現。這使得 Java Swing 程序在不同操作系統上擁有一致的外觀感。
import javax.swing.*; import java.awt.event.*; public class JCalc extends JFrame implements ActionListener { JButton b1,b2,b3; JTextField t1,t2,t3; JLabel lbl1,lbl2,lbl3; public JCalc() { super("JCalc"); setLocation(100,100); setLayout(null); lbl1 = new JLabel("First No"); lbl1.setBounds(50,50,70,20); add(lbl1); t1 = new JTextField(10); t1.setBounds(130,50,100,20); add(t1); lbl2 = new JLabel("Second No"); lbl2.setBounds(50,80,70,20); add(lbl2); t2 = new JTextField(10); t2.setBounds(130,80,100,20); add(t2); b1 = new JButton("Add"); b1.setBounds(50,110,80,20); add(b1); b1.addActionListener(this); b2 = new JButton("Subtract"); b2.setBounds(140,110,80,20); add(b2); b2.addActionListener(this); lbl3 = new JLabel("Result"); lbl3.setBounds(50,140,70,20); add(lbl3); t3 = new JTextField(10); t3.setBounds(130,140,100,20); add(t3); b3 = new JButton("Clear"); b3.setBounds(100,170,80,20); add(b3); b3.addActionListener(this); setSize(300,300); setVisible(true); } public void actionPerformed(ActionEvent e) { int no1 = Integer.parseInt(t1.getText()); int no2 = Integer.parseInt(t2.getText()); int ans = 0; if(e.getSource() == b1) ans = no1+no2; else ans = no1-no2; t3.setText(""+ans); if(e.getSource() == b3) { t1.setText(""); t2.setText(""); t3.setText(""); } } public static void main(String args[]) { new JCalc(); } }
與 AWT 不同,Swing 容器是輕量級的,這使得它們更符合早期的計算機(具有少量內存和周期的計算機)。輕量級意味著 Swing 程序將占用更少的內存并運行更快。Swing 容器的另一個有點在于,可以對其進行更多的自定義,從而增強了功能。
Java Swing 也可以用于創建圖形編輯器、CAD 應用、文檔編輯器、瀏覽器、音頻/視頻播放器等等應用程序。
總而言之,Java Swing 是一個功能強大,但相對陳舊和緩慢的框架。而 AWT 雖然使用本地機器管理器呈現窗口,但不便于跨平臺開發。所以,你可以根據你的需求來選擇使用哪種框架。