質問

私は自分の解決策を見つけたときに誰かが私に何かを説明できることを望んでいましたが、なぜそれが機能するのか理解できません。作成時にオブジェクトがどこにあるのかわからず、クラスタイプごとにデフォルトレンダラーをテーブル全体に設定したかったのです。

私はjtableを宣言し、デフォルトレンダラーを自分のものに設定しました Calendar クラスは、任意のように Calendarsは意味のある表現を与えるだろう,だけでなく、 toString() 自分自身の。

JTable table = new JTable();
table.setDefaultRenderer(Calendar.class, new MyRenderer());

public class MyRenderer extends DefaultTableCellRenderer{
    public MyRenderer() { super(); }
    @Override
    public void setValue(Object value){
            setText(makeCalendarToDate((GregorianCalendar)value));
    }
}

私がメソッドをオーバーロードするまで、これは機能しません getColumnClass 行われたように ここに

サンによると ドキュメント, 、それはのように見えます getColumnClass 私が上で与えた例でオーバーライドされたものを正確に行う必要があります-そのメソッドをオーバーライドしたときに機能するのはなぜですか?

今、私は列を埋めることができます Calendars保留中彼らは0行目を埋める、それは私が望んでいたものですが、そもそも私がそれをするのを妨げたのは何ですか?

役に立ちましたか?

解決

JTableは、モデルから列クラスを取得します。答えはAbstractTableModelの実装にあり、それがあなたのテーブルモデルに基づいているものであると仮定しています。AbstractTableModelでは、getColumnClassは次のように実装されています: return Object.class; したがって、オーバーライドしない限り、列オブジェクトは常にオブジェクトとして処理されます。これは、モデルが自動的に処理するものではありません。GetColumnClassをオーバーライドするだけで、それを回避する方法はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top