2009-05-03 4 views
7

を変更します。これは絶対に非常識な私を運転しているJTableのセルの色

私はJTableの持つテーブルセルの書式設定を変更するには、ことを知って、私は自分のレンダラを使用する必要があります。しかし、私はこれを適切に実装することはできません。

これは私の現在の設定です:

public class MyClass 
{ 
    public static void main(String args[]) 
    { 
     JTable myTable = new JTable(10, 10); 
     myTable.setDefaultRenderer ([I dont know what to put here], new CustomRenderer()); 
    } 
} 

class CustomRenderer extends DefaultTableCellRenderer 
{ 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

     // Formatting 
     return c; 
    } 
} 

私がsetDefaultRendererの最初のパラメータに使用する必要がありますか? APIは単に 'クラス'と言う。私は何をそこに置くべきか分からない。

はちょうど私がこれを実装するに取り掛かるか、用語の最も簡単で、誰か説明してもらえますか? main()メソッド内から書式を変更する方法の例を示してください。

答えて

13

setDefaultRendererの最初のパラメータには、レンダリングをオーバーライドするクラスのクラスのリテラルクラスを入力します。あなたのデータは、すべての文字列を構成されている場合、あなたのデータはまた、クラスなどBigDecimalまたはIntegerと値で構成されている場合、すなわち、あなたが

myTable.setDefaultRenderer(String.class, new CustomRenderer()); 

を置くことができ、あなたは、各クラス型(BigDecimal.classまたはInteger.classのためにそのメソッドを複数回呼び出す必要がありいずれの場合にも)。

そして最後に、あなたはあなたのレンダラでこれを行う背景色に変更する:あなたはレンダラを書く場合

class CustomRenderer extends DefaultTableCellRenderer 
{ 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     c.setBackground(new java.awt.Color(255, 72, 72)); 
     return c; 
    } 
} 

インターフェイスすべてのクラスのために働く必要が、あなたはまた、修正する必要がありますgetColumnClassあなたテーブルモデルの機能と、それは、このインターフェイスを実装するすべてのオブジェクトのためのインターフェイスクラスを返してみましょう:

public Class<? extends Object> getColumnClass(int c) { 
    Object object = getValueAt(0, c); 
    if(object == null) { 
     return Object.class; 
    if(getValueAt(0, c) instanceof IColorable) { 
     return ICarPart.class; 
    } else { 
     return getValueAt(0, c).getClass(); 
    } 
} 

のWi IColorable.classのレンダラーを登録することができ、実装ごとに別々のレンダラーを登録する必要はありません。

+0

これは私にとってはうまくいかないようです。私が行った唯一のことは、setDefaultRendererメソッドを呼び出してCustomRendererクラスを作成することです。これを動作させるために何か他に必要なことはありますか? –

+2

String.classの代わりにObject.classを使って動作させました。私のデータはすべて文字列だったので、なぜこれが必要なのか分かりません。 ご協力いただきありがとうございます。 –

+0

リスナー内でレンダラーを変更することはできませんか?私はボタンを押したときにテーブルを再フォーマットしたい。 –

関連する問題