2016-05-28 25 views
1

私のJavaプログラムでは、表のセルの色を設定する際に問題があります。 以下に示すように、セルには4つの異なるカラム成分があります。 これらのセルの色を変更すると、column1の色が変わります。JTableのセルの色を変更しているときの変更点

DefaultTableModel tableModel = new DefaultTableModel(columns,0){ 
    @Override 
    public Class<?> getColumnClass(int column) { 
     switch(column) { 
      case 0: return String.class; 
      case 1: return ImageIcon.class; 
      case 2: return Integer.class; 
      case 3: return Integer.class; 
      default: return Object.class; 
     } 
    } 
}; 

そして、私はそのようなセルの色を変更した:

table1.setDefaultRenderer(Object.class, new ColorChange); 
// I guess Object.class causes the problem 
public class ColorChange implements TableCellRenderer { 

    public final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer(); 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, 
                boolean isSelected, boolean hasFocus, int row, int column) { 
     Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, 
       value, isSelected, hasFocus, row, column); 

     // Apply zebra style on table rows 
     if (row % 2 == 0) { 
      c.setBackground(Color.WHITE); 
     } else { 
      c.setBackground(Color.decode("#F8F8F8")); 
     } 

     return c; 
    } 

} 

そこで問題は、どのように私はすべてのカラムの色を変えることができるということですか?

ありがとうございます。

+1

'(行%2 == 0){ c.setBackground(Color.WHITE);' Nimbus PLAFは、テーブルの行に代替色(自動的)を提供します。 –

答えて

3

以下に示すように、私はセルに4つの異なるカラム成分を持っています。そして、これらすべてのセルの色を変更すると、column1の色が変わります。

table1.setDefaultRenderer(Object.class, new ColorChange); 

レンダラは、指定されたクラスのためにのみ使用されます。 Object.classは、特定のレンダラーを持たないクラスのキャッチオールクラスとして指定されます。

あなたの場合、それはStringオブジェクトの場合にのみ使用されます。 IconIntegerクラスにはすでにカスタムレンダラーがあります。

また、追加することができます。

table1.setDefaultRenderer(Icon.class, new ColorChange); 
table1.setDefaultRenderer(Integer.class, new ColorChange); 

をあなたがこれを行うただし場合は、それらのレンダラーのカスタム書式を失うことになります。この方法を続行したい場合は、 "IconColorChange"と "IntegerColorChange"レンダラーが必要です。

代わりに、レンダラーまたはテーブルのカスタムフォーマットを使用しながら行レベルのカラーリングを行うソリューションについては、Table Row Renderingをチェックアウトすることをお勧めします。カスタムレンダラを作成する必要はありません。

+0

うわー!できます。ありがとう:) – lincinthesink

関連する問題