有才華的人,別忘記給滋潤你的那塊土壤施肥

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            28 隨筆 :: 5 文章 :: 147 評論 :: 0 Trackbacks

               
                  有時候為了使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;
                  }
              
              }

          }

          posted on 2008-03-21 17:08 kissjava 閱讀(2442) 評論(0)  編輯  收藏 所屬分類: swing
          主站蜘蛛池模板: 太保市| 赤水市| 休宁县| 合水县| 九江市| 静海县| 苍山县| 兴义市| 华安县| 汨罗市| 河北省| 阿城市| 青州市| 鹤岗市| 普兰店市| 浦东新区| 饶河县| 安徽省| 阿克陶县| 灵川县| 香河县| 三原县| 衡南县| 灵寿县| 得荣县| 潍坊市| 嘉义市| 华池县| 光泽县| 威远县| 富裕县| 苍山县| 白朗县| 永清县| 梁山县| 湛江市| 桃源县| 个旧市| 兴义市| 晋宁县| 九寨沟县|