`
Kslsi
  • 浏览: 22501 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

java中如何设置各类组件透明

    博客分类:
  • java
 
阅读更多

     失眠并不是一无是处,至少我认真完成了我的工作,而且还收获了很多。

 

      对于一般的swing组件,设置透明就只用一句代码:

nameOfComponent.setOpaque(false);

 

       但这一句代码不是万能的 ,当遇到JButton、JScrollPane、JTable等等组件的时候,这一句代码是完全不够用的,下面来总结一下吧~

 

       JButton,按钮组件,用下面这句代码将其设置为透明:

jbt_login.setContentAreaFilled(false);

 

       对比效果如图:

 

       同时我们也可用自己定义的图片替换按钮(实际上将图片添加到按钮上),使我们的界面看起来更漂亮,通过以下代码实现:

jbt_login = new JButton("登  录");//实例化一个JButton对象
ImageIcon icon = new ImageIcon("images/loginBackground.jpg");//实例化一个图片对象
jbt_login.setIcon(icon);
jbt_login.setContentAreaFilled(false);

 

        JScrollPane视图,相对于JButton复杂一点,不过也就只多了一行代码:

name.setOpaque(false);
name.getViewport().setOpaque(false);

       不过值得注意的是,这两行代码只是让JScrollPane视图透明,在应用中添加在此视图上的其他组件也要都要setOpaque(false)。

 

       JTable,队友说:我再也不想理JTable了,它太逗了。然后我笑了,不过现在发现JTable确实很逗,设置透明最为复杂。

 

       JTable实例化的一个表分为表头和表体(我姑且这么叫),所以在设置透明的时候,也得分为两部分实现:

表体:

	/* *
        * 将表格设置为透明,表格同样包括表格本身和其中的内容项 
         * 仅仅将表格本身设置为透明也没有用,应该将其中的内容项也设置为透明 
         * 内容项的设置是通过设置渲染器的透明来实现 
         */ 
	table.setOpaque(false);
	DefaultTableCellRenderer render = new DefaultTableCellRenderer();
	render.setOpaque(false);//将渲染器设置为透明   

       //将这个渲染器设置到fileTable里。   
        //这个设置在没有另外专门对column设置的情况下有效   
        //若你对某个column特殊指定了渲染器,则对于这个column,它将不调用render渲染器   
        //因此为了保证透明,如果你对column额外指定了渲染器,那么在额外的渲染器里也应该设置透明   
	table.setDefaultRenderer(Object.class, render);

       注:在设置一个表透明的时候,一定的再设置之前有这个表,否则你动作的对象都没有,如何做这个动作呢?

 

表头:

	//头部实际上也是一个JTABLE,只有一行而已。   
        	JTableHeader header = fileTable.getTableHeader();//获取头部    
         header.setOpaque(false);//设置头部为透明   
        	header.getTable().setOpaque(false);//设置头部里面的表格透明   
          
        	/* *
         * 头部的表格也像前面的表格设置一样,还需要将里面的单元项设置为透明 
         	 * 因此同样需要对头部单元项进行透明度设置,这里还是用渲染器。 
         	 */  
        header.setDefaultRenderer(render);  
        TableCellRenderer headerRenderer = header.getDefaultRenderer();   
        if (headerRenderer instanceof JComponent)   
        {  
            ((JComponent) headerRenderer).setOpaque(false);   
        } 

        注:表头设置透明以后,表头部分的网格线会丢失,如果想将其补全的话可以用自己画。方法此处不提供。

 

       下图为设置各个组件透明后的效果(由于效果,未设置表头透明):

        就这么多吧,电脑慢得啊。。。电脑需要休息,人更需要休息,补觉去了~

  • 大小: 147.2 KB
  • 大小: 61.1 KB
分享到:
评论
4 楼 Kslsi 2014-10-13  
MNTMs 写道
失恋了啊  睡不着 

....你才失恋了。。。
3 楼 MNTMs 2014-08-01  
失恋了啊  睡不着 
2 楼 Kslsi 2014-07-31  
MNTMs 写道
还要补觉啊   是写到有多晚  

我是一夜没睡。。。
1 楼 MNTMs 2014-07-31  
还要补觉啊   是写到有多晚  

相关推荐

Global site tag (gtag.js) - Google Analytics