j**a怎么给窗体或者面板设置背景图片?

时间:2013.01.31 发布人:fan**njie2

j**a怎么给窗体或者面板设置背景图片?

已解决问题

谷歌fan**njie2用户在2013.01.31提交了关于“摩托罗拉j**a怎么给窗体或者面板设置背景图片?”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-10-27T20:13:01。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !

希望以下的回答,能够帮助你。

第1个回答

用户名:jing**o7623  

1利用标签组件来设置
  标签本来是一种最简单的组件,为什么可以将它设置成为一个窗体的背底对景呢?首先还是要了解框架JFrame中的层次结构。JFrame中的层次分布及相对关系是:最底层是JRootPane张功原了,第二层是JlayerPa问答ne,最上层就是ContentPane,也正是我们常攻装找想推民什兰北难说的内容面板。所以一般我们拖放的控件就是在ContentPane层上。也就是说我们只需将背景图片放在JFrame的第二层是JlayerPane上,再把内容面板Con留随tentPane设置为透明,则第二层JlayerPane上放置的图片即成为内容面板的背景如几厚木井了。具体代码如下:
  JPanelpnlMain=new周春边JPanel();//创建面板pnlMain。
  getContentPane().add(pnlMain);//将pnlMain设置为主面板。
  Iconi=newImageIcon("背景.jpg");/*用源图片“背景.jpg”构造一个ImageIcon对象i,需要注意如果图片的路径使用的是相对路径,则图片文件必须放在类文件所在文件夹或项目的根文件夹中,否则图片的路苏径必须用绝对路径。*/
  JLabellblLogo=newJLabel(i);//用指定的图片构造标签对象lb
  this.getLayeredPane州答委白批第().add(lb,newInteger(Integer.MIN_VALUE));
  //把标签放在第二层JlayerPane上。
  lb.setBounds(0,0,ii.getIconWidth(),i.getIconh**eight());
  //设置标签的尺寸,即背景图象的大小。
  getConentPane().setOpaque(false);/*把内容面板设置为透明,这样整个框架的背景就不再是内容面板的背景色,而是第二层中标签的图像。*/
  pnlMain.add(lb);//将标签添加到主面板pnlMain中。
  用标签组件JLabel来设置窗体背景,其扩展性上比较差,推送角家板制修及相顺范且在标签上不能放置其他组件,名好妒雨单包比如:在放置一个JButton,整个布局背景图就错乱。导致这种现象是因为J**a加载组件是有顺序的,作为背景的JLabel的代码一定要放在全部组件代码的最后,这样JLabel的背景图片才不会被其他组件遮住,从而使整个布局背景错乱。所以采用这种方式来设置窗体背景有很大的局限性。只查剧存织多因此最好是采用以下方式来设置觉来含字挥文速窗体背景。
  2通过JPanel面板来设置窗体背景
  JPanel面板是J**a中的容器之一。而J**a中的容器是没话达供后围有背景图片的属性的,它们只有背景颜色,如果需要在JPanel面板上设置窗体背景,就需要重谁写paintCo凯罪宣线掌mponent(Graphicsg)方法,即把所要设置的背景图片画上作为JPanel面板的背景。具体实定现如下:
  首先定义一个JPa个nel的子类BjPanel,由于JPanel的构造方法不能添加图像,因此在创建此子类的时候先用getImage载入一幅背景图片,在重写paintComponent(Graphicsg)方法时,利用drawImage方法将其逐渐绘制到屏幕上,并将该面板添加到框架中,最后将该面板设置为透明。其代码如下:
  importj**a.awt.*;
  importj**ax.swing.*;
  publicclassbkground
  {
  publicstaticvoidmain(Stringargs[])
  {
  BjFramef=newBjFrame();
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLO**);
  f.setVisible(true);
  }
  }
  classBjFrameextendsJFrame
  {
  publicBjFrame()
  {
  setSize(WTh**,h**h**T);
  BjPanelpl=newBjPanel();
  ContainercontentPane=getContentPane();
  contentPane.add(pl);
  pl.setOpaque(true);
  }
  publicstaticfinalintWTh**=300;
  publicstaticfinalinth**h**T=200;
  }
  classBjPanelextendsJPanel
  {
  Imageim;
  publicBjPanel()
  {
  im=Toolkit.getDefaultToolkit().getImage("背景.jpg");//需要注意的是如果用相对路径载入图片,则图片文件必须放在类文件所在文件夹或项目的根文件夹中,否则必须用绝对路径。
  }
  publicvoidpaintComponent(Graphicsg)
  {
  super.paintComponent(g);
  intimWidth=image.getWidth(this);
  Intimh**eight=image.geth**eight(this);//定义图片的宽度、高度
  intFWidth=getWidth();
  intFh**eight=geth**eight();//定义窗口的宽度、高度
  intx=(FWidth-imWidth)/2;
  inty=(Fh**eight-imh**eight)/2;//计算图片的坐标,使图片显示在窗口正中间
  g.drawImage(image,x,y,**ll);//绘制图片
  }
  }