为什么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+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告