3 votes

personnaliser le rendu des cellules de jtable avec la couleur de l'en-tête des cellules de la table

Il s'agit d'une question très similaire à celle-ci poste précédent de la mienne. J'ai besoin de personnaliser certaines cellules d'un JTable, de manière à ce qu'elles ressemblent à une cellule d'en-tête de tableau. J'utilise Nimbus look and feel et j'essaie de récupérer la couleur de l'éditeur de JTable :

public class HeaderCellRenderer extends JLabel implements TableCellRenderer{

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {

        System.out.println("OK");
        this.setOpaque(true);
        setBackground(UIManager.getColor("TableHeader.background"));
        return this;
    }

}

Je suis ce site poste pour obtenir le nom à fournir à la méthode getColor ("TableHeader.background"). Malgré ce que j'ai fait depuis, la couleur retournée n'est pas la même que celle des cellules d'en-tête de mon tableau.

Avez-vous une idée ?

EDIT :

J'ai remarqué qu'au lieu d'une couleur il faudrait un dégradé mais je n'arrive pas à trouver la bonne clé à utiliser. J'ai cherché cette liste .

3voto

trashgod Points 136305

L'apparence de l'en-tête de tableau par défaut pour une charte graphique typique est fournie par une instance de sun.swing.table.DefaultTableCellHeaderRenderer . Vous pouvez en obtenir une copie comme suit :

class HeaderRenderer implements TableCellRenderer {

    TableCellRenderer renderer;

    public HeaderRenderer(JTable table) {
        renderer = table.getTableHeader().getDefaultRenderer();
    }

    @Override
    public Component getTableCellRendererComponent(
        JTable table, Object value, boolean isSelected,
        boolean hasFocus, int row, int col) {
        return renderer.getTableCellRendererComponent(
            table, value, isSelected, hasFocus, row, col);
    }
}

et vous pouvez l'installer de la manière habituelle pour une colonne donnée. type de jeton :

table.setDefaultRenderer(SomeObject.class, new HeaderRenderer(table));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X