2011-07-28 50 views
8

我有一個基本的搖擺JTable和要求是,當單擊任何單元格時,整個行應該突出顯示,並且被單擊的單元格應該是與突出顯示的行的其餘部分不同的顏色。Swing JTable - 突出顯示與選定行的其餘部分不同顏色的選定單元格?

目前,我有isRowSelectionAllowed真正

我試圖用一個自定義的TableCellRenderer這是如下:

public class CustomTableCellRenderer extends DefaultTableCellRenderer 
{ 

public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer(); 
    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

    if (isSelected) { 
     c.setBackground(Color.red); 
    } 
    else { 
     c.setForeground(Color.black); 
     c.setBackground(Color.white); 
    } 
    return c; 
    }  
} 

但是,這似乎並沒有工作(整個行是以紅色突出顯示)。

我也試着設置UIManager的屬性,如下所示:

UIManager.put("Table.focusCellBackground", 
     new javax.swing.plaf.ColorUIResource (Color.red)); 

但是,這似乎並沒有工作,要麼(雖然,當我嘗試設置使用邊界

UIManager.put("Table.focusCellHighlightBorder", 
     new BorderUIResource.LineBorderUIResource(Color.red)); 

運行良好)

請問我可能需要提出什麼建議?

回答

10

試試這個:

jtable.setCellSelectionEnabled(true); 

然後在getTableCellRendererComponent

if (table.isCellSelected(row, column)) 
    setForeground(Color.red); 
else if (table.isRowSelected(row)) 
    setForeground(Color.green); 
else if (table.isColumnSelected(column)) 
    setForeground(Color.blue); 
else 
    setForeground(Color.black); 

這將呈現紅色選定的單元格,在綠色行的其餘部分,和列的藍色休息。注意:小區選擇要求選擇模型是單一的,其他選擇模型可能導致不可預知的行爲。

+0

我試過這個,但它根本不會改變顏色。它確實進入了'isCellSelected'和'isRowSelected'的if條件,但似乎沒有做任何事情。 –

+0

對不起,我的錯誤 - 我試過了,這個工作。非常感謝。 (由於工作代碼,將此設置爲接受的答案,其他答案對學習也有幫助)。 –

3

您需要關閉表格的行選擇和單元格選擇。然後找到一種方法返回並在需要時突出顯示該行。

+0

你的意思是我打開CellSelectionEnabled(true),然後使用像這樣的東西來處理行選擇? table.changeSelection(row,col,toggle,extend); ?這種結果是一樣的。 –

+0

是的,到第一部分,不到第二部分。您將需要一個單元格渲染器,以與選定單元不同的顏色突出顯示所選行。 – jzd

+0

我會盡力讓你知道。 –

4

但這似乎沒有工作(整行被紅色突出顯示)。

您需要檢查「hasFocus」變量,而不是「isSelected」變量。

另一個選擇,而不是創建多個自定義渲染器(如果您的表具有不同類類的列)是使用Table Row Renderering方法。

相關問題