2009-07-01 63 views
1

我有一個DefaultTableCellRenderer的實現。當某人在表格中選擇一行時,該行將突出顯示爲綠色。如果我想突出顯示所選的那一行,最簡單的方法是什麼?這甚至可以不必重新渲染整個表格?在JTable中繪製行

因此,在這一刻,有我的東西,看起來像這樣:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 
     int row, int column) { 
    Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
    if (isSelected) { 
     component.setBackground(Color.GREEN); 

     // Somewhere here I would like to retrieve the row below the current row and give it another color 

    } else { 
     component.setBackground(Color.WHITE); 
    } 
    return component; 
} 

回答

4

把你的想法了一下週圍。您不需要選定行的渲染器來控制下面的行。你應該做的每一行檢查,看看上面的行是否被選中,如果是,那麼它會突出顯示。

if (table.isRowSelected(row - 1)) { 
    // Highlight self. 
    component.setBackground(Color.YELLOW); 
} 

只要選擇更改,您可能還需要使突出顯示的行重新繪製。我懷疑Java只會重新繪製默認選擇/取消選擇的行,所以下面的行不會被重新繪製。我沒有JDK我目前的機器上,所以我無法測試,但如果是這樣的話,那麼這樣的事情應該做的伎倆:

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { 
    public void valueChanged(ListSelectionEvent event) { 
     table.repaint(); 
    } 
}); 

其實你可以更聰明,只是重繪確切需要重新繪製的行。如果你有這樣的傾向,我會把它作爲一個練習(一個困難的,而不是非常值得的練習)。