- 浏览: 204085 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (175)
- JAVA BASIC (34)
- 资料 (2)
- WEB (4)
- Android (2)
- DBMS (2)
- 我的小东西 (4)
- IT生活 (6)
- portal (1)
- jsp (6)
- user experience (1)
- SSH (12)
- Flex (13)
- FLEX DEBUGER does not work (1)
- teacher (1)
- tools (2)
- maven (3)
- opensource (3)
- OUTLOOK (1)
- 经验之谈 (4)
- SQL (2)
- BOOK (1)
- jprofiler (1)
- hp veer 4g (2)
- axis2 (1)
- JAVASCRIPT (8)
- httpd (2)
- Webservice (3)
- JBOSS (9)
- JPA (2)
- JSF (1)
- XMLBean (1)
- J2EE6 (1)
- apache (1)
- HTML (1)
- review (1)
- Spring (7)
- hot cache (1)
- Websphere (1)
- 软件管理 (1)
- redis (1)
- Sitemesh (1)
- JDBC (1)
- http (2)
- linux (3)
- new-framework (2)
- Log4j (3)
- JMX (1)
- springmvc (2)
- Sprint Boot (1)
- NIO (2)
- mongodb (1)
- 一个监控系统引发的学习 (1)
- kafka消息只消费一次应该怎么做 (1)
- 一眼识别程序功力 (1)
最新评论
-
tcgdy0201:
挖!博主好棒!博主好腻害!
logback.xml immediate=false 到底缓存空间是多大 -
k1280000:
jasonlong10 写道 楼主别光写报错,有没什么解决方法 ...
SpringMVC 在 Jboss 下会报的 warn -
jasonlong10:
楼主别光写报错,有没什么解决方法啊?
SpringMVC 在 Jboss 下会报的 warn -
rtttyu23:
不错,没报错了...这些配置的文件真麻烦,不深入了解,配置的很 ...
Error creating bean with name '_messageBrokerDefaultHandlerMapping': Initializa -
thinkcq168:
这样还是不可以,还是报错,我也有同样的错误,求高手!
Error creating bean with name '_messageBrokerDefaultHandlerMapping': Initializa
我们都清楚Swing是模拟的,所谓轻量级(lightweight)组件。而AWT使用本地的,所谓重量级(heavyweight)组件。什么是重量级组件?重量级组件是指每个组件对象对应于一个代表本地组件的native peer。这一点Swing组件和AWT完全不同。Swing中组件除顶级容器类组件如Window、Frame和Applet有自己的native peer外其他都没有对应的native peer,用来模拟这些Swing组件的图形对象资源都来自于它所在的顶层容器。
由于实现机制不同,Swing和AWT组件有着完全不同的Z-order机制。这使得它们在混合排版时出现各种各样的互相遮盖问题。Swing的设计者Amy Fowler在SDN(Sun Developer Network)有一篇权威的文章介绍了混排Swing和AWT组件存在的问题,以及解决混排问题的原则:
[url=http://java.sun.com/products/jfc/tsc/articles/mixing/]
Mixing heavy and light components
[/url]
该文不推荐使用AWT组件,更不推荐将AWT组件和Swing组件进行混排,而推荐使用纯粹的Swing组件完成所需的任务。这样做有三点好处:
1.高效的利用资源。Swing是轻量级组件,AWT是重量级组件,需要操作系统的额外开销。
2.维护平台一致性。重量级组件在不同平台具有不同的缺省外观、尺寸、布局、字体以及行为等。这需要编写额外代码维护各个平台程序的一致性。比如Windows和Linux的缺省字体、大小和样式都不一样,需要显示的设置字体样式和大小等;在Windows很好看的布局有可能在Linux变得乱七八糟;组件间的间隔因为平台的不同而有很多变化。
3.良好的皮肤支持。AWT同SWT一样是不支持皮肤更换机制的。
同重量级AWT组件相比,轻量级Swing组件有如下不同特征:
1.Swing组件可以是透明的,而AWT是不透明的。
2.Swing的透明机制可以实现不规则形状的组件,而AWT组件只能是矩形组件。
3.鼠标事件总是通过Swing组件所在的顶层容器一层层传递给它,因此可被中间组件截获进行特殊处理。最大应用就是GlassPane和LayerPane,可用来实现跨组件的协作,比如拖动以及弹出式菜单和下拉框等。而AWT组件的鼠标事件是直接传递给该组件的,应用程序无法截获而实现特殊效果,控制权都在本地图形系统哪儿。
4.Swing组件的实际Z-order是同其顶层容器一样的。Swing的模拟行为最终要靠顶层容器提供图形设备资源完成,实际上所有同一顶层容器的Swing组件都共享该顶层容器的拥有的本地资源。因此这些Swing组件的实际Z-order值都是一样的,都要小于该顶层容器内所包含的其他AWT组件。所以当Swing组件和AWT组件重合时,Swing组件总是被AWT组件所覆盖。
Z-order问题使Swing组件和AWT组件混排的界面产生了很多问题。但许多时候却往往不得不混排。一种典型混排场景是Swing组件没有提供相对应的组件,而这些组件目前只有AWT组件才提供。如为了显示网页内容,需要将JDIC的WebBrowser嵌入到Swing程序中。WebBrowser是使用AWT机制实现的重量级组件,它将平台的缺省浏览器嵌入到一个AWT的Canvas组件中。如果此时WebBrowser附近恰好有一个Swing组件需要动态变化,如WebBrowser的顶部有一些JMenu菜单或者JComboBox,那么这时弹出的窗口就会被WebBrowser所覆盖。
Amy列举除了四条混排原则帮助你解决这些问题:
1.Do not mix lightweight (Swing) and heavyweight (AWT) components within a container where the lightweight component is expected to overlap the heavyweight one.不要在同容器内混排互相覆盖的轻量级组件和重量级组件。比如下图两个标签一个是Swing的,一个是AWT的,它们互相覆盖,结果造成AWT总是覆盖助Swing的,不管你添加的顺序如何:
2.Do not place heavyweight (AWT) components inside a JScrollPane. If you need to scroll areas containing heavyweight components, use AWT's ScrollPane instead.不要将AWT组件放在JScrollPane内。如需要滚动AWT组件,请使用java.awt.ScrollPane。下图是将java.awt.Button放在JScrollPane的后果:
3.Do not place heavyweight (AWT) components inside a JInternalFrame.不要将AWT组件放在JInternalFrame中。因为JInternalFrame是Swing组件,而且不同的JInternalFrame需要经常改变显示顺序,加在上面的AWT组件会总是在顶部,不管它所在的JInternalFrame是不是在前面:
4.If you place Swing popup components in a window containing heavyweight components and it's possible that the popup windows will intersect a heavyweight, then invoke JPopupMenu.setDefaultLightWeightPopupEnabled(false)before the popup components are instantiated.如果窗口中同时有Swing弹出式组件(比如菜单、下拉框)和重量级AWT组件,那么弹出窗口有可能会被重量级组件所遮挡。这是因为Swing弹出式窗口的实现为了尽可能轻量级化,使用了轻量级模拟窗口,而不是java.awt.Window组件。比如菜单,如果弹出菜单的窗口恰好在顶层容器内部,那么Swing采用模拟窗口的办法画出此窗口,只有当弹出窗口的边界超出了顶层容器窗口的边界时,这时才使用Window实现。这就会带来同上面各种Z-order问题相同的现象,菜单或者下拉框被AWT组件所遮住了:
如何解决这种问题?如果是菜单或者下拉框,可调用JPopupMenu的静态方法setDefaultLightWeightPopupEnabled(false)将弹出的窗口强制为Canvas或者Window等重量级的AWT组件,这样就可以避免弹出窗口被别的AWT组件所覆盖。其他的弹出式组件都有对应的方法强制弹出重量级窗口。
总之,不推荐使用Swing和AWT混排的方法编写界面。如果非要这样编写界面,那么首先保证它们之间不互相覆盖,其次AWT组件要放到ScrollPane而不是JScrollPane中,再次JInternalFrame中不能放置AWT组件,最后对于需要弹出窗口的组件要使用相应方法强制弹出重量级窗口。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lzhw1985/archive/2009/02/10/3870513.aspx
由于实现机制不同,Swing和AWT组件有着完全不同的Z-order机制。这使得它们在混合排版时出现各种各样的互相遮盖问题。Swing的设计者Amy Fowler在SDN(Sun Developer Network)有一篇权威的文章介绍了混排Swing和AWT组件存在的问题,以及解决混排问题的原则:
[url=http://java.sun.com/products/jfc/tsc/articles/mixing/]
Mixing heavy and light components
[/url]
该文不推荐使用AWT组件,更不推荐将AWT组件和Swing组件进行混排,而推荐使用纯粹的Swing组件完成所需的任务。这样做有三点好处:
1.高效的利用资源。Swing是轻量级组件,AWT是重量级组件,需要操作系统的额外开销。
2.维护平台一致性。重量级组件在不同平台具有不同的缺省外观、尺寸、布局、字体以及行为等。这需要编写额外代码维护各个平台程序的一致性。比如Windows和Linux的缺省字体、大小和样式都不一样,需要显示的设置字体样式和大小等;在Windows很好看的布局有可能在Linux变得乱七八糟;组件间的间隔因为平台的不同而有很多变化。
3.良好的皮肤支持。AWT同SWT一样是不支持皮肤更换机制的。
同重量级AWT组件相比,轻量级Swing组件有如下不同特征:
1.Swing组件可以是透明的,而AWT是不透明的。
2.Swing的透明机制可以实现不规则形状的组件,而AWT组件只能是矩形组件。
3.鼠标事件总是通过Swing组件所在的顶层容器一层层传递给它,因此可被中间组件截获进行特殊处理。最大应用就是GlassPane和LayerPane,可用来实现跨组件的协作,比如拖动以及弹出式菜单和下拉框等。而AWT组件的鼠标事件是直接传递给该组件的,应用程序无法截获而实现特殊效果,控制权都在本地图形系统哪儿。
4.Swing组件的实际Z-order是同其顶层容器一样的。Swing的模拟行为最终要靠顶层容器提供图形设备资源完成,实际上所有同一顶层容器的Swing组件都共享该顶层容器的拥有的本地资源。因此这些Swing组件的实际Z-order值都是一样的,都要小于该顶层容器内所包含的其他AWT组件。所以当Swing组件和AWT组件重合时,Swing组件总是被AWT组件所覆盖。
Z-order问题使Swing组件和AWT组件混排的界面产生了很多问题。但许多时候却往往不得不混排。一种典型混排场景是Swing组件没有提供相对应的组件,而这些组件目前只有AWT组件才提供。如为了显示网页内容,需要将JDIC的WebBrowser嵌入到Swing程序中。WebBrowser是使用AWT机制实现的重量级组件,它将平台的缺省浏览器嵌入到一个AWT的Canvas组件中。如果此时WebBrowser附近恰好有一个Swing组件需要动态变化,如WebBrowser的顶部有一些JMenu菜单或者JComboBox,那么这时弹出的窗口就会被WebBrowser所覆盖。
Amy列举除了四条混排原则帮助你解决这些问题:
1.Do not mix lightweight (Swing) and heavyweight (AWT) components within a container where the lightweight component is expected to overlap the heavyweight one.不要在同容器内混排互相覆盖的轻量级组件和重量级组件。比如下图两个标签一个是Swing的,一个是AWT的,它们互相覆盖,结果造成AWT总是覆盖助Swing的,不管你添加的顺序如何:
2.Do not place heavyweight (AWT) components inside a JScrollPane. If you need to scroll areas containing heavyweight components, use AWT's ScrollPane instead.不要将AWT组件放在JScrollPane内。如需要滚动AWT组件,请使用java.awt.ScrollPane。下图是将java.awt.Button放在JScrollPane的后果:
3.Do not place heavyweight (AWT) components inside a JInternalFrame.不要将AWT组件放在JInternalFrame中。因为JInternalFrame是Swing组件,而且不同的JInternalFrame需要经常改变显示顺序,加在上面的AWT组件会总是在顶部,不管它所在的JInternalFrame是不是在前面:
4.If you place Swing popup components in a window containing heavyweight components and it's possible that the popup windows will intersect a heavyweight, then invoke JPopupMenu.setDefaultLightWeightPopupEnabled(false)before the popup components are instantiated.如果窗口中同时有Swing弹出式组件(比如菜单、下拉框)和重量级AWT组件,那么弹出窗口有可能会被重量级组件所遮挡。这是因为Swing弹出式窗口的实现为了尽可能轻量级化,使用了轻量级模拟窗口,而不是java.awt.Window组件。比如菜单,如果弹出菜单的窗口恰好在顶层容器内部,那么Swing采用模拟窗口的办法画出此窗口,只有当弹出窗口的边界超出了顶层容器窗口的边界时,这时才使用Window实现。这就会带来同上面各种Z-order问题相同的现象,菜单或者下拉框被AWT组件所遮住了:
如何解决这种问题?如果是菜单或者下拉框,可调用JPopupMenu的静态方法setDefaultLightWeightPopupEnabled(false)将弹出的窗口强制为Canvas或者Window等重量级的AWT组件,这样就可以避免弹出窗口被别的AWT组件所覆盖。其他的弹出式组件都有对应的方法强制弹出重量级窗口。
总之,不推荐使用Swing和AWT混排的方法编写界面。如果非要这样编写界面,那么首先保证它们之间不互相覆盖,其次AWT组件要放到ScrollPane而不是JScrollPane中,再次JInternalFrame中不能放置AWT组件,最后对于需要弹出窗口的组件要使用相应方法强制弹出重量级窗口。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lzhw1985/archive/2009/02/10/3870513.aspx
发表评论
-
网络知识定向,扫盲
2015-05-06 20:14 299TCP/IP、Http、Socket的区别 http:/ ... -
java.net.socketinputstream.socketread0 hangs thread
2015-04-29 16:25 1614http://javaeesupportp ... -
使用Hibernate Validator 完成 字段的自动验证
2014-11-13 18:23 771如题 1. maven 中引入 < ... -
JAVA 序列化
2014-05-11 18:06 543再读序列化 http://www.blogjava.net ... -
synchronized (obj) 锁住不同的对象的话
2014-03-27 08:58 2485Obj package com.james.thr ... -
annotation 生成代码(命令行,Eclipse,Maven下运行)
2013-01-04 15:19 733what is annotation ? http ... -
越挖越有意思,annotation generate code --> create eclipse plugin -->osgi
2012-12-27 16:42 636越挖越有意思,annotation generate code ... -
annotation 学习
2012-12-27 13:57 739basic ENGLISH: http://www. ... -
execute bat file in java
2012-12-24 15:38 636String path="cmd /c sta ... -
字符串匹配问题
2012-07-16 14:07 653转自 http://weijinxian.iteye.com/ ... -
inherit
2012-07-03 00:00 663继承父类的实例方法是覆盖,而且继承静态方法则是隐藏。 ... -
内部类的继承从而实现对父类的private字段的引用
2012-07-02 23:38 830子类 public class SubClas ... -
interface
2012-07-01 23:34 666http://docs.oracle.com/javas ... -
java.util.ResourceBundle使用详解(转)
2012-06-12 16:27 824转 java.util.ResourceBundle使用详解 ... -
对两个LIST对行比对,筛选
2011-12-26 16:00 1142对两个LIST对行比对,筛选 以下两种方法比对中会发现 ... -
java程序代理上网
2011-12-05 15:34 1306哎,在网上搜好久 看来网上还是有很多吭爹的,害我搞了好久 ... -
PO/VO/DTO/DAO/POJO 名词解惑
2011-10-25 10:43 974PO/VO/DTO/DAO/POJO 名词解惑 ... -
中文的正则表达式
2011-09-27 10:56 982此表达式也行 \\p{InCJKUnifiedIdeogra ... -
基础JAVA IO 详解(转)
2011-09-22 12:36 619JAVA IO http://developer.51cto ... -
question in reading java reflect
2011-08-24 10:15 7131. create the dynamic instance ...
相关推荐
简单的摇骰子游戏、使用线程和swing、awt.zip java作业。简单的摇骰子游戏、使用线程和swing、awt.zip java作业。简单的摇骰子游戏、使用线程和swing、awt.zip java作业。简单的摇骰子游戏、使用线程和swing、awt....
import java.awt.*"表明这段源代码涉及了Java编程语言,特别是与Applet和图形用户界面(GUI)相关的部分。`import`语句是Java中用于引入库或包的机制,以便能够使用其中的类和方法。在给定的描述中,没有更多的具体...
Java Swing和AWT是两种用于构建图形用户界面(GUI)的Java库,它们在开发桌面应用程序时发挥着关键作用。让我们深入探讨这两个框架,并了解如何使用它们创建丰富的交互式界面。 **AWT(Abstract Window Toolkit)**...
简单的摇骰子游戏、使用线程和swing、awt.zip”揭示了这个项目的核心内容。这是一个基于Java编程语言的作业,它包含了一个简单的摇骰子游戏,这个游戏利用了Java的线程机制以及图形用户界面(GUI)库Swing和AWT。...
总结来说,【ae-awt.jar.zip】提供的【ae-awt.jar】文件可能包含了一组与Java AWT相关的类和资源,这些可能用于创建具有特定功能的GUI应用,尤其是与Adobe系统的集成。开发者在使用这个库时,需要了解AWT的基础知识...
在我们的代码中,我们可以看到 import 语句中包含了 java.awt 和 javax.swing.*,这说明了我们使用的是 Java 的 AWT 和 Swing 工具包。 2. JFrame 和 JDialog 的使用 在我们的代码中,我们可以看到 MainWindow 类...
import java.awt.BorderLayout; import java.awt.Dimension; //import java.awt.Dialog.ModalExclusionType; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.net.URL;...
import java.awt.AlphaComposite; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt....
首先,由于AWT是基于原生平台窗口系统的,所以它的性能可能不如后来的Swing包,后者是完全由Java实现的,提供了更好的性能和更丰富的组件集。其次,AWT的组件样式受限于底层操作系统,这意味着在不同平台上,同一...
Java图形编程 1卷 (经典)AWT 1卷.awt 2卷.swing 图形设计的基础教程,以前下的现在不好找了:)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:633) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatch...
java.awt.event:用于处理事件。 java.io:用于文件操作。 java.util.Random:用于生成高斯噪声。 创建主窗口: ImageProcessor 类继承自 JFrame,创建主窗口。 设置窗口标题、大小、默认关闭操作,并使其居中显示...
import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event....
这个"awt.rar"压缩包显然是一个关于Java AWT绘图的学习资源,适合初学者了解和实践AWT模块的绘图功能。 在Java中,AWT绘图是通过`Graphics`类来实现的,它是所有可绘制对象的基础。当你创建一个AWT组件,如`Canvas`...
import java.awt.Color; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing....