JFrame设置背景

  第一种方法:
  我们首先要知道JFrame的结构,JFrame是由这么几部分组成:最底下一层JRootPane,上面是glassPane(一个JPanel)和layeredPane(一个JLayeredPane),而layeredPane又由contentPane(一个JPanel)和menuBar构成。如图所示
JFrame设置背景
  我们平时加组件都是放在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);
		
	}
}

结果如图所示:
JFrame设置背景
不过这种方法只能根据图片大小去设置标签大小进而设置窗体大小才能使背景充满整个窗体,不太方便。也或许有我不知道的方法可以做到,如果读者知道,麻烦请告诉我一下,谢谢。下面我将给出另一种方法。
   (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);
	}
}

结果如图所示:
JFrame设置背景
归根到底,我们平时用的contentPane就是加在窗体的一个组件,而我们可以把图片设置在一个组件里也加到窗体里,就是要加在什么位置的考虑。
 

你可能感兴趣的:(java)