JFrame设置背景

第一种方法:
我们首先要知道JFrame的结构,JFrame是由这么几部分组成:最底下一层JRootPane,上面是glassPane(一个JPanel)和layeredPane(一个JLayeredPane),而layeredPane又由contentPane(一个JPanel)和menuBar构成。如图所示
[img]http://dl.iteye.com/upload/attachment/0084/5125/e9d00f24-8054-3205-aecf-ce1bae5dbc70.png[/img]
我们平时加组件都是放在contentPane上,而设置背景图片我们可以把图片放到一个标签里,在把标签放到layeredPane里,并把contentPane设置为透明就可。
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test extends JFrame{
public static void main(String args[]){
new Test().initUI();
}
public void initUI(){
ImageIcon icon=new ImageIcon("C:\\Users\\Administrator\\Pictures\\qq.jpg");
JLabel label=new JLabel(icon);//把图片放到标签里
//把标签加到LayeredPane,并使图片充满标签
this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
//把标签设置和图片同样大小
label.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight());
((JComponent) getContentPane()).setOpaque(false); //使ContentPane透明
setSize(icon.getIconWidth(), icon.getIconHeight()); //设置窗体大小和图片大小一致
setLayout(null);
//在ContentPane继续加组件
JButton button=new JButton("继续添加");
button.setFont(new Font("宋体",Font.ITALIC+Font.BOLD,15));
button.setBounds(40, 50, 100, 30);
add(button);
setVisible(true);

}
}

结果如图所示:
[img]http://dl.iteye.com/upload/attachment/0084/5129/a74600aa-f318-3215-bcea-6aa77b18991d.jpg[/img]
不过这种方法只能根据图片大小去设置标签大小进而设置窗体大小才能使背景充满整个窗体,不太方便。也或许有我不知道的方法可以做到,如果读者知道,麻烦请告诉我一下,谢谢。下面我将给出另一种方法。
(2)第二种方法。
利用JPanel的public void paintComponent(Graphics g)方法把图片放到JPanel在把JPanel加到窗体上。这种方法可以改变图片的大小而使之充满窗体。
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
* 界面类
*/
public class Test1 extends JFrame{
public static void main(String args[]){//程序入口
new Test1().initUI();//实例化对象并调用创建窗体的方法
}
/**
* 创建窗体的方法
*/
public void initUI(){
setTitle("排序界面");//设置窗体名字
setSize(600,500);//设置窗体大小
setResizable(false);//设置窗体大小不可变
Panel panel=new Panel();//实例化对象
panel.setLayout(null);//panel对象的布局设置为null
Font font=new Font("宋体",Font.BOLD,18);//实例化字体样式对象
JButton button=new JButton("继续添加");//实例化按钮对象
button.setFont(font);//设置按钮字体样式
button.setBounds(200, 200,150, 30);
add(button);
add(panel);//将panel容器对象添加到窗体
setVisible(true);//使窗体显示

}
}
/**
* 设置背景图片的类
*
*/
class Panel extends JPanel{
Image im=Toolkit.getDefaultToolkit().getImage("C:\\Users\\Administrator\\Pictures\\qq.jpg");
public void paintComponent(Graphics g){
g.drawImage(im, 0, 0,400,300,null);
}
}

结果如图所示:
[img]http://dl.iteye.com/upload/attachment/0084/5139/43f39844-9a94-3a48-8f26-aaf1473f8bc8.jpg[/img]
归根到底,我们平时用的contentPane就是加在窗体的一个组件,而我们可以把图片设置在一个组件里也加到窗体里,就是要加在什么位置的考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值