您的位置:首页 > 编程语言 > Java开发

java 轻量级组件和重量级组件的区别

2014-06-04 15:05 435 查看
最近工作中遇到 需要把JLabel加到Canvas上去,整了半天,到最后发现JLabel总是在Canvas之下;

后问同事,原来JLabel属于轻量级组件,而Canvas属于重量级组件;于是乎就出现了上述情况。

轻量级组件 是用JAVA代码画出来的,这样具有平台移植性

       重量级组件 是调用操作系统的函数画出来的组件,比如主窗体

      一般来说尽量用轻量级的组件,这样对程序的移植性很好,一般javax.swing包里的组件大部分是轻量级的java.awt里面的是重量级的。

       Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级( light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。

 

 

把百度知道上搜到的内容拷过来~哈哈
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Painter extends JFrame
{
private int xValue=0,yValue=0;
public Painter()
{
super("A Simple paint program");

getContentPane().add(new JLabel("Drag the Mouse To Paint"),"South");
/*addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e)
{
xValue=e.getX();
yValue=e.getY();
repaint();
}
}
);*/
setSize(300,300);
setVisible(true);
}
/*
public void paint(Graphics g)
{
g.fillOval(xValue,yValue,4,4);
}*/
public static void main(String[] args)
{
Painter frame=new Painter();
}
}

这主要是paint(Griphics g)方法的问题
注意java.awt包和javax.swing包中的类的层次问题

java.lang.Object  ->java.awt.Component  ->java.awt.Label

java.lang.Object
->  java.awt.Component
->    java.awt.Container
->       javax.swing.JComponent
->        javax.swing.JLabel

而在java.awt.Component和javax.swing.JComponent都分别根据组件的清重量级定义了不同实现方式的paint方法
在你的程序中,你是在JFrame中直接进行绘画,而JFrame属于重量级组件,Label属于偏重量级JLabel属于偏轻(轻重的区别就是是否跟本地系统有太大关系)。。JFrame JWindow  JDialog 等等。。并且你绘画的区域和你添加Label
的位置有重叠。。。诸多原因导致了无法显示

建议:将绘画的组件 改成JPanel。。可以多分级绘画,也可以并列多个JPanel,然后分别添加 组件 和绘画,不会重叠。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jpanel