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

最近工作中遇到 需要把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,然后分别添加 组件 和绘画,不会重叠。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值