커스텀 모델을 가지는 JTable로 2 개의 조작을 적용합니다.JTable 모델의 fireTableChanged 이벤트가 필터 처리 후에 예외를 슬로우한다
먼저 필터링 연산은 : 런타임 예외가 발생되고,
model.fireTableChanged(new TableModelEvent(model, TableModelEvent.HEADER_ROW));
을하지만 :
// rf is a RowFilter object
((DefaultRowSorter) table.getRowSorter()).setRowFilter(rf);
후, 다른 스레드는 테이블 항목 이름이 변경되고 이벤트를 실행. 가능한 이유는 무엇일까요?
추적 내용은 다음과 같습니다. 감사.
예외 글 "AWT-EventQueue의-0" java.lang.ArrayIndexOutOfBoundsException : -1 java.util.Vector.elementData (Vector.java:734)에서 에서 java.util.Vector.elementAt com.jtattoo에서 com.jtattoo.plaf.BaseTableHeaderUI.getHeaderRenderer (BaseTableHeaderUI.java:189)에서 javax.swing.table.DefaultTableColumnModel.getColumn (DefaultTableColumnModel.java:294)에서 (Vector.java:477) .plaf.BaseTableHeaderUI.paintCell (BaseTableHeaderUI.java:358) at com.jtattoo.plaf.BaseTableHeaderUI.paint (BaseTableHeaderUI.java:3) 2735) at javax.swing.plaf.ComponentUI.update (ComponentUI.java:161) at 에있는 javax.swing.JComponent.paintComponent (JComponent.java:780) javax.swing.JComponent.paint (JComponent.java : 1056) at 에있는 javax.swing.JComponent.paintChildren (JComponent.java:889) 에서의 javax.swing.Javaponent.paint (JComponent.java:1065) javax.swing.JViewport.paint (JViewport.java:728) 에서 javax.swing.JComponent.paintChildren (JComponent.java:889)에서 javax.swing.JComponent.paint (JComponent.java:1065)에서 javax.swing.JComponent.paintChildren (JComponent.java:889)에서 javax.swing.JComponent.paint (JComponent.java:1065) at 01에서의 javax.swing.JComponent.paintChildren (JComponent.java:889) 23,516, 에서 javax의 javax.swing.JComponent.paint javax.swing.JComponent.paint (JComponent.java:1065)에서 javax.swing.JComponent.paintChildren (JComponent.java:889)에서 (JComponent.java:1065) .swing.JComponent.paintChildren (JComponent.java:889) at javax.swing.JComponent.paint (JComponent.java:1065) at javax.swing.JLayeredPane.paint (JLayeredPane.java:586) at javax.swing .JComponent.paintChildren (JComponent.java:889) at 에있는 javax.swing.JComponent.paint (JComponent.java:1065). 에있는 javax.swing.JComponent.paintChildren (JComponent.java:889). javax.swing.JComponent . paint (JComponent.java:1065) at javax.swing.JComponent.paintChildren (JComponent.java:889) at백45경1천5백15조5백36억9천1백36만3천2백10 에서 javax의 javax.swing.JComponent.paint javax.swing.JComponent.paint (JComponent.java:1065)에서 javax.swing.JComponent.paintChildren (JComponent.java:889)에서 (JComponent.java:1065) .swing.JComponent.paintChildren (JComponent.java:889) at javax.swing.JComponent.paint (JComponent.java:1065) at 에있는 javax.swing.JComponent.paintChildren (JComponent.java:889) javax.swing .JComponent.paint (JComponent.java:1065) at 에있는 javax.swing.JComponent.paintChildren (JComponent.java:889). 에있는 javax.swing.JComponent.paint (JComponent.java:1065). javax.swing.JComponent . paintChildren (JComponent.java : 889) 에서 에서 javax.swing.JComponent.paint (JComponent.java:1065) 에서 javax.swing.JComponent.paintChildren (JComponent.java:889) javax.swing.JComponent.paint (JComponent.java : (JComponent.java : 889), 에있는, 가 javax.swing.RepaintManager $ PaintManager.paintDoubleBuffered에서 javax.swing.JComponent.paintToOffscreen (JComponent.java:5210)에서 javax.swing.JComponent.paint (JComponent.java:1065) (RepaintManager.java:1579)에서 at javax.swing.RepaintManager $ PaintManager.paint (RepaintManager.java:1502) 에서 javax.swing.JComponent.paintImmediately (JComponent.java:4969)에서 javax.swing.JComponent._paintImmediately (JComponent.java:5158)에서 javax.swing.RepaintManager.paint (RepaintManager.java:1272)에서 516,javax.swing.RepaintManager $ 4.run (RepaintManager.java:831) at javax.swing.RepaintManager $ 4.run (RepaintManager.java:814) at java.security.AccessController.doPrivileged (네이티브 메소드) java.security javax.swing.RepaintManager.paintDirtyRegions에서 .ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:76) 에서 javax.swing.RepaintManager.paintDirtyRegions (RepaintManager.java:814) (RepaintManager.java:789)(RepaintManager.java : 738) 에서 javax.swing.RepaintManager.access $ 1200 (RepaintManager.java:64) 에서 javax.swing.RepaintManager $ ProcessingRunnable.run (RepaintManager.java : RepaintManager.java :) 1732) at java.awt.event.InvocationEvent.dispatch (InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl (EventQueue.java:756) java.awt.EventQueue.access $ 500 (EventQueue.java : 97) at java.awt.EventQueue $ 3.run (EventQueue.java:709) at java.awt.EventQueue $ 3.run (EventQueue.java:703) at java.security.AccessController.doPrivileged (네이티브 메소드) at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionD omain.java:76)
''com.jtattoo.plaf.BaseTableHeaderUI.getHeaderRenderer'' 메소드는 작동하지 않을''DefaultTableColumnModel.getColumn (-1)''을 호출합니다. 이 스택 추적에 어떤 수업이 있습니까? – f1sh
"분류기를 사용할 때는 항상 셀 좌표를 변환해야합니다."- [loc.cit.] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting). – trashgod
@ f1sh 아니요, 관련이 없습니다. 그러나, 나는 EDT에서'fireTableChanged'를 호출합니다. –