JAVA setOpaque:为JTable添加JScrollPane给corner设置颜色

        有时候为了使JTable配合软件风格配置不同的颜色,当table的有表头以及添加了JScrollPane有ScollBar的时候会出现有个右上角有个区域的颜色是和底色是一样的,如下图1:
                       
                                                               图一

        为了使得那个灰色区域和table header 的颜色一致,一时居然不知道如何是好,赶快查jdk的API文档发现这个图二:

                       
                                             图二
知道了这个corner component就好办了,那就添加如下:
 

 

jScrollPane1.getCorner(JScrollPane.UPPER_RIGHT_CORNER).setBackground(Color.red),

却又发现jScrollPane1.getCorner(JScrollPane.UPPER_RIGHT_CORNER)为NULL,原来要给他添加一个corner component,
那就再添加如下代码:

        JLabel jb = new JLabel();    
        jb.setBackground(Color.black);
        jScrollPane1.setCorner(JScrollPane.UPPER_RIGHT_CORNER, jb);

但是通过测试发现那个corner的颜色依然没有灰色,郁闷!!查找资料得将lable.setOpaque(true)

关于此方法的解释如下:
如果为 true,则该组件绘制其边界内的所有像素。否则该组件可能不绘制其某些或所有像素,从而允许其下面的像素透视出来。

对于 JComponent 而言,此属性的默认值是 false。但是对于大多数标准的 JComponent 子类(如 JButtonJTree),此属性的默认值是和外观相关的。
 

这样就效果如图三:
                     
                                              图三

不过当时不知道这个setOpaque(true),而是用了另外一个比较笨的方法,如:
 

        JLabel jb = new JLabel();    
        
//jb.setOpaque(true);
        jb.setBackground(Color.black);
        jb.setBorder(BorderFactory.createLineBorder(Color.red, 
20));
        jScrollPane1.setCorner(JScrollPane.UPPER_RIGHT_CORNER, jb);

测试的代码如:
 

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;

public class KJTable extends JFrame{
    
private JTable table;
    
private KJTableCellRenderer renderer = new KJTableCellRenderer();
    
private BorderLayout borderLayout = new BorderLayout();
    
private JScrollPane jScrollPane1 = new JScrollPane();
    
public KJTable(){
        
this.setLayout(borderLayout);
        table 
= new JTable();
        table.setRowHeight(
20);
        Object rows[][] 
={
                
"王明""中国"44 },
                
"姚明""中国"25 },
                
"赵子龙""西蜀"1234 },
                
"曹操""北魏"2112 },
                
"Bill Gates""美国"45 },
                
"Mike""英国"33 },
                
"王明""中国"44 },
                
"姚明""中国"25 },
                
"赵子龙""西蜀"1234 },
                
"曹操""北魏"2112 },
                
"Bill Gates""美国"45 },
                
"Mike""英国"33 }}
;
        String columns[] 
= "姓名""国籍""年龄" };
        TableModel model 
= new DefaultTableModel(rows, columns);
        JTable table 
= new JTable(model);    
        table.setModel(model);
        table.getTableHeader().setDefaultRenderer(renderer);
        table.setDefaultRenderer(Object.
class, renderer);
        jScrollPane1.getViewport().add(table);
        getContentPane().add(jScrollPane1, BorderLayout.CENTER);        
        JLabel jb 
= new JLabel();    
        
//jb.setOpaque(true);
        jb.setBackground(Color.black);
        jb.setBorder(BorderFactory.createLineBorder(Color.red, 
20));
        jScrollPane1.setCorner(JScrollPane.UPPER_RIGHT_CORNER, jb);        
        
this.setSize(300200);
        
this.setVisible(true);
        
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    
public static void main(String[] args) {
        
new KJTable();
    }
    
    
private class KJTableCellRenderer extends JLabel implements TableCellRenderer{
        
public Component getTableCellRendererComponent(JTable table, Object value,
                            
boolean isSelected, boolean hasFocus, int row, int col) {            
            
if(row<0){
                setHorizontalAlignment(SwingConstants.CENTER);
                setBackground(
new Color(45,145,180));
                setForeground(Color.white);
            }
    
            
else {
                setHorizontalAlignment(SwingConstants.LEFT);
                
if(row %2 == 0){
                    setBackground(
new Color(255,255,205));
                    setForeground(Color.blue);
                }

                
else{
                    setBackground(
new Color(255,220,150));
                    setForeground(Color.red);
                }
            
            }
        
            setText(value.toString());
            setOpaque(
true);//
            return this;
        }
    
    }

}

点赞 (0)

发表评论

电子邮件地址不会被公开。 必填项已用*标注