Question

J'ai jTable1 avec 2 colonnes.Je souhaite contrôler l'apparence de la colonne 1, j'utilise donc le code suivant pour définir la police du texte dans les cellules en gras ou non, selon que la ligne des cellules est paire ou impaire.

import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class CustomTableCellRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent (JTable table, Object obj,
        boolean isSelected, boolean hasFocus, int row, int column) {
    Component cell = super.getTableCellRendererComponent(
        table, obj, isSelected, hasFocus, row, column );
        if (row % 2 == 0){
            cell.setFont(getFont().deriveFont(Font.BOLD));
        }
        return cell;
    }
}

Je l'appelle en utilisant :

jTable1.getColumnModel().getColumn(1).setCellRenderer(new 
CustomTableCellRenderer());

Ce que je veux c'est modifier ça TableCellRenderer afin que l'arrière-plan des cellules soit peint en fonction de la valeur de l'autre colonne (colonne 0) sur la même ligne.Par exemple, si la valeur de la colonne 0, la ligne 5 est "livre", alors la cellule de la colonne 1, de la ligne 5 sera rouge, et si la valeur de la colonne 0 est "journal", alors la couleur de la colonne 1 est verte.Mon problème est que je ne sais pas comment transmettre la valeur column0 au moteur de rendu column1 afin qu'elle soit utilisée pour changer les couleurs.

Était-ce utile?

La solution 3

J'ai trouvé comment accéder aux données d'une autre colonne :

import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class CustomTableCellRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent (JTable table, Object obj,
    boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(
    table, obj, isSelected, hasFocus, row, column );

    //I USE THIS TO ACCESS THE DATA FROM ANOTHER CELL!!!
    TableModel model = table.getModel();
    String media= (String) model.getValueAt(row, 0)


    if (row % 2 == 0){
        cell.setFont(getFont().deriveFont(Font.BOLD));
    }


   //SO I GET THE RESULT I WANT
   if ("book".equals(media)){
     cell.setBackground(Color.red)  
   }
   else{
     cell.setBackground(Color.green)
   }  



    return cell;
}
}

Autres conseils

Vérifiez la signature du .getTableCellRendererComponent(...) méthode:vous obtenez une référence au JTable (à partir duquel vous pouvez obtenir le TableModel) et l'index de la ligne et de la colonne actuelles.

En utilisant ceux-ci, vous pouvez rechercher n'importe quelle valeur relative de votre choix.

Comme montré ici, vous pouvez remplacer prepareRenderer() pour affecter des lignes entières.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top