为什么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 Swing是AWT的改进和优化版本,它构建在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(); } }
输出
广告