2011-10-15 54 views
7

我已經試過:如何更改JTable的標題背景顏色?

table.getTableHeader().setBackground(Color.BLACK); 

不工作。

編輯:此代碼不適用於我的項目只。在其他項目中工作。我可能已經改變了一個可以阻止顏色改變的屬性。或者,也許NetBeans有一些保留默認顏色的屬性。我注意到別的東西。我項目中標題的顏色以不同的方式閃耀。在顏色改變的例子中,我看到了不同的圖形。

編輯2:別的東西。我注意到按鈕也不會改變顏色。必須是通用的。希望這可以幫助。不幸的是,SSCCE在這種情況下不起作用,因爲我無法重現問題。我當然使用正確的組件名稱。

+0

另請參見[如何將控件放在JTable的JTableHeader中?](http://stackoverflow.com/questions/7137786/how-can-i-put-a-control-in-the-jtableheader -of-A-JTable的)。 – trashgod

+0

這與NetBeans保持一些默認顏色無關,它們都與代碼中的錯誤有關,但只是聲明「此代碼不適用於我的項目」,並且沒有任何代碼,最好是sscce,我懷疑我們任何人都可以給你更多的幫助,而不是建議你嘗試更深入的調試。也許你試圖改變標題顏色的表不是顯示的表格對象,但又沒有可以理解的編碼,最好是可編譯的代碼,這只是我的一個SWAG? –

回答

1

解決了它。 在NetBeans中:

  • 右鍵單擊項目的名稱
  • 屬性
  • 應用 - 桌面應用
  • 外觀和風格:選擇 'Java默認'(不帶系統默認工作)
  • 記得在運行項目之前清理並重建

此外整個項目的圖形也改變了外觀。

+0

看起來像這個選項只適用於['Java Desktop Application']類型的NetBeans項目(http://stackoverflow.com/questions/2561480/netbeans-gui-editor-generating-its-own-incomprehensible-code/ 2561540#2561540)。考慮更新問題以包含標籤[tag:jsr296]。 – trashgod

+0

我仍然認爲它可以在代碼中解決,你可能沒有設置屬性的正確引用。 –

+0

我建議你將你的項目*與源代碼*一起上傳到某個地方,然後讓我們看看它。 –

11

它適合我。這裏是我的SSCCE

import java.awt.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class TableHeaderBackground { 
    public static void main(String[] args) { 
     Integer[][] data = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; 
     String[] cols = {"A", "B", "C"}; 

     JTable table = new JTable(data, cols); 

     JTableHeader header = table.getTableHeader(); 
     header.setBackground(Color.black); 
     header.setForeground(Color.yellow); 

     JOptionPane.showMessageDialog(null, new JScrollPane(table)); 
    } 
} 

如果這不能幫助你,那麼我建議你創建和發佈自己的SSCCE,使我們可以看到什麼是錯的。

+1

它確實有效。對於我的桌子雖然不起作用。參見編輯。 –

3

表頭還使用渲染器組件,如表格單元格。

看看這個:

table.getTableHeader().setDefaultRenderer(new DefaultTableRenderer(){ 
    { 
    // you need to set it to opaque 
    setOpaque(true); 
    } 

@Override 
public Component getTableCellRendererComponent(final JTable table, 
    final Object value, final boolean isSelected, final boolean hasFocus, 
    final int row, final int column) { 
    // set the background 
    setBackground(yourDesiredColor); 
    } 
}); 

如果你並不需要一個動態的顏色,還可以設置在渲染器的構造函數的顏色。

5

我建議你這樣做:

DefaultTableCellRenderer headerRenderer = new DefaultTableCellRenderer(); 
headerRenderer.setBackground(new Color(239, 198, 46)); 

for (int i = 0; i < myJTable.getModel().getColumnCount(); i++) { 
     myJTable.getColumnModel().getColumn(i).setHeaderRenderer(headerRenderer); 
} 
7

嘗試...... table.getTableHeader()setOpaque(假)。

然後設置的JTable頭

table.getTableHeader()的setBackground(Color.BLACK)的背景。