내 응용 프로그램에서 JTable 행에 TableRowSorter를 적용한 경우 정렬이 제대로 작동하고 Row Sorter 코드가 제공됩니다. DefaultTableModel에 행을 삽입하면 정렬 후 isertion에 오류가 발생합니다. JTable 열 데이터
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableModel);
tableMain.setRowSorter(sorter);
내 응용 프로그램에서의 JTree와 JTable가이
는 JTree에이 폴더를 포함하고 JTable는, JTree가 노드에서 선택한 폴더의 데이터 (파일과 하위 폴더 정보)를 보여줍니다. 나는의 JTree에서 노드를 클릭하면 내가 JTable의에서 콜 럼 중 하나를 정렬하고 JTree에 다시 와서 약간의 인접 노드를 클릭 할 때 그것은public void populateTable(Vector<FileData> vList)
{
treePath = treeMainView.getSelectionPath();
FileData metaData;
ImageIcon icon = new ImageIcon("images/folder.png");
dtModel.getDataVector().removeAllElements();
for (int i = 0; i < vList.size(); i++)
{
Vector v = new Vector();
metaData = (FileData) vList.get(i);
if (metaData.isIsdirectory()) {
v.add(icon);
} else {
v.add(UtilClass.getIcon(metaData.getClientpath()));
}
v.add(metaData.getName());
v.add(metaData.getClientpath());
if (metaData.isIsdirectory())
{
v.add("");
}
else
{
v.add((FileHelper.getSizeString(metaData.getSize())));
}
if (metaData.isIsdirectory()) {
v.add("");
}
else
{
v.add(new Date(metaData.getTime()));
}
if (metaData.isIsdirectory()) {
v.add("Folder");
}
else
{
v.add(UtilClass.getIcon(metaData.getClientpath()));
}
tableModel.insertRow(i, v);
}
tableMain.repaint();
}
문제의 arrise 아래에 주어진다의 JTable를 JTable의를 채우는 제대로 코드를 채 웁니다 그 세부 사항은 다음의 예외가 발생 시킬수 것이다 볼의 JTree가 How to Use Tables: Sorting and Filtering에서 논의 된 바와 같이 숨김 예외
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 1
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)
at javax.swing.table.TableRowSorter$TableRowSorterModelWrapper.getValueAt(TableRowSorter.java:252)
at javax.swing.table.TableRowSorter$TableRowSorterModelWrapper.getStringValueAt(TableRowSorter.java:268)
at javax.swing.DefaultRowSorter.compare(DefaultRowSorter.java:935)
at javax.swing.DefaultRowSorter.access$100(DefaultRowSorter.java:95)
at javax.swing.DefaultRowSorter$Row.compareTo(DefaultRowSorter.java:1359)
at javax.swing.DefaultRowSorter$Row.compareTo(DefaultRowSorter.java:1349)
at java.util.Arrays.binarySearch0(Arrays.java:2001)
at java.util.Arrays.binarySearch(Arrays.java:1943)
at javax.swing.DefaultRowSorter.insertInOrder(DefaultRowSorter.java:983)
at javax.swing.DefaultRowSorter.rowsInserted0(DefaultRowSorter.java:1041)
at javax.swing.DefaultRowSorter.rowsInserted(DefaultRowSorter.java:851)
at javax.swing.JTable.notifySorter(JTable.java:4267)
at javax.swing.JTable.sortedTableChanged(JTable.java:4115)
at javax.swing.JTable.tableChanged(JTable.java:4392)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
at javax.swing.table.AbstractTableModel.fireTableRowsInserted(AbstractTableModel.java:215)
at javax.swing.table.DefaultTableModel.insertRow(DefaultTableModel.java:359)
at org.mycom.gui.MyClass.populateTable(MyClass.java:5866)
at org.mycom.gui.MyClass$Selection.valueChanged(MyClass.java:5753)
at javax.swing.JTree.fireValueChanged(JTree.java:2820)
at javax.swing.JTree$TreeSelectionRedirector.valueChanged(JTree.java:3191)
at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(DefaultTreeSelectionModel.java:629)
at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(DefaultTreeSelectionModel.java:1078)
at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(DefaultTreeSelectionModel.java:287)
at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(DefaultTreeSelectionModel.java:170)
at javax.swing.JTree.setSelectionPath(JTree.java:1598)
at javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(BasicTreeUI.java:2316)
at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(BasicTreeUI.java:3525)
at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(BasicTreeUI.java:3464)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
at java.awt.Component.processMouseEvent(Component.java:6213)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5981)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4583)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4217)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
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)
모델의 잘못된 사용 : 절대로 기본 데이터 구조를 변경하지 마십시오! 대신, 항상 _ 모델 _API를 사용합니다. 코드 스 니펫에서는 두 가지를 혼합합니다 (리스너에 대한 알림없이 기본 벡터에서 제거하고 모델을 통해 삽입). 참고 : 뷰에서 다시 그리기를 호출 할 필요가 없습니다. 마술처럼 뭔가를 해결하는 것으로 보이면 어딘가에서 심각한 문제가 발생합니다. 일반적으로 누락되거나 잘못된 알림입니다. – kleopatra