首页 > 编程知识 正文

swing背景图片,java界面怎么放背景图

时间:2023-05-05 04:16:01 阅读:177250 作者:966

转载: http://blog.csdn.net/jdsjlzx/article/details/16831815

importjava.awt.FlowLayout;

importjavax.swing.ImageIcon;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

publicclassJFrameBackground{

privateJFrameframe=newJFrame (背景图像测试);

privateJPanelimagePanel

权限imageiconbackground;

publicstaticvoidmain (string [ ] args ) {

newJFrameBackground (;

}

公共框架后台

background=new image icon (' 003.jpg ); //背景图像

jabellabel=new jlabel (background; //将背景图像显示在一个标签上

//设定标签大小的位置,使图像正好填满整个面板

label.set bounds (0,0,background.getIconWidth )、

background.getIconHeight ();

//将内容窗格转换为JPanel。 否则,无法通过方法setOpaque )使内容窗格透明

imagepanel=(Jpanel ) frame.getContentPane );

imagepanel.setopaque(false;

//内容窗格的默认布局管理器是BorderLayout

image panel.set layout (new flowlayout ) );

imagePanel.add(newJbutton )“测试按钮”);

frame.getLayeredPane ().setlayout ) ) null;

//将背景图像作为背景添加到层次窗格的底部

frame.getLayeredPane ().add (label,newinteger ) integer.min_value );

frame.setdefaultcloseoperation (jframe.exit _ on _ close );

frame.setsize (background.geticonwidth )、background.getIconHeight );

rame.setresizable(false );

frame.setvisible(true;

}

}

publicstaticvoidmain (string [ ] args ) {

JFrameframe=newJFrame ('背景图设定');

frame.setdefaultcloseoperation (jframe.exit _ on _ close );

imageiconimg=new image icon (BG1.gif ); //这是背景图像

jlabelimglabel=newjlabel(img; //将背景图放入标签。

frame.getlayeredpane((.add ) imglabel,newinteger ) integer.min_value ); //以此为重点,在jfram的分层面板中添加背景标签。

img label.set bounds (0,0,img.getIconWidth ),img.getIconHeight; //设定背景标签的位置

container CP=frame.get content pane (;

CP.setlayout(newborderlayout ) );

Juttonbut=newJbutton(Anniu ); //创建按钮

CP.add(but,' North ' ); //在窗口的内容面板中添加按钮

(JPanel ) cp ).setopaque ) false; //注意此处,使内容面板透明。 此时将显示分层面板的背景。

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中容器的“层”结构,

更多参考:

从网上搜索了有关设置背景图片的文章,但是因为我每次设计窗口程序的时候,喜欢利用“Degsin”按钮,将所有的窗口进行布局后,在进行相关源代码的填写,因此,网页提供的答案是直接在主函数中编写,而我选择了在构造函数中编写,故有一定的不同。相关代码如下:

主函数:

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

HAPPY frame = new HAPPY();

//frame.setVisible(true);      这行代码,可加可不加,并不会影响最终结果,但是在构造函数中一定要添加;

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

构造函数(关键代码):

JFrame frame=new JFrame("设置背景图片 ");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ImageIcon img = new ImageIcon("src/images/1.jpg");//这是背景图片

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(null);      //这里选择绝对布局管理器,对于边界布局管理器,放入控件后,无法显示背景图片;因为将整个面板都填充满了;

((JPanel)cp).setOpaque(false); //这样就能显示出背景图片出来了。

剩下的就是在面板中添加相关的控件,添加语句可以用:

(1)frame.getContentPane().add(panel);        (2)cp.add(panel)

效果一样;

另一种方法则是直接为面板设置背景图片,源代码如下:

contentPane = new JPanel(){

private static final long serialVersionUID=-1588458291133087637L;

public void paint(Graphics g){

ImageIcon icon=new ImageIcon("src/images/5.jpg");

Image image=icon.getImage();

g.drawImage(image, 0, 0, null);

}

};

但在实验中发现,显示效果不如前一种方法,不知为何,面板上设置的标签文字显示不出来,所以,后一种方法虽然更简便,但似乎前一种方法效果更好!

第三种方法:

contentPane.setOpaque(false);

JLabel backgroundLabel = new JLabel("");

ImageIcon background = new ImageIcon(BalloonMove.class.getResource("/images/background.jpg"));

backgroundLabel.setBounds(0, 0, background.getIconWidth(),background.getIconHeight());

backgroundLabel.setIcon(background);

getLayeredPane().add(backgroundLabel, new Integer(Integer.MIN_VALUE));

窗口中的标签,可以直接添加到contentPane面板中,很显然,最后一种方法显示效果很好,且代码简便。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。