2014-12-03 65 views
0

我認爲prepareRenderer(...)是造成麻煩。我要讓JTable創建代碼是: -setSelectionBackGround()在jTable中沒有設置顏色

jTable1 = new javax.swing.JTable(){ 
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) 
{ 
    Component c = super.prepareRenderer(renderer, row, column); 
    if(column==0){ 
     c.setBackground(new java.awt.Color(223, 223, 223)); 
     c.setForeground(new Color(121, 63, 63)); 
     c.setFont(new java.awt.Font("Tahoma", java.awt.Font.BOLD, 12)); 
    }else{ 
     c.setBackground(new java.awt.Color(235, 235, 235)); 
     c.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 12)); 

    } 
    return c; 
} 
}; 

現在,當我使用: -

jTable1.setSelectionBackground(Color.BLACK); 

這是行不通的。任何想法如何解決它?

編輯:我完全除去了prepareRenderer(...)方法和黑色選擇可能我做

+0

覆蓋isSelected/HasFocus,同樣的方法與標準渲染,但不要求爲prepareRenderer的參數 – mKorbel 2014-12-03 10:01:17

+0

@mKorbel,請閱讀編輯 – khandelwaldeval 2014-12-03 10:06:45

回答

0

終於找到了解決辦法...

public Component prepareRenderer(TableCellRenderer renderer, int row, int column) 
{ 
Component c = super.prepareRenderer(renderer, row, column); 
if(column==0){ 
    c.setBackground(new java.awt.Color(223, 223, 223)); 
    c.setForeground(new Color(121, 63, 63)); 
    c.setFont(new java.awt.Font("Tahoma", java.awt.Font.BOLD, 12)); 
}else{ 
    setBackground(new java.awt.Color(235, 235, 235));//c.setBackground(..) was the problem 
    c.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 12)); 

} 
return c; 
} 
+0

組件c是AWT父項,但無論如何傳送給JComponent例如JComponent jc =(JComponent)c ;, aaach – mKorbel 2014-12-03 11:21:49

1

這是從DefaultTableCellRenderer

if (isSelected) { 
     super.setForeground(fg == null ? table.getSelectionForeground() 
             : fg); 
     super.setBackground(bg == null ? table.getSelectionBackground() 
             : bg); 
    } 

代碼段正如你可以看到選擇的背景是對測試程序設置爲渲染器(實際上在您的調用super.prepareRenderer(渲染器,行,列))

之後,您只需將背景重置爲其中一種顏色s取決於列。但是,不管列號是哪一個,你實際上都會替換選擇背景。

如果列!= 0通話

c.setBackground(getSelectionBackground());