ここに私の最初の質問があります。まず第一に、私はJavaで新しく、まだイベントを理解するのに苦労しています。私は、カスタムツールヒント(異なる列からのデータの組み合わせ)を表示するために、TableModelListenerとカスタムTableCellRendererを実装するCustomTableModelHandlerであるAbstractTableModelを拡張するカスタムモデルをJTableに持っています。ユーザーは1行の選択のみを行うことができ、オプションautocreaterowsorterをチェックしました。行を削除するとき、私は、このメソッドを使用します。原因は何ですか
public void removeRow(int modelIndex) {
fireTableRowsDeleted(modelIndex, modelIndex);
rowData.remove(modelIndex);
}
私は最初のデータ変更イベントをトリガーした理由は、私は私が削除しようとしてるの行からのデータが含まれているテキストでのJLabelを(更新したいということです
おそらくよりエレガントな方法があります)。私は常にモデルインデックスの行を渡している、私はビュー内の選択をクリアしようとしたが、それは助けにはなりませんでした。私は時代の100%のエラーを再現するように見えることはできませんが、それは行を編集した後、ほとんどの時に起こるようですが、列をアクティブにソートし、次に行を削除します(これは実際にはエラー発生する)。
問題は次のようなものです。問題の原因はどうすればわかりますか?コード全体が少し大きすぎてここに投稿することはできませんが、誰かがそれを見たいと思っていれば提供することができます。 (多くの時間を表示されます)
エラー:
run:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Contacts.ContactsGUI$CustomTableModel.getValueAt(ContactsGUI.java:1975)
at javax.swing.JTable.getValueAt(JTable.java:2686)
at javax.swing.JTable.prepareRenderer(JTable.java:5703)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:752)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1479)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1410)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
私は常に行の変換をモデル化するためのビューを行っていますが、私の問題を解決したと思うもう一つのヒントです。データを保存し、行を削除して変更を実行すると、エラーが発生していないようです。私はこれが原因だと思う:テーブルが再描画されている間に、私も行を削除していた。ありがとう。 – Max