為什麼Java中的AWT元件是重量級的,而Swing元件是輕量級的?


  • AWT代表抽象視窗工具包,它支援Java GUI程式設計。它是一個用於獨立Java應用程式/小程式的可移植GUI庫。AWT提供應用程式和原生GUI之間的連線,而Java Swing實現了一組基於AWT技術的GUI元件,並且可以提供可插拔的外觀和感覺。Java Swing完全用Java程式語言實現。
  • 首先,重量級意味著程式碼載入需要相對更多時間,並且會消耗更多系統資源。AWT被認為是重量級的,因為它的元件依賴於底層作業系統。例如,當我們建立一個java.awt.Checkbox類的物件時,其底層作業系統將為我們生成一個複選框。這也是AWT元件依賴於平臺的原因。
  • 另一方面,大多數Java Swing元件是在Java本身中實現的。一些頂級元件(如視窗)依賴於作業系統。但總的來說,程式比AWT輕量級。
  • Java SwingAWT的改進和最佳化版本,它構建在AWT之上。儘管如此,許多AWT類在Swing中被直接或間接地使用。在繼續學習Java Swing之前,掌握AWT的基礎知識非常重要。否則,我們無法理解Java GUI中一些控制委託的底層原理。

示例

import javax.swing.SwingUtilities;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Test {
   public static void main(String[] args) {
      ApplicationWindow window = new ApplicationWindow();
      window.setVisible(true);
   }
}
class ApplicationWindow extends JFrame {
   public ApplicationWindow() {
      this.setSize(200, 100);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      this.setLayout(new FlowLayout());
      Button exitButton = new Button("Exit");
      exitButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent event) {
            System.exit(0);
         }
      });
      this.add(exitButton);
      JMenuBar menuBar = new JMenuBar();
      JMenu menu = new JMenu("Overlapping Menu");
      JMenuItem menuItem = new JMenuItem("Overlapping Item");
      menu.add(menuItem);
      menuBar.add(menu);
      this.setJMenuBar(menuBar);
      this.validate();
   }
}

輸出

更新於: 2020年2月6日

2K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告