2009-07-01 6 views
1

J'ai une implémentation d'un DefaultTableCellRenderer. Lorsque quelqu'un sélectionne une ligne dans la table, la ligne est surlignée en vert. Si je voulais mettre en évidence la rangée sous celle sélectionnée, quel est le moyen le plus facile d'y parvenir? Est-ce possible même sans avoir à re-rendre toute la table?Lignes de peinture dans un JTable

Alors pour le moment, j'ai quelque chose qui ressemble à ceci:

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; 
} 

Répondre

4

Transformez votre façon de penser un peu. Vous n'avez pas besoin du moteur de rendu de la ligne sélectionnée pour contrôler la ligne ci-dessous. Ce que vous devriez faire, c'est que chaque rangée vérifie si la rangée ci-dessus est sélectionnée, et si c'est le cas, elle se met en évidence.

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

Vous devrez peut-être également faire repeindre la ligne en surbrillance lorsque la sélection change. Je soupçonne que Java ne repeint que les lignes qui ont été sélectionnées/désélectionnées par défaut, donc la ligne ci-dessous ne sera pas repeinte. Je n'ai pas le JDK sur ma machine actuelle, donc je ne peux pas tester, mais si tel est le cas, alors quelque chose comme ça devrait faire l'affaire:

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

En fait, vous pourriez être plus intelligent et seulement repeindre exactement rangée (s) qui doit être repeinte. Je vais laisser cela comme un exercice (un exercice difficile et pas terriblement valable) si vous êtes si incliné.