JTableセルの色の変更
-
03-07-2019 - |
質問
これは私をまったく狂気にさせています。
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()
メソッド内からフォーマットを変更する方法の例を提供してください。
解決
setDefaultRenderer
の最初のパラメーターに、レンダリングをオーバーライドするクラスのクラスリテラルを配置します。つまり、データがすべて文字列で構成されている場合、次のように入力できます
myTable.setDefaultRenderer(String.class, new CustomRenderer());
データがクラスとして BigDecimal
または Integer
の値で構成されている場合、クラスタイプごとにそのメソッドを数回呼び出す必要があります( 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();
}
}
これにより、IColorable.classのレンダラーを登録でき、実装ごとに個別のレンダラーを登録する必要がありません。
所属していません StackOverflow