首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java AWT 遷移 Swing 快速指南:J 前綴類別對應與 ContentPane 必備知識

     編輯:Java 相關知識

AWT 到 Swing 遷移核心原則

Swing 設計為 AWT 的超集,大多數 AWT 元件對應同名的 J 前綴類別。遷移核心:類別名加 J、引入 javax.swing、處理 ContentPane。

對應對照表

AWT (java.awt)Swing (javax.swing)備註
ButtonJButton
LabelJLabel
TextFieldJTextField
TextAreaJTextArea
CheckboxJCheckBox
CheckboxGroupButtonGroup + JRadioButton架構不同
ChoiceJComboBox
ListJList
ScrollbarJScrollBar通常用 JScrollPane
CanvasJPanel繪圖基底
PanelJPanel
Window/Frame/DialogJWindow/JFrame/JDialog頂層容器
MenuBar/Menu/MenuItemJMenuBar/JMenu/JMenuItem

關鍵差異:ContentPane 強制性

// AWT: 直接加入 Frame
Frame f = new Frame();
f.add(button);

// Swing: 必須加入 ContentPane
JFrame f = new JFrame();
f.getContentPane().add(button); // 或 f.add(button) JDK 1.5+ 自動轉發

原因:JFrame 為 RootPaneContainer,內含 JRootPane → contentPane、glassPane、layeredPane,支援分層、玻璃窗、選單列整合。

完整遷移範例

// AWT 版本
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class AwtDemo extends Applet {
    Button b1 = new Button("Btn 1"), b2 = new Button("Btn 2");
    TextField t = new TextField(20);
    public void init() {
        ActionListener al = e -> t.setText(((Button)e.getSource()).getLabel() + " Pressed");
        b1.addActionListener(al); add(b1);
        b2.addActionListener(al); add(b2);
        add(t);
    }
}

// Swing 遷移版本
package c13.swing;
import javax.swing.*;
import java.awt.event.*;

public class JButtonDemo extends JApplet { // Applet → JApplet
    JButton b1 = new JButton("JButton 1"), b2 = new JButton("JButton 2");
    JTextField t = new JTextField(20);
    public void init() {
        ActionListener al = e -> t.setText(((JButton)e.getSource()).getText() + " Pressed");
        b1.addActionListener(al); add(b1); // JApplet.add() 自動轉發至 ContentPane
        b2.addActionListener(al); add(b2);
        add(t);
    }
    public static void main(String[] args) {
        JButtonDemo applet = new JButtonDemo();
        JFrame frame = new JFrame("JButtonDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(applet, BorderLayout.CENTER); // 必須用 ContentPane
        frame.setSize(300, 100);
        applet.init(); applet.start();
        frame.setVisible(true);
    }
}

遷移檢查清單

  1. 所有 java.awt.* 元件類別 → javax.swing.J*
  2. Frame → JFrame,Dialog → JDialog,Applet → JApplet
  3. 頂層容器加入子元件**必須**透過 getContentPane().add() (JDK 1.5+ 可省略)
  4. 佈局管理器可沿用,但 Swing 提供 BoxLayout、OverlayLayout 等新選擇
  5. 事件模型相容 (ActionListener 等均在 java.awt.event)
  6. 繪圖:paint(Graphics) → paintComponent(Graphics) (雙緩衝自動支援)
  7. 啟用系統外觀:UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())

效能與外觀提升

  • Swing 元件為輕量級,非平台原生,跨平台一致性優於 AWT。
  • 雙緩衝預設開啟,減少閃爍。
  • 可換裝外觀 (Look & Feel):Metal、Nimbus、Windows、Mac、GTK+。
  • 豐富元件:JTable、JTree、JTabbedPane、JSpinner、JSlider 等 AWT 無對應。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved