最近在给自己的一个搜索下载工具包做一个UI,弄成桌面应用。窗口顶部是标准的swing菜单,下面有几个AWT的label和button组件。当我加了几个菜单项然后运行之后,发现下拉菜单被label挡住了,无论如何设置都不行。后台查阅了相关资料,才知道这是AWT这个重量级组件和swing这个轻量级组件混用的不可调谐的矛盾。
AWT组件各自对应一个本地组件native peer,就是和操作系统相关,会因为操作系统不同而有不同。Swing中组件除顶级容器类组件如Window、Frame和Applet有自己的native peer外其他都没有对应的native peer,用来模拟这些Swing组件的图形对象资源都来自于它所在的顶层容器。由于二者的Z-order设计不同,所以它们混合使用来排版时会出现各种古怪的覆盖问题。而推荐的做法是尽量只使用其中一种组件,推荐Swing,理由如下:
1,高效的利用资源。AWT需要操作系统的额外开销。
2,维护平台一致性。重量级组件在不同平台具有不同的缺省外观、尺寸、布局、字体以及行为等。这需要编写额外代码维护各个平台程序的一致性。比如 Windows和Linux的缺省字体、大小和样式都不一样,需要显示的设置字体样式和大小等;在Windows很好看的布局有可能在Linux变得乱七八糟;组件间的间隔因为平台的不同而有很多变化。
3,良好的皮肤支持。AWT同SWT一样是不支持皮肤更换机制的。
参考文章:
http://tech.e800.com.cn/articles/2009/83/1249251222247_1.html
SUN官方swing指南:
http://java.sun.com/docs/books/tutorial/uiswing/
分享到:
相关推荐
- Swing组件与AWT组件可以混用,但可能会导致显示问题,一般建议避免。 - 轻量级组件与重量级组件的区别在于资源消耗,轻量级组件更适合大量使用。 在Swing编程中,开发者可以通过这些组件和机制创建出复杂的、...
- 尽管Java Swing后来成为更推荐的GUI库,但AWT组件仍可以与Swing组件混用。在这个记事本应用中,可能使用了Swing的`JFileChooser`来实现文件选择对话框。 通过以上描述,我们可以看到“java awt记事本”项目不仅...
- Swing组件的事件处理和布局管理与AWT相似,开发者可以沿用AWT的编程模式。 总结起来,Java的GUI设计涉及到AWT和Swing两个主要框架,它们各自具有独特的优势和应用场景。了解和掌握这两个框架,将有助于开发者构建...
尽管Swing组件和AWT组件可以混用,但为了避免可能出现的显示问题,通常建议在单个应用程序中选择使用一种。 Swing的“外观和感觉”(Look and Feel)允许开发者改变程序的视觉样式,使其适应不同操作系统平台的默认...
1. **轻量级组件**:Swing组件是基于Java的,不依赖于操作系统提供的图形接口,因此具有较好的跨平台性。 2. **可定制性**:Swing提供了许多可定制的外观和行为,例如可以使用NimbusLookAndFeel或其他Look and Feel...
从给定的文件信息来看,这是一段使用Java Swing库编写的计算器程序的源代码。以下是对该代码涉及的关键知识...然而,代码中也存在一些混用AWT和Swing组件的问题,这在实际开发中应避免,以保持代码的一致性和最佳实践。
13. AWT与Swing组件:ComboBox在AWT和Swing中都有对应,但选项D中的ComboBox与JComboBox是同一个组件的不同版本。 14. 成员访问修饰符:在Java等面向对象语言中,public关键字用于声明成员对所有类可见。 15. 包的...
然而,由于Swing是基于AWT构建的,所以它同样可以与AWT组件混用。同时,Swing还支持LookAndFeel,可以改变应用程序的整体风格,使其看起来像是原生的Windows、Mac OS或GTK+应用。 在C#中,虽然没有直接对应的Swing...
1. **Java Swing基础**:Swing组件基于AWT(Abstract Window Toolkit)之上,但提供了更多的功能和更好的可定制性。基本组件包括JFrame(窗口)、JButton(按钮)、JLabel(标签)、JTextField(文本框)、JTextArea...
1. **容器类简介**:在AWT和Swing中,容器是用来容纳其他组件的组件。 2. **选项D** 正确:`Frame`是直接从`java.awt.Window`继承的容器类之一,用于创建窗口。 ##### 五、构造方法 1. **构造方法的特点**: - **...
5. **AWT与Swing**:SWING是Java AWT(Abstract Window Toolkit)的扩展和增强,提供了更多的组件和更好的用户体验,两者可以在同一GUI程序中混用。 6. **剪贴板操作**:剪贴板可以存储文本和图形等信息,用于在...
例如,javax.swing.JComponent#add(Component) 方法将一个组件添加到一个容器中,java.awt.Container#add(Component) 方法将一个组件添加到一个容器中。 4. 装饰器模式(Decorator Pattern) 装饰器模式是指为一个...
- `TextArea`、`Choice`和`List`都是Swing组件,它们可以实现不同的监听器接口。 - `ItemListener`用于处理选择项的变化事件。 - `ActionListener`用于处理动作事件,例如按钮点击。 14. **选项分析**: - **A*...