[Java-Swing] Coloration ligne JTable

Menardo Messages postés 9 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 10 mars 2010 - 6 mars 2010 à 19:45
Menardo Messages postés 9 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 10 mars 2010 - 10 mars 2010 à 19:54
Bonsoir,

tout d'abord, je vous présente mon problème.

Pour une application que je suis en train de développer, j'utilise une JTable pour afficher des données. Cette JTable utilise un modèle de table développé par mes soins en dérivant de la classe AbstractTableModel. Enfin, j'utilise une interface graphique (dérivant de JFrame) dans laquelle se trouve ma JTable.

Apres cette bref présentation, mon problème est le suivant :
J'aimerais, à partir de ma classe d'interface, pouvoir colorer une ligne de la JTable, ceci serait grâce à une méthode à laquelle je fournirais l'indice de la ligne.

J'ai déjà parcouru de nombreux post concernant ce genre de problème, la plupart expliquant d'utiliser des cellRenderer principalement. Cependant après divers essais avec ces techniques, il semblerait que le cellRenderer provoque la coloration des cellules correspondant à des coordonnées spécifiées en dur dans le code. Or mon objectif est de colorer de façon dynamique (en fonction de la ligne actuellement sélectionnée principalement).

Ainsi, exprimé de manière un peu plus concise, ce qu'il me faudrait est :
une méthode, (pouvant être dans ma dérivation de JTable, ou dans mon interface, cela n'importe pas) qui permet de colorer la, et uniquement celle ci, ligne indiqué en paramètre par son indice.

En espérant avoir été suffisamment clair, n'hésitez pas si une incompréhension demeure.
Je suis preneur si vous avez des idées, des pistes ou même soyons fou, des codes correspondant !

Tout en vous remerciant,

Bonne soirée.


menardo

7 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
7 mars 2010 à 09:58
As-tu essayé quelque-chose comme ceci ?
table = new JTable(4, 4) {
    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
        Component c = super.prepareRenderer(renderer, row, column);
        if (isRowSelected(row)) {
            c.setBackground(Color.YELLOW);
        } else {
            c.setBackground(getBackground());
        }
        return c;
    }
};
0
Menardo Messages postés 9 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 10 mars 2010
7 mars 2010 à 11:13
Oh ca marche !

Merci beaucoup pour ton aide, je commencais à déprimer sur ce probleme .


Merci beaucoup !
0
Menardo Messages postés 9 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 10 mars 2010
7 mars 2010 à 13:29
Bonjour de nouveau !

En fait, après quelque test, cette méthode ne résout que la moitié de mon problème, je vous explique plus en détail.

Ma JTable contient en fait du langage d'assemblage (langage très proche de l'assembleur, développé pour les besoins de mon université). Mon but étant que, lorsque que l'on clique sur une ligne comportant une instruction de saut "JMP" ou autre, la ligne vers laquelle ce saut se produit soit colorée. Exemple :

0: JMP 1
1: END

Quand on clique sur la ligne 0, il faudrait que celle ci soit colorée (puisque qu'elle contient un JMP) et également que la ligne 1 soit colorée (c'est la ligne visée par le JMP). Avec le code que tu m'as fournit, j'arrive à colorer la ligne 0 (pas très dur en fait.. :) ), mais je n'arrive pas à trouver le moyen de colorer la ligne 1.

Aurais-tu une idée?


Merci !
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
7 mars 2010 à 20:21
Je dirais qu'il suffit d'ajouter une condition supplémentaire basée sur un attribut "jmp", comme ceci:

class MyTable extends JTable {
    private int jmp;
    MyTable(final int numRows, final int numColumns) {
        super(numRows, numColumns);
    }
    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
        Component c = super.prepareRenderer(renderer, row, column);
        if (isRowSelected(row) || row == jmp) {
            c.setBackground(Color.YELLOW);
        } else {
            c.setBackground(getBackground());
        }
        return c;
    }
    /**
     * 
     * @param jmp   the row number to be colored, or -1 if no row should be colored
     */
    public void setJmp(final int jmp) {
        this.jmp = jmp;
        repaint();
    }
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Menardo Messages postés 9 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 10 mars 2010
8 mars 2010 à 22:50
Bonsoir,

Je ne comprends pas trop la finalité de ta modification. Ainsi je vais ré expliquer mon objectif.

Cas n°1 : on ne sélectionne pas de ligne dans la JTable, aucune ligne n'a donc de couleur spéciale

Cas n°2 : on sélectionne une ligne qui ne contient pas d'instruction JMP, aucune ligne n'a donc de couleur spéciale.

Cas n°3 : on sélectionne une ligne qui contient une instruction JMP, cela doit provoquer la coloration de celle ci (déjà réussi grâce à ta première intervention) mais aussi la coloration de ligne ciblée par le JMP. Le problème étant que cette ligne n'est pas sélectionnée, il n'y aurait donc aucune raison pour que celle ci fasse appel à son prepareRenderer ?

Et en effet, la ligne ciblée ne se recolore pas.

As-tu une idée?
0
Menardo Messages postés 9 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 10 mars 2010
9 mars 2010 à 00:09
Ah, j'ai arrêté d'être bête et je pense avoir compris ta technique ! Je mets ça en place demain et je te tiens au courant.

Encore merci pour ton aide !
0
Menardo Messages postés 9 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 10 mars 2010
10 mars 2010 à 19:54
C'est bon, tout marche !

Je te remercie !


Problème résolu.
0
Rejoignez-nous