2016-08-25 6 views
0

私のJavaアプリケーションでは、色とそれが選択されたときの動作を設定する必要があります。このため、私はTableCellRendererのカスタム実装を書いており、それは私が望むように動作しています。ここカスタムTableCellRendererを使ってJTableをスイング

public class AccountMovementTableCellRenderer extends JLabel implements TableCellRenderer{ 
    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){  
     //My implementation here... 
     return this; 
    } 
} 

そしてJTableの作成:

AccountMovementTableCellRenderer accountMovementCellRenderer = new AccountMovementTableCellRenderer(); 
entryTable = new JTable(entryModel){ 
    private static final long serialVersionUID = 1L; 

    @Override 
    public TableCellRenderer getCellRenderer(int row, int column){ 
     return accountMovementCellRenderer; 
    } 
}; 

私だけ作成しかし、ここで

TableCellRendererの実装です...私はまだについて混乱しているものがあります私のCellRendererの1つのインスタンスが、私は1つのセルに1つのCellRendererを期待していましたが、私はそれがこのように動作していることに驚いていました...コンテンツと色はすべてのセルでは異なりますが、常にCellRendererの同じインスタンスを使用して、 ?

答えて

3

TableCellRenderer.prepareRendererリターンがJTableの内容をレンダリングするために再利用されていることをコンポーネント - あなたのケースでは、あなたのレンダラはJLabelを拡張(あなただけDefaultTableCellRendererを拡張している可能性が可能) - このJLabelのはJTableの内容をペイントするために使用されます。 prepareRendererメソッドは、レンダリング前に各セルのJLabelをカスタマイズするために使用されます。見積もりOracle's tutorial on the JTables

テーブルの各セルがコンポーネントであると予想される場合があります。ただし、パフォーマンス上の理由から、スイングテーブルの実装方法は異なります。

代わりに、単一のセルレンダラーを使用して、同じタイプのデータを含むすべてのセルを描画します。レンダラーは、テーブルが適切にフォーマットされたデータを各セルにスタンプするために使用する設定可能なインクスタンプと考えることができます。ユーザがセルのデータの編集を開始すると、セルエディタがセルを引き継ぎ、セルの編集動作を制御します。

2

単一のレンダラインスタンスは、各画像が上記のコードに基づいてそのセルの状態を反映する各セルに対して、独自の画像を作成します。

関連する問題