为jframe窗口设置背景图片

时间:2023-02-05 20:35:17

感谢新浪博客:

Rain的博客

http://blog.sina.com.cn/chenghuanumber7

成功实现了如何为jframe窗口设置背景图片了。下面是示例,请初学swring的朋友们参考学习!


import java.awt.*;
import javax.swing.*;
import java.awt.Container;

public class framebg {

public framebg() {
}
public static void main (String[] args) {
JFrame frame=new JFrame("背景图设置");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
ImageIcon img = new ImageIcon("bg\\1.gif");//这是背景图片
JLabel imgLabel = new JLabel(img);//将背景图放在标签里。

frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//注意这里是关键,将背景标签添加到jfram的LayeredPane面板里。
imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());//设置背景标签的位置
Container cp=frame.getContentPane();
cp.setLayout(new BorderLayout());
JButton but=new JButton("anniu");//创建按钮
cp.add(but,"North");//将按钮添加入窗口的内容面板

((JPanel)cp).setOpaque(false); //注意这里,将内容面板设为透明。这样LayeredPane面板中的背景才能显示出来。

frame.setSize(500,300);
frame.setVisible(true);

}

}
import java.awt.*;
import javax.swing.*;
import java.awt.Container;

public class framebg {

public framebg() {
}
public static void main (String[] args) {
JFrame frame=new JFrame("背景图设置");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon img = new ImageIcon("bg\\1.gif");//这是背景图片
JLabel imgLabel = new JLabel(img);//将背景图放在标签里。

frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//注意这里是关键,将背景标签添加到jfram的LayeredPane面板里。
imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());//设置背景标签的位置
Container cp=frame.getContentPane();
cp.setLayout(new BorderLayout());
JButton but=new JButton("anniu");//创建按钮
cp.add(but,"North");//将按钮添加入窗口的内容面板

((JPanel)cp).setOpaque(false); //注意这里,将内容面板设为透明。这样LayeredPane面板中的背景才能显示出来。

frame.setSize(500,300);
frame.setVisible(true);

}

}

通过为jframe设置背景图片,让我明白了以下的知识要点:
(1)jframe窗口的组成部分,最底层是jrootpane面板。(这一点恐怕很多初学者都没有注意吧!)
(2)jframe的组成如下:
jrootpane中包含glasspane和layeredpane两个面板。而layeredpane面板包含contentpane和jmenubar。(没想到吧contentpane是放在contentpane中的?)

(3)在jframe上添加组件,往往是添加在contentpane中。。但是在contentpane的下面还有两层面板,那就是layeredpane和jrootpane。
(4)任何一本关于java的书中都会介绍contentpane,却很少提到layeredpane和jrootpane,因此使得很多的初学者产生:jframe中只要一个contentpane的错误认识。

通过解决背景设置的问题,让我对jframe中容器的“层”结构,有个更深层的了解。

以上知识点,希望初学swing的朋友们注意。

ok!只是共分享!让我们共同学习进步!

(感谢唱歌的石头)