2

を拡張する aJTableと aがあります。テーブルの列数を動的に設定したいと思います。名前付きの に属性を追加し、を返すことでこれを実装しました。を設定して呼び出すメソッド も追加しました。残念ながら、プログラムを実行すると、例外が発生し続けました。誰かが私が間違ったことを教えてくれますか、またはより良い解決策を提案できますか?TableModelAbstractTableModelTableModelcolumn_countgetColumnCountcolumn_countsetColumnCountcolumn_countfireTableStructureChangedArrayIndexOutOfBounds

スタック トレースは次のとおりです。
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4 at java.util.Vector.elementAt(Unknown Source) at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source) at javax.swing.plaf.basic.BasicTableUI.paintGrid(Unknown Source) at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source) at javax.swing.plaf.ComponentUI.update(Unknown Source) at javax.swing.JComponent.paintComponent(Unknown Source) at javax.swing.JComponent.paint(Unknown Source) at javax.swing.JComponent.paintToOffscreen(Unknown Source) at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source) at javax.swing.RepaintManager$PaintManager.paint(Unknown Source) at javax.swing.RepaintManager.paint(Unknown Source) at javax.swing.JComponent._paintImmediately(Unknown Source) at javax.swing.JComponent.paintImmediately(Unknown Source) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source) at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

4

3 に答える 3

0

getValueAt()あなたのメソッドはどこでデータを取得しますか?それがArrayListであり、列サイズを大きくすると、テーブルはリストからその列をフェッチして例外をスローしようとします。

それが問題ではない場合は、DefaultTableModelとDefaultTableModel.addColumn()を使用して列を追加するか、イベントディスパッチスレッドからテーブルモデルに変更を加えていることを確認してください。

于 2010-12-07T16:24:24.873 に答える
0

例外は次のように発生すると思います。

  1. 内部 column_count を +1 に設定します
  2. テーブルを視覚的に更新するイベントを発生させます
  3. JTable 更新コードが最後の列にアクセスすると、列モデルの内部 Vector が例外をスローします。

その理由はおそらく、DefaultTableColumnModel の基になるコードが新しい列を認識しておらず、その Vector が適切に変更されていないためです。

これを修正するには、ディメンションの変更を適切に処理できる独自のカスタム TableColumnModel を作成する必要があります。

于 2010-12-07T22:55:45.050 に答える
0

私の場合、変更された tm のメソッドsetModel(tm)を呼び出すと 、同様のエラーが解決されました。JTableTableModel

于 2015-07-29T19:06:11.750 に答える