给自己写的界面加背景

     刚学Swing的时候感觉这东西好神奇啊,虽然不能完全按照自己想的把界面画出来,但是进过多番微调的话还是能达到一个满意的效果滴

    给界面加背景是个非常实用的小技术,本人从网上学了个,代码比较少而且简单,在此给那些跟我一样学Swing的小鸟们晒晒,关键是对JPanel里面的paintComponent方法进行重写

    代码代码:

 

import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;

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



public class BackgroundTest {
	public void showUI(){
    	final JFrame frame = new JFrame("背景测试");
    	frame.setSize(400, 500);
    	frame.setLayout(new GridLayout(1,1));
    	
    	//设置背景
    	//你需要的图片,创建为ImageIcon
    	final ImageIcon image = new ImageIcon("D:\\Image_source\\ChatUI.jpg");
    	
    	JPanel panel = new JPanel(){
    		public void paintComponent(Graphics g){
    			/*
    			 * 以下三行分别是:
    			 * 1. 继承原来的方法
    			 * 2. 把图片弄上去
    			 * 3. 把组件设置为透明,让图片显示出来
    			 */
    			super.paintComponent(g);
    			g.drawImage(image.getImage(), 0, 0, null);
    			this.setOpaque(false);
    		}
    	};
    	frame.add(panel);//将panel添加到frame上就ok了
    	
    	//然后再在panel上添加你想要的组件
    	panel.setLayout(new FlowLayout());//要加组件就得先弄个布局器
    	
    	JTextField tField = new JTextField(15);
    	JButton button = new JButton("木哈哈");
    	
    	panel.add(tField);
    	panel.add(button);
    	
    	frame.setVisible(true);
    	frame.setDefaultCloseOperation(3);
    	frame.setLocationRelativeTo(null);
    	
    	frame.setResizable(false);//此处将掩盖此方法的缺陷,见文章后面解说...
	}
    public static void main(String args[]){
    	BackgroundTest t = new BackgroundTest();
    	t.showUI();
    }
}

  

 

然后是运行效果:

 

(由于找不到个理想的支持外链的网床,效果图片就用附件了,要点击才能看到全图.......大家有没有

好的网床推荐个啊) 

 

 

 

下面是此方法的补充说明:

 

1.  frame.setLayout(new GridLayout(1,1))
     之所以用 GridLayout(1,1) 是想让panel充满整个frame,当然也有其他方法,但这个比较简单和直接,反正这个是测试嘛,具体情况再具体分析

 

2.  关于用panel添加背景的那块

     panel new完以后,以前看的上面是用一个JScrollPane来承载panel,经本人实践以后发现不加那几行代码也行,但如果你设置的组件要超出frame的显示范围的话那你就要加了

 

3.  frame.setResizable(false)

     这个语句比较重要,你丫把这行注释掉,然后再把界面最大化吧,让你看看“金玉其外,败絮其中”的悲剧现场,呵呵

这条语句就是强制把你技术上的不足给弥补掉,直接让别人不能最大化,蛮无耻的,呵呵,不过对于初学者很实用。

 

4.  this.setOpaque(false)

     这是让组件透明的方法,既然是做背景,那么一定不希望后来加的大范围组件把背景给掩盖掉,比如你要在上面再添加panel,如果直接加的话那么新的panel就会把一部分背景盖掉,这时就需要调用setOpaque方法。另外在补充一下,如果要添加一个带滚动条的JtextArea的话,就要把JScrollPane那边也透明,即加上如下两行代码:

   scroll.setOpaque(false);

   scroll.getViewport().setOpaque(false);

 

OK,就写到这里吧,希望能帮上你些忙

有不懂的地方或者有改进的方法就“跪求你留言”撒,木哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值