2017-02-26 56 views
0

私のJTableの3番目の行のセルの色を変更しようとしています。これを行う良い方法は、表のセルレンダラーを使用することです。しかし、それは何もしていないようです!ここに私のRENDERERコードがあります:DefaultTableCellRendererが機能しない

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; 
    } 
} 

ここで私は私のレンダラを使用する方法があります:

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

ここに私のJTableの絵があります(私はモデルコードは任意の有用であろうとは思いませんそれは)ちょっと長いですと:

enter image description here

私はそれはとは何の関係もないとは思わないclausules、もし私は彼らにコメントしたが、どちらもうまくいかなかった。

どこが間違っていますか?

+0

あなたはObjectクラスのためのレンダラを設定しています。あなたのモデルは、3番目の列のクラスがIntegerであることを示しているようです(既に特定の方法でレンダリングされているため)。問題を再現する完全な最小限のプログラム。あなたの実際のモデルを投稿する必要はありません。また、デバッガを使用してレンダラが呼び出されているか、ブレークポイントを設定しているかどうかを少なくとも簡単に確認できます。なぜあなたはそれをしないのですか? –

+0

すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 BTW - BGカラーを表示するには、ラベルを不透明にする必要があります。 –

答えて

1

使用

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

代わりの

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