datamodeltotablemodeladapter.java

来自「java实现浏览器等本地桌面的功能」· Java 代码 · 共 216 行

JAVA
216
字号
/* * $Id: DataModelToTableModelAdapter.java,v 1.3 2005/10/10 17:01:11 rbair Exp $ * * Copyright 2005 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *  * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */package org.jdesktop.binding.swingx.adapter;import javax.swing.table.AbstractTableModel;import org.jdesktop.binding.TabularDataModel;import org.jdesktop.binding.TabularValueChangeEvent;import org.jdesktop.binding.TabularValueChangeListener;import org.jdesktop.binding.metadata.DefaultMetaDataProvider;import org.jdesktop.binding.metadata.MetaData;import org.jdesktop.binding.metadata.MetaDataProvider;/** * Extracted from TableBinding and changed to register * as TabularValueChangeListener. *  * @author Richard Bair * @author Jeanette Winzenburg *  */public class DataModelToTableModelAdapter extends AbstractTableModel     implements MetaDataProvider {    protected TabularDataModel dm;//    private String[] fieldNames;    private DefaultMetaDataProvider metaDataProvider;        public DataModelToTableModelAdapter(TabularDataModel dm) {        this(dm, null);    }    public DataModelToTableModelAdapter(TabularDataModel dm, String[] visibleFieldNames) {        this.dm = dm;        initMetaDataProvider(visibleFieldNames);//        fieldNames = visibleFieldNames == null ? dm.getFieldNames() : visibleFieldNames;        installDataModelListener();    }        private void initMetaDataProvider(String[] visibleFieldNames) {        if (visibleFieldNames == null) {            metaDataProvider = new DefaultMetaDataProvider(dm);        } else {            MetaData[] metas = new MetaData[visibleFieldNames.length];            for (int i = 0; i < metas.length; i++) {                metas[i] = dm.getMetaData(visibleFieldNames[i]);            }            metaDataProvider = new DefaultMetaDataProvider(metas);        }            }    public Class getColumnClass(int columnIndex) {        MetaData metaData = getMetaData(columnIndex);        return metaData.getElementClass();    }        public String getColumnName(int column) {        //its possible that the meta data hasn't shown up yet. In this        //case, use the field name until the meta data arrives        // JW: when would that be the case?//        MetaData md = dm.getMetaData(fieldNames[column]);//        return md == null ? fieldNames[column] : md.getLabel();        MetaData md = getMetaData(column);        return md.getLabel();    }        public boolean isCellEditable(int rowIndex, int columnIndex) {        MetaData md = getMetaData(columnIndex);        return !md.isReadOnly();    }        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {        dm.setValueAt(getFieldName(columnIndex), rowIndex, aValue);    }        /* (non-Javadoc)     * @see javax.swing.table.TableModel#getRowCount()     */    public int getRowCount() {        return dm.getRecordCount();    }    /* (non-Javadoc)     * @see javax.swing.table.TableModel#getColumnCount()     */    public int getColumnCount() {        return getFieldCount();    }    /* (non-Javadoc)     * @see javax.swing.table.TableModel#getValueAt(int, int)     */    public Object getValueAt(int rowIndex, int columnIndex) {        return dm.getValueAt(getFieldName(columnIndex), rowIndex);    }    private String getFieldName(int columnIndex) {        return getDefaultMetaDataProvider().getFieldName(columnIndex);    }    private MetaData getMetaData(int columnIndex) {        String fieldName = getFieldName(columnIndex);        return getMetaData(fieldName);    }//  ------------------------ MetaDataProvider    public String[] getFieldNames() {        // TODO Auto-generated method stub        return getDefaultMetaDataProvider().getFieldNames();    }        public int getFieldCount() {        // TODO Auto-generated method stub        return getDefaultMetaDataProvider().getFieldCount();    }    public MetaData getMetaData(String dataID) {        return getDefaultMetaDataProvider().getMetaData(dataID);    }    public MetaData[] getMetaData() {        return getDefaultMetaDataProvider().getMetaData();    }        private DefaultMetaDataProvider getDefaultMetaDataProvider() {        if (metaDataProvider == null) {            metaDataProvider = new DefaultMetaDataProvider();        }        return metaDataProvider;    }    // --------------------------- init listener    private void installDataModelListener() {        // register with the data model        // ValueChangeListener l = new ValueChangeListener() {        // public void valueChanged(ValueChangeEvent e) {        // fireTableStructureChanged();        // }        // };        // dm.addValueChangeListener(l);        TabularValueChangeListener l = new TabularValueChangeListener() {            public void tabularValueChanged(TabularValueChangeEvent e) {                int rowIndex = e.getRowIndex();                int columnIndex = findColumnIndex(e.getFieldName());                if (rowIndex < 0) {                    if (columnIndex < 0) {                        //JW: we are firing too many structure changed...                        // leads to forgetting all column settings...                        // check: does TabularDataModelAdapter clear the                        // the metaData on selection change?                        //fireTableDataChanged();                       fireTableStructureChanged();                    } else {                        fireTableDataChanged();                    }                } else {                    if (columnIndex < 0) {                        fireTableRowsUpdated(rowIndex, rowIndex);                    } else {                        fireTableCellUpdated(rowIndex, columnIndex);                    }                }                // PENDING: do better than this!                //fireTableStructureChanged();            }        };        dm.addTabularValueChangeListener(l);    }    protected int findColumnIndex(String fieldName) {        if (fieldName == null) {            return -1;        }        return getDefaultMetaDataProvider().getFieldIndex(fieldName);//        for (int i = 0; i < fieldNames.length; i++) {//            if (fieldName.equals(fieldNames[i])) {//                return i;//            }//        }//        return -1;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?