JTable Rendu De Cellule

Que je suis un peu de code que j'ai trouvé, (Oui, je comprends comment ça fonctionne)
C'est à partir d'ici :Code Lien

Ce que je suis en train de faire est de mettre en cellules d'une couleur de premier plan, si les cellules valeur est "jaune"

Voici mon Code:

public class Board extends JPanel{

private static final long serialVersionUID = 1L;

int boardHeight = 20;
int boardWidth = 10;

JTable table;

public Board() {
    table = new JTable(this.boardHeight, this.boardWidth);
    table.setDefaultRenderer(String.class, new BoardTableCellRenderer());
    table.setFocusable(false);
    table.setShowGrid(false);
    table.setRowMargin(0);
    table.setIntercellSpacing(new Dimension(0,0));
    table.setRowSelectionAllowed(false);
    table.setVisible(true);
    this.add(table);
    this.setPreferredSize(new Dimension(table.getPreferredSize().width, (table.getPreferredSize().height + 85)));
}

public void paint(Graphics g) {
    table.setRowHeight(20);
    for (int x = 0; x < this.table.getColumnCount(); ++x) {
        TableColumn col = this.table.getColumnModel().getColumn(x);
        col.setPreferredWidth(20);
    }
}
}

Et le Rendu de Cellule

public class BoardTableCellRenderer extends DefaultTableCellRenderer {

private static final long serialVersionUID = 1L;

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

    Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
    String s = table.getModel().getValueAt(row, col).toString();

    if (s.equalsIgnoreCase("yellow")) {
        c.setForeground(Color.YELLOW);
    }
    else {
        c.setForeground(Color.WHITE);
    }

    return c;
}
}

Le problème est qu'il ne change pas, si j'ai mis toutes les cellules de la valeur à "jaune"

Merci d'avance!

Vous ne devriez pas être majeur Composite de la méthode de peinture, mais plutôt sa méthode paintComponent, et, indépendamment de cela, vous ne devriez jamais avoir une logique de programme étant appelé à partir de l'intérieur de la peinture ou de paintComponent. Ceci suggère que votre code doit être plus serré.
C'est là parce que finalement, je vais le faire stretch à la taille de la fenêtre, j'ai donc besoin de mettre à jour.
ce n'est pas comment vous faites, il est extensible. Encore une fois, ne mettez jamais la logique de code de ces méthodes. Vous de ne jamais avoir le plein contrôle sur quand ou même si cette méthode est appelée. Si vous devez absolument écouter un événement resize (et ne sont pas en utilisant le layout manager), vous devez ajouter un ComponentListener pour le Composite.
Ok, mauvais souvenir de recoder que plus tard. Merci!
Veuillez voir les éditions 1 et 2 dans ma réponse.

OriginalL'auteur Diesal11 | 2011-07-11