Package prefuse.util.ui

Source Code of prefuse.util.ui.PrefuseTableModel

package prefuse.util.ui;

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

import prefuse.data.Table;
import prefuse.data.event.EventConstants;
import prefuse.data.event.TableListener;
import prefuse.util.StringLib;
import prefuse.util.collections.CopyOnWriteArrayList;
import prefuse.util.collections.IntIterator;

/**
* TableModel implementation that serves as an adapter between a prefuse
* Table instance and a JTable component.
*/
public class PrefuseTableModel implements TableModel, TableListener {
   
    private CopyOnWriteArrayList m_listeners = new CopyOnWriteArrayList();
    private int[] m_rowmap;
    private Table m_table;
   
    /**
     * Creates a new PrefuseTableModel
     * @param table the underlying prefuse table
     */
    public PrefuseTableModel(Table table) {
      m_table = table;
    }
   
    /**
     * Initialize mapping between prefuse table rows and the rows reported
     * by this model.
     */
    private void initRowMap() {
        m_rowmap = new int[m_table.getRowCount()];
        IntIterator rows = m_table.rows();
        for ( int i=0; rows.hasNext(); ++i ) {
            m_rowmap[i] = rows.nextInt();
        }
    }
   
    /**
     * Get the prefuse table row for a row index into this table model.
     * @param rowIndex the row index in this table model
     * @return the corresponding prefuse table row
     */
    private int getRow(int rowIndex) {
        if ( m_rowmap == null )
            initRowMap();
        return m_rowmap[rowIndex];
    }
   
    // --------------------------------------------------------------------
   
    /**
     * @see javax.swing.table.TableModel#getColumnCount()
     */
    public int getColumnCount() {
        return m_table.getColumnCount();
    }
    /**
     * @see javax.swing.table.TableModel#getRowCount()
     */
    public int getRowCount() {
        return m_table.getRowCount();
    }
    /**
     * @see javax.swing.table.TableModel#isCellEditable(int, int)
     */
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return m_table.isCellEditable(rowIndex, columnIndex);
    }
    /**
     * @see javax.swing.table.TableModel#getColumnClass(int)
     */
    public Class getColumnClass(int columnIndex) {
        return m_table.getColumnType(columnIndex);
    }
    /**
     * @see javax.swing.table.TableModel#getValueAt(int, int)
     */
    public Object getValueAt(int rowIndex, int columnIndex) {
        Object o = m_table.get(getRow(rowIndex), columnIndex);
        if ( o != null && o.getClass().isArray() ) {
            return StringLib.getArrayString(o);
        } else {
            return o;
        }
    }
    /**
     * @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
     */
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        m_table.set(getRow(rowIndex), columnIndex, aValue);
    }
    /**
     * @see javax.swing.table.TableModel#getColumnName(int)
     */
    public String getColumnName(int columnIndex) {
        return m_table.getColumnName(columnIndex);
    }
   
    // --------------------------------------------------------------------
   
    /**
     * @see javax.swing.table.TableModel#addTableModelListener(javax.swing.event.TableModelListener)
     */
    public void addTableModelListener(TableModelListener l) {
        m_listeners.add(l);
    }
    /**
     * @see javax.swing.table.TableModel#removeTableModelListener(javax.swing.event.TableModelListener)
     */
    public void removeTableModelListener(TableModelListener l) {
        m_listeners.remove(l);
    }

    /**
     * @see prefuse.data.event.TableListener#tableChanged(prefuse.data.Table, int, int, int, int)
     */
    public void tableChanged(Table t, int start, int end, int col, int type) {
        if ( type == EventConstants.INSERT || type == EventConstants.DELETE )
            m_rowmap = null; // invalidate row map
       
        Object[] lstnrs = m_listeners.getArray();
        if ( lstnrs.length == 0 )
            return;
       
        TableModelEvent evt
            = new TableModelEvent(this, start, end, col, type);
        for ( int i=0; i<lstnrs.length; ++i ) {
            ((TableModelListener)lstnrs[i]).tableChanged(evt);
        }
    }
   
} // end of class PrefuseTableModel
TOP

Related Classes of prefuse.util.ui.PrefuseTableModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.