Skip to content

Does not support table models that run listeners in the order they are registered instead of reverse order. #53

@tlf30

Description

@tlf30

Exception when adding row on JTable:

java.lang.IndexOutOfBoundsException: Index 21 out of bounds for length 21
    at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)
    at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
    at jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
    at java.util.Objects.checkIndex(Objects.java:385)
    at java.util.ArrayList.get(ArrayList.java:427)
    at net.coderazzi.filters.gui.AdaptiveChoicesHandler$AdaptiveChoicesSupport.include(AdaptiveChoicesHandler.java:493)
    at javax.swing.DefaultRowSorter.include(DefaultRowSorter.java:942)
    at javax.swing.DefaultRowSorter.rowsInserted0(DefaultRowSorter.java:1054)
    at javax.swing.DefaultRowSorter.rowsInserted(DefaultRowSorter.java:879)
    at org.jdesktop.swingx.sort.DefaultSortController.rowsInserted(DefaultSortController.java:404)
    at javax.swing.JTable.notifySorter(JTable.java:4338)
    at javax.swing.JTable.sortedTableChanged(JTable.java:4186)
    at javax.swing.JTable.tableChanged(JTable.java:4463)
    at org.jdesktop.swingx.JXTable.tableChanged(JXTable.java:1561)
    at org.jdesktop.swingbinding.JTableBinding$BindingTableModel.fireTableModelEvent(JTableBinding.java:832)
    at org.jdesktop.swingbinding.JTableBinding$BindingTableModel.added(JTableBinding.java:791)
    at org.jdesktop.swingbinding.impl.ListBindingManager.listElementsAdded(ListBindingManager.java:123)
    at io.tlf.ow.fob.manager.ui.beans.SwingDeepObservableList.lambda$add$1(SwingDeepObservableList.java:76)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
    at java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.awt.EventQueue$4.run(EventQueue.java:714)
    at java.security.AccessController.doPrivileged(AccessController.java:400)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

This is because some table models run the registered listeners in the order they were registered instead of the reverse order, so net.coderazzi.filters.gui.AdaptiveChoicesHandler$AdaptiveChoicesSupport.rowsAdded(AdaptiveChoicesHandler.java:257) is called second, not first.

This is from the javax.swing.table.AbstractTableModel

    public void fireTableRowsInserted(int firstRow, int lastRow) {
        fireTableChanged(new TableModelEvent(this, firstRow, lastRow,
                             TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT));
    }

This is from org.jdesktop.swingbinding.BindingTableModel

 private void fireTableModelEvent(TableModelEvent e) {
            for(TableModelListener listener : this.listeners) {
                listener.tableChanged(e);
            }

        }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions