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

            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 閱讀(2433) 評論(0)  編輯  收藏 所屬分類: swing
          主站蜘蛛池模板: 特克斯县| 平邑县| 昌都县| 额尔古纳市| 泸西县| 山西省| 烟台市| 泸定县| 孟州市| 彭山县| 遂平县| 山东省| 泰顺县| 林甸县| 中西区| 郧西县| 奈曼旗| 白玉县| 锦州市| 江门市| 法库县| 永平县| 宁德市| 南溪县| 襄汾县| 安福县| 姚安县| 晋州市| 宁德市| 宜章县| 那曲县| 堆龙德庆县| 宣化县| 方正县| 泊头市| 宁河县| 盐津县| 安塞县| 怀集县| 泰安市| 无为县|