0

3 つの列を持つ JTable があります。

文字列、PropertyItem (カスタム クラス)、文字列

PropertyItem はテーブルに文字列として表示されますが、型は PropertyItem です。テーブルのサンプル行を次に示します。

値マスク | フォーマットの制約 | 値マスク ルール サブタイプ

テーブルのデータは、Vector を使用してフェッチされます。

List<Vector> displayedData = table_propertyDetails.getDataMatrix();

そして、次のようにテーブル データをトラバースします。

for(Vector row : displayedData) { ... }

現在、row.get(index) 関数を使用して、列 0 と 2 の String への型キャストで列データをフェッチします。PropertyItem 列については、(PropertyItem) row.get(index) として実行されます。したがって、これまでのところ問題はなく、行の通常のリスト/フェッチに問題はありません。

ここで、このテーブルの 2 番目の列 (PropertyItem) が編集されると、文字列に変わり、(PropertyItem) row.get(index) はその行のエラーを返します。

java.lang.String は com.abc.xyz.model.PropertyItem にキャストできません

データが編集されていない他のすべての行では、このキャストはエラーなしで行われますが、編集された行ではこのエラーが発生します。

この時点またはそれ以前に String を PropertyItem に変換するためにここで何ができるか考えていますか?

4

2 に答える 2

3

DefaultTableModelを使用しているようです。この場合、カスタム列を編集するために独自のTableCellEditorを作成することをお勧めします 。実装では、必要に応じてオブジェクトを編集できます。

于 2013-10-29T07:58:07.453 に答える
1

私は説明を理解しようとし、私の過去のエラーとWRTで答えを書きました。

の作成中に設定している DataType をTableModel確認する必要があると思います。JTableJTable

3 つの列すべてに使用している場合は、2 番目の列Stringに変更しObjectます。

最初と 3 番目の列に追加しているのでString動作しますが、2 番目の列に Object を追加していてPropertyItem、2 番目の列の DataType がStringこれに変換されStringget()メソッドがテーブルから文字列を返し、そのキャスト エラーが発生する可能性があります。

TableModel2列目のタイプを変更すると問題が解決することを願っています。

例 :

myTable.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {null, null, null},
        {null, null, null},
        {null, null, null},
        {null, null, null}
    },
    new String [] {
        "Column 1", "Column 2", "Column 3"
    }
    ) {
    Class[] types = new Class [] {
        java.lang.String.class, java.lang.Object.class, java.lang.String.class
    };

    public Class getColumnClass(int columnIndex) {
        return types [columnIndex];
    }
});
于 2013-10-29T13:46:19.143 に答える