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

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

               
                  有時候為了使JTable配合軟件風(fēng)格配置不同的顏色,當(dāng)table的有表頭以及添加了JScrollPane有ScollBar的時候會出現(xiàn)有個右上角有個區(qū)域的顏色是和底色是一樣的,如下圖1:
                                 
                                                                         圖一

                  為了使得那個灰色區(qū)域和table header 的顏色一致,一時居然不知道如何是好,趕快查jdk的API文檔發(fā)現(xiàn)這個圖二:

                                 
                                                       圖二
          知道了這個corner component就好辦了,那就添加如下:

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

          卻又發(fā)現(xiàn)jScrollPane1.getCorner(JScrollPane.UPPER_RIGHT_CORNER)為NULL,原來要給他添加一個corner component,
          那就再添加如下代碼:

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

          但是通過測試發(fā)現(xiàn)那個corner的顏色依然沒有灰色,郁悶??!查找資料得將lable.setOpaque(true)

          關(guān)于此方法的解釋如下:
          如果為 true,則該組件繪制其邊界內(nèi)的所有像素。否則該組件可能不繪制其某些或所有像素,從而允許其下面的像素透視出來。

          對于 JComponent 而言,此屬性的默認值是 false。但是對于大多數(shù)標準的 JComponent 子類(如 JButtonJTree),此屬性的默認值是和外觀相關(guān)的。

          這樣就效果如圖三:
                               
                                                        圖三

          不過當(dāng)時不知道這個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 閱讀(2435) 評論(0)  編輯  收藏 所屬分類: swing
          主站蜘蛛池模板: 佳木斯市| 吉水县| 佛山市| 无极县| 江安县| 梨树县| 南投县| 白朗县| 石河子市| 富阳市| 惠来县| 江川县| 大英县| 盈江县| 平塘县| 登封市| 灌南县| 朔州市| 兴山县| 英超| 栖霞市| 金秀| 安阳市| 教育| 萝北县| 姚安县| 青铜峡市| 旺苍县| 蓝田县| 西安市| 广河县| 辽阳市| 阿巴嘎旗| 涟水县| 佛学| 贵定县| 汝州市| 五原县| 丰台区| 梧州市| 铁力市|