程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 為JTable添加JScrollPane給corner設置顏色

為JTable添加JScrollPane給corner設置顏色

編輯:關於JAVA

有時候為了使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 子類(如 JButton 和 JTree),此屬性的默認值是和外觀相關的。

這樣就效果如圖三:

圖三

不過當時不知道這個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(300, 200);
         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;
         }
     }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved