2017-02-26 1 views
0

Ich versuche, die Farbe der Zellen der dritten Zeile meiner JTable zu ändern, wenn sie einen Wert haben. Ich lese, dass ein guter Weg, dies zu tun, ein Tabellenzellen-Renderer ist. Es scheint jedoch nichts zu tun! Hier gibt es meine RENDERER Code:DefaultTableCellRenderer funktioniert nicht

public class RenderTablaPrestamos extends DefaultTableCellRenderer{ 

    @Override 
    public Component getTableCellRendererComponent (JTable tabla, Object valor, 
               boolean isSelected, boolean hasFocus, 
               int row, int col){ 
    JLabel celda = (JLabel) super.getTableCellRendererComponent(tabla, valor, isSelected, hasFocus, row, col); 

     if(valor instanceof Integer){ 
      Integer v=(Integer)valor; 
      if(col==3){ 
       if(valor!=null){ 
        celda.setBackground(Color.red); 
       } 
       else{ 
        celda.setBackground(Color.WHITE); 
       } 
      } 
      else{ 
       celda.setBackground(Color.WHITE); 
      } 
     } 
    return celda; 
    } 
} 

Hier gibt es, wie ich meine Renderer verwenden:

tablaUsuariosPrestamos.setDefaultRenderer(Object.class,new RenderTablaPrestamos()); 

Hier ist ein Bild von meiner JTable (ich glaube nicht, das Modell Code jeder nützlich wäre wie es irgendwie lang ist):

enter image description here

ich glaube nicht, dass irgendetwas mit der zu tun hat, wenn clausules, ein Ich habe sie kommentiert und es hat auch nicht funktioniert.

Wohin gehe ich falsch?

+0

Sie den Renderer für die Objektklasse zu setzen. Ihr Modell scheint anzuzeigen, dass die Klasse für die dritte Spalte Integer ist (da sie bereits auf eine bestimmte Art gerendert werden). Pos ein komplettes minimales Programm, das das Problem reproduziert. Keine Notwendigkeit, Ihr echtes Modell zu veröffentlichen. Außerdem könnten Sie zumindest überprüfen, ob Ihr Renderer aufgerufen wird, indem Sie Ihren Debugger verwenden und einen Haltepunkt setzen. Warum tust du das nicht? –

+0

Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. Übrigens - ein Etikett muss undurchsichtig sein, um eine BG-Farbe zu zeigen. –

Antwort

1

Verwenden

for (int i = 0; i < tabla.getColumnCount(); i++) { 
    tabla.getColumnModel().getColumn(i).setCellRenderer(new RenderTablaPrestamos()); 
} 

statt

tablaUsuariosPrestamos.setDefaultRenderer(Object.class,new RenderTablaPrestamos()); 
Verwandte Themen