为一个窗体设置背景图片

要为一个窗体添加背景图片,必须知道绘制JComponent组件的过程。Swing轻量组件的绘制是组件和组件UI代表合作的结果。 
代码六 设置窗体背景图片 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class GraExp6 extends JFrame
{
   CInstead c1=new CInstead();
   Container c;
   JLabel lbl1=new JLabel("姓名:");
   JLabel lbl2=new JLabel("密码:");
   JTextField tf1=new JTextField(10),
                     tf2=new JTextField(10);
 
   public GraExp6()
   {
      setContentPane(c1);
      c=getContentPane();
      c.setLayout(new FlowLayout(FlowLayout.LEFT));
      c.add(lbl1);
      c.add(tf1);
      c.add(lbl2);
      c.add(tf2);
 
      setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
      setSize(new Dimension(400,300));
      show();
   }
   public static void main(String[] args)
   {
      GraExp6 ge=new GraExp6();
   }
   class CInstead extends JPanel
   {
      ImageIcon icon;
      Image img;
      public CInstead()
      {
          icon=new ImageIcon(GraExp6.class.getResource("1.gif"));
          img=icon.getImage();
      }
      public void paintComponent(Graphics g)
      {
          super.paintComponent(g);
          g.drawImage(img,0,0,null);
      }
   }
}
 

界面运行图如下: 

程序分析: 
JComponent.paint先绘制组件,然后绘制组件的边框,再绘制组件的子组件。调用的顺序确保组件、边框和子组件都是可视的。如果组件有一个UI代表,则JComponent.paintComponent调用该代表的Update方法,该方法为不透明组件擦除背景,然后绘制组件。 
CInstead是一个不透明的组件,如果重载paint方法,其背景图是无法被擦除的,因此,即使更新了组件的所有包含组件,在界面上是看不到的。所以必须重载paintComponent方法,在绘制子组件前先擦除背景。 
对双缓存组件,paint方法负责把组件绘制到屏外缓存中,然后把屏外缓存拷贝到组件的屏上代表中,正因为如此,我们不建议为Swing组件重载paint,如果需要重新定义如何绘制组件,那么就重载paintComponent()。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值