有时候为了使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).setBackground(Color.red),却又发现jScrollPane1.getCorner(JScrollPane.UPPER_RIGHT_CORNER)为NULL,原来要给他添加一个corner component,
那就再添加如下代码:
 JLabel jb = new JLabel();
        JLabel jb = new JLabel();    
 jb.setBackground(Color.black);
        jb.setBackground(Color.black);
 jScrollPane1.setCorner(JScrollPane.UPPER_RIGHT_CORNER, jb);
        jScrollPane1.setCorner(JScrollPane.UPPER_RIGHT_CORNER, jb);但是通过测试发现那个corner的颜色依然没有灰色,郁闷!!查找资料得将lable.setOpaque(true)
关于此方法的解释如下:
如果为 true,则该组件绘制其边界内的所有像素。否则该组件可能不绘制其某些或所有像素,从而允许其下面的像素透视出来。 
对于 JComponent 而言,此属性的默认值是 false。但是对于大多数标准的 JComponent 子类(如 JButton 和 JTree),此属性的默认值是和外观相关的。
这样就效果如图三:
                      
                                              图三
不过当时不知道这个setOpaque(true),而是用了另外一个比较笨的方法,如:
 JLabel jb = new JLabel();
        JLabel jb = new JLabel();    
 //jb.setOpaque(true);
        //jb.setOpaque(true);
 jb.setBackground(Color.black);
        jb.setBackground(Color.black);
 jb.setBorder(BorderFactory.createLineBorder(Color.red, 20));
        jb.setBorder(BorderFactory.createLineBorder(Color.red, 20));
 jScrollPane1.setCorner(JScrollPane.UPPER_RIGHT_CORNER, jb);
        jScrollPane1.setCorner(JScrollPane.UPPER_RIGHT_CORNER, jb);
测试的代码如:
 import java.awt.BorderLayout;
import java.awt.BorderLayout;
 import java.awt.Color;
import java.awt.Color;
 import java.awt.Component;
import java.awt.Component;
 import javax.swing.BorderFactory;
import javax.swing.BorderFactory;
 import javax.swing.JFrame;
import javax.swing.JFrame;
 import javax.swing.JLabel;
import javax.swing.JLabel;
 import javax.swing.JScrollPane;
import javax.swing.JScrollPane;
 import javax.swing.JTable;
import javax.swing.JTable;
 import javax.swing.SwingConstants;
import javax.swing.SwingConstants;
 import javax.swing.table.DefaultTableModel;
import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableModel;
import javax.swing.table.TableModel;


 public class KJTable extends JFrame
public class KJTable extends JFrame {
{
 private JTable table;
    private JTable table;
 private KJTableCellRenderer renderer = new KJTableCellRenderer();
    private KJTableCellRenderer renderer = new KJTableCellRenderer();
 private BorderLayout borderLayout = new BorderLayout();
    private BorderLayout borderLayout = new BorderLayout();
 private JScrollPane jScrollPane1 = new JScrollPane();
    private JScrollPane jScrollPane1 = new JScrollPane();

 public KJTable()
    public KJTable() {
{
 this.setLayout(borderLayout);
        this.setLayout(borderLayout);
 table = new JTable();
        table = new JTable();
 table.setRowHeight(20);
        table.setRowHeight(20);

 Object rows[][] =
        Object rows[][] = {
{

 
                 { "王明", "中国", 44 },
{ "王明", "中国", 44 },

 
                 { "姚明", "中国", 25 },
{ "姚明", "中国", 25 },

 
                 { "赵子龙", "西蜀", 1234 },
{ "赵子龙", "西蜀", 1234 },

 
                 { "曹操", "北魏", 2112 },
{ "曹操", "北魏", 2112 },

 
                 { "Bill Gates", "美国", 45 },
{ "Bill Gates", "美国", 45 },

 
                 { "Mike", "英国", 33 },
{ "Mike", "英国", 33 },

 
                 { "王明", "中国", 44 },
{ "王明", "中国", 44 },

 
                 { "姚明", "中国", 25 },
{ "姚明", "中国", 25 },

 
                 { "赵子龙", "西蜀", 1234 },
{ "赵子龙", "西蜀", 1234 },

 
                 { "曹操", "北魏", 2112 },
{ "曹操", "北魏", 2112 },

 
                 { "Bill Gates", "美国", 45 },
{ "Bill Gates", "美国", 45 },

 
                 { "Mike", "英国", 33 }};
{ "Mike", "英国", 33 }};

 String columns[] =
        String columns[] =  { "姓名", "国籍", "年龄" };
{ "姓名", "国籍", "年龄" };
 TableModel model = new DefaultTableModel(rows, columns);
        TableModel model = new DefaultTableModel(rows, columns);
 JTable table = new JTable(model);
        JTable table = new JTable(model);    
 table.setModel(model);
        table.setModel(model);
 table.getTableHeader().setDefaultRenderer(renderer);
        table.getTableHeader().setDefaultRenderer(renderer);
 table.setDefaultRenderer(Object.class, renderer);
        table.setDefaultRenderer(Object.class, renderer);
 jScrollPane1.getViewport().add(table);
        jScrollPane1.getViewport().add(table);
 getContentPane().add(jScrollPane1, BorderLayout.CENTER);
        getContentPane().add(jScrollPane1, BorderLayout.CENTER);        
 JLabel jb = new JLabel();
        JLabel jb = new JLabel();    
 //jb.setOpaque(true);
        //jb.setOpaque(true);
 jb.setBackground(Color.black);
        jb.setBackground(Color.black);
 jb.setBorder(BorderFactory.createLineBorder(Color.red, 20));
        jb.setBorder(BorderFactory.createLineBorder(Color.red, 20));
 jScrollPane1.setCorner(JScrollPane.UPPER_RIGHT_CORNER, jb);
        jScrollPane1.setCorner(JScrollPane.UPPER_RIGHT_CORNER, jb);        
 this.setSize(300, 200);
        this.setSize(300, 200);
 this.setVisible(true);
        this.setVisible(true);
 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
    }

 public static void main(String[] args)
    public static void main(String[] args)  {
{
 new KJTable();
        new KJTable();
 }
    }    

 private class KJTableCellRenderer extends JLabel implements TableCellRenderer
    private class KJTableCellRenderer extends JLabel implements TableCellRenderer {
{
 public Component getTableCellRendererComponent(JTable table, Object value,
        public Component getTableCellRendererComponent(JTable table, Object value,

 boolean isSelected, boolean hasFocus, int row, int col)
                            boolean isSelected, boolean hasFocus, int row, int col)  {
{            

 if(row<0)
            if(row<0) {
{
 setHorizontalAlignment(SwingConstants.CENTER);
                setHorizontalAlignment(SwingConstants.CENTER);
 setBackground(new Color(45,145,180));
                setBackground(new Color(45,145,180));
 setForeground(Color.white);
                setForeground(Color.white);
 }
            }    

 else
            else  {
{
 setHorizontalAlignment(SwingConstants.LEFT);
                setHorizontalAlignment(SwingConstants.LEFT);

 if(row %2 == 0)
                if(row %2 == 0) {
{
 setBackground(new Color(255,255,205));
                    setBackground(new Color(255,255,205));
 setForeground(Color.blue);
                    setForeground(Color.blue);
 }
                }

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