@Override public int getSize() { return size(); }
/** * This method must be called after one or more elements changed. * * @param start Start of internal (inclusive). * @param end End of interval (inclusive). * * @throws IllegalArgumentException if the specified range is invalid. */ protected void fireContentsChanged( final int start, final int end ) { if ( ( start < 0 ) || ( start >= size() ) ) { throw new IllegalArgumentException( "start index out of bounds: " + start ); } if ( ( end < 0 ) || ( end >= size() ) ) { throw new IllegalArgumentException( "end index out of bounds: " + end ); } if ( !_listeners.isEmpty() ) { final ListDataEvent event = new ListDataEvent( this, ListDataEvent.CONTENTS_CHANGED, start, end ); for ( final ListDataListener listener : _listeners ) { listener.contentsChanged( event ); } } }
/** * This method must be called after one or more elements were added. * * @param start Start of internal (inclusive). * @param end End of interval (inclusive). * * @throws IllegalArgumentException if the specified range is invalid. */ protected void fireIntervalAdded( final int start, final int end ) { if ( ( start > size() ) && ( end > size() ) ) { throw new IllegalArgumentException( "invalid range: start=" + start + ", end=" + end ); } if ( !_listeners.isEmpty() ) { final ListDataEvent event = new ListDataEvent( this, ListDataEvent.INTERVAL_ADDED, start, end ); for ( final ListDataListener listener : _listeners ) { listener.intervalAdded( event ); } } }
/** * This method must be called after one or more elements were removed. * * @param start Start of internal (inclusive). * @param end End of interval (inclusive). * * @throws IllegalArgumentException if the specified range is invalid. */ protected void fireIntervalRemoved( final int start, final int end ) { if ( ( start > size() ) && ( end > size() ) ) { throw new IllegalArgumentException( "invalid range: start=" + start + ", end=" + end ); } if ( !_listeners.isEmpty() ) { final ListDataEvent event = new ListDataEvent( this, ListDataEvent.INTERVAL_REMOVED, start, end ); for ( final ListDataListener listener : _listeners ) { listener.intervalRemoved( event ); } } } }
@Override public void clear() { final int oldSize = size(); super.clear(); if ( oldSize > 0 ) { fireIntervalRemoved( 0, oldSize - 1 ); } }
@Override public boolean add( final T t ) { final int oldSize = size(); super.add( t ); fireIntervalAdded( oldSize, oldSize ); return true; }
@Override public void setAll( final List<? extends T> ts ) { final int removed = size(); /* * Avoid calling 'super.setAll', because that method calls 'set', 'add' * and 'remove', which are overridden to fire events. Use bulk methods * from 'ArrayList' instead. */ super.clear(); super.addAll( ts ); final int added = size(); final int changed = Math.min( added, removed ); if ( changed > 0 ) { fireContentsChanged( 0, changed - 1 ); } if ( added > removed ) { fireIntervalAdded( removed, added - 1 ); } else if ( removed > added ) { fireIntervalRemoved( added, removed - 1 ); } }