例外の実施にAbstractTableModel JAVA?
-
18-09-2019 - |
質問
ってカスタムテーブルモデルは以下のとおりで
public class MyTableModel extends AbstractTableModel {
...
...
@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
...
...
}
みんNullPointerExceptionによってスローされる、前記方法が表示されるようJTableの上TableModel.
この例外により一部の空細胞のデータベース。
場合には例外による空細胞データベースのテーブル、そしてどのようにこの問題なのか。
義務はありませんが、各列のデータベースの一部値です。一部の列を含むことができますか。
解決
場合に細胞を含むことができ空値は、呼び出しgetClass()を文字列。null値を指定しても取り組んでいきたいと考えていますのNPE.だから確認することができます。nullが、現実問題である微妙なります。
は、TableModelインタを指定する getColumnClass(int) 返さなければな "であり、具体的にはスーパークラスのすべてのセル値のカラムです。" かくしてしまう可能性もあります。返す任意の数のクラスタが単一カラムを効果的に破れ、TableModel契約になります。
通常、カラムタイプstatic指定されたセットテーブルデータのクラスカラムを変更しないことを推ない限り、元のテーブルデータを変更しました。るというのは重要だと思いをお願い理由に戻る必要があるなどの特定の値です。
にしたい場合は描画のために何か特定の指定されたクラス型には、良く転がりご自身の TableCellRenderer, である、オブジェクトタイプには細胞ベース。ができない特定のレンダリングしています。
他のヒント
あなたはこれらの特定の座標の場合はnullを取得している理由の一つ問題があります。 それは正当なものであるとあなただけの特別なものは何も描画されないことにしたい場合は、何をする必要がnullのチェックで、Object.classを例えばを返し、:。
public Class getColumnClass(int c) {
Object o = getValueAt(0, c);
if(o==null) return Object.class;
return o.getClass()
}
これはデフォルトのレンダラが使用されていることを確認し、値がないため、何も描画されません。
おそらくます:
public Class getColumnClass(int c) {
return (getValueAt(0, c) == null ? Object.class : getValue(0, c).getClass());
}
私は、それはあなたを助け願っています。
は、これまでの回答に加えて:List
に行がないときにIndexOutOfBoundsException
をレンダリングしようとする場合(あなたの前の質問で提案されているように)あなたのモデルと仮定するとJTable
によってバックアップされます(すなわちTableModel
があるList
が表示されます空の)。 (?私はあなたがResultSet
をレンダリングしようとしている実感として - あなたが知っているどのようにResultSet
は空ではありません)これは厄介なエッジケースです。
これを避けるには、なぜあなたは私が最初に提案し何とResultSetMetaData
から各列のクラスを決定していない?
のResultSetMetaDataは、クラスに関する情報を提供していません。それは自動的にJavaクラス(PostgreSQLの世界では例えば、「CIDR」または「INT8」)にオーバーマップしないデータベース固有のデータ型を提供しそう(な方法によって、任意のソースコードが含まれていませんでした)この提案ん実際には役に立たないです。
また、コメントジェイソン・ニコルズで「私はそれはあなたがそのような特定の値を返す必要がなぜ尋ねることが重要だと思うが、」JTableのクラスは、現実の世界でどのように使用されるかについての一般的なcluelessnessを示しています。
私はテーブルがゼロ行、私はまだJavaクラスは、私は列全体のための私のセルをレンダリングするために使用しなければならないということであるかを調べることができます持ってこの問題の解決策を見つけるしたいと思います。出力が変更できるという考えは、データベースについてのより一層cluelessnessに基づいています - 列のデータ型は、その列の定義に指定されていない、と関係なく、その内容は、データ型が何であるか、あなたが「どの行に応じて変更されません。それを見て再ます。
もちろんデータベースとの課題の一つは、列の定義は、またはNULL値を許可しない場合があり、このため、誰サブクラス化JTableは、この非常に基本的な前提を理解し、これをテストする方法を知っておく必要があります。
ということです