⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 metadbftablemodel.java

📁 openmap java写的开源数字地图程序. 用applet实现,可以像google map 那样放大缩小地图.
💻 JAVA
字号:
// **********************************************************************// // <copyright>// //  BBN Technologies//  10 Moulton Street//  Cambridge, MA 02138//  (617) 873-8000// //  Copyright (C) BBNT Solutions LLC. All rights reserved.// // </copyright>// **********************************************************************// // $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/dataAccess/shape/MetaDbfTableModel.java,v $// $RCSfile: MetaDbfTableModel.java,v $// $Revision: 1.2.2.2 $// $Date: 2005/08/09 17:23:02 $// $Author: dietrick $// // **********************************************************************package com.bbn.openmap.dataAccess.shape;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.net.URL;import java.util.ArrayList;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import com.bbn.openmap.dataAccess.shape.input.DbfInputStream;import com.bbn.openmap.util.Debug;/** * An extension of the DbfTableModel that allows editing of the format * of the TbfTableModel, allowing addition and deletion of columns of * the DbfTableModel. The original DbfTableModel column headers are * scanned and put into records, and edited the rows. Be careful with * this. */public class MetaDbfTableModel extends DbfTableModel implements ShapeConstants {    public final static int META_RECORDNAME_COLUMN_NUMBER = 0;    public final static int META_TYPE_COLUMN_NUMBER = 1;    public final static int META_LENGTH_COLUMN_NUMBER = 2;    public final static int META_PLACES_COLUMN_NUMBER = 3;    protected DbfTableModel source = null;    /**     * Keeps track of the original columns. If a name is changed the     * row will be deleted in all the records.     */    protected int originalColumnNumber = 0;    /**     * Creates a blank DbfTableModel from the source DbfTableModel.     *      * @param source the DbfTableModel to be modified.     */    public MetaDbfTableModel(DbfTableModel source) {        super(4); // these are the number of columns for Metadata        init();        setWritable(true);        this.source = source;        int numColumnCount = source.getColumnCount();        originalColumnNumber = numColumnCount;        for (int i = 0; i < numColumnCount; i++) {            ArrayList record = new ArrayList();            record.add(source.getColumnName(i));            record.add(new Byte(source.getType(i)));            record.add(new Integer(source.getLength(i)));            record.add(new Integer(source.getDecimalCount(i)));            addRecord(record);            if (DEBUG)                Debug.output("Adding record: " + record);        }    }    /**     * Set up the columns of this DbfTableModel, so the parameters of     * the source header rows are listed.     */    protected void init() {        _names[META_RECORDNAME_COLUMN_NUMBER] = "Column Name";        _names[META_TYPE_COLUMN_NUMBER] = "Type of Data";        _names[META_LENGTH_COLUMN_NUMBER] = "Length of Field";        _names[META_PLACES_COLUMN_NUMBER] = "# of Decimal Places";        for (int i = 0; i < 4; i++) {            _lengths[i] = (byte) 12;            _decimalCounts[i] = (byte) 0;            byte type;            if (i < 2) {                type = DBF_TYPE_CHARACTER.byteValue();            } else {                type = DBF_TYPE_NUMERIC.byteValue();            }            _types[i] = type;        }    }    /**     * Remove the record at the index. This extension decreases the     * originalColumnNumber which controls which rows[0] can be     * edited.     */    public ArrayList remove(int columnIndex) {        ArrayList ret = super.remove(columnIndex);        if (columnIndex < originalColumnNumber) {            originalColumnNumber--;        }        return ret;    }    public boolean isCellEditable(int rowIndex, int columnIndex) {        if (columnIndex == 0 && rowIndex < originalColumnNumber) {            return false;        } else {            return writable;        }    }    /**     * Sets an object at a certain location. The type is translated     * from integer values to names for easier use.     */    public void setValueAt(Object object, int row, int column) {        if (column == META_TYPE_COLUMN_NUMBER) {            if (DBF_CHARACTER.equals(object)                    || DBF_TYPE_CHARACTER.equals(object)) {                object = DBF_TYPE_CHARACTER;            } else if (DBF_DATE.equals(object) || DBF_TYPE_DATE.equals(object)) {                object = DBF_TYPE_DATE;            } else if (DBF_NUMERIC.equals(object)                    || DBF_TYPE_NUMERIC.equals(object)) {                object = DBF_TYPE_NUMERIC;            } else if (DBF_LOGICAL.equals(object)                    || DBF_TYPE_LOGICAL.equals(object)) {                object = DBF_TYPE_LOGICAL;            } else if (DBF_MEMO.equals(object) || DBF_TYPE_MEMO.equals(object)) {                object = DBF_TYPE_MEMO;            } else {                Debug.error("Rejected "                        + object                        + " as input. Use: \n    Character, Number, Date, Boolean, or Memo");                return;            }            if (DEBUG)                Debug.output("New value set to " + object);        }        super.setValueAt(object, row, column);    }    /**     * Retrieves a value for a specific column and row index     *      * @return Object A value for a specific column and row index     */    public Object getValueAt(int row, int column) {        Object cell = super.getValueAt(row, column);        if (column == META_TYPE_COLUMN_NUMBER) {            if (DBF_TYPE_CHARACTER.equals(cell)) {                cell = DBF_CHARACTER;            } else if (DBF_TYPE_DATE.equals(cell)) {                cell = DBF_DATE;            } else if (DBF_TYPE_NUMERIC.equals(cell)) {                return DBF_NUMERIC;            } else if (DBF_TYPE_LOGICAL.equals(cell)) {                cell = DBF_LOGICAL;            } else if (DBF_TYPE_MEMO.equals(cell)) {                cell = DBF_MEMO;            }            // Else just keep it what it is.        }        return cell;    }    /**     * Create a new record, corresponding to a new column in the     * source DbfTableModel. Filled in with standard things that can     * be edited.     */    public void addBlankRecord() {        ArrayList record = new ArrayList();        record.add("New Column");        record.add(DBF_TYPE_CHARACTER);        record.add(new Integer(12));        record.add(new Integer(0));        addRecord(record);        if (DEBUG)            Debug.output("Adding record: " + record);    }    /**     * Decide what to do when the window closes.     */    public void exitWindowClosed() {        if (source != null && source.dirty) {            int check = JOptionPane.showConfirmDialog(null,                    "Do you want to save your changes?",                    "Confirm Close",                    JOptionPane.YES_NO_OPTION);            if (check == JOptionPane.YES_OPTION) {                fireTableStructureChanged();            } else {                source.cleanupChanges();            }        }        super.exitWindowClosed();    }    public void showGUI(String filename) {        if (frame == null) {            frame = new JFrame("Editing Attribute File Structure");            frame.getContentPane().add(getGUI(filename, MODIFY_ROW_MASK                    | DONE_MASK),                    BorderLayout.CENTER);            JButton saveButton = new JButton("Save Changes");            saveButton.addActionListener(new ActionListener() {                public void actionPerformed(ActionEvent ae) {                    int check = JOptionPane.showConfirmDialog(null,                            "Are you sure you want to modify the table format?",                            "Confirm Save",                            JOptionPane.OK_CANCEL_OPTION);                    if (check == JOptionPane.YES_OPTION) {                        fireTableStructureChanged();                    }                }            });            controlPanel.add(saveButton);            frame.validate();            frame.setSize(500, 300);            frame.addWindowListener(new WindowAdapter() {                public void windowClosing(WindowEvent e) {                    // need a shutdown event to notify other gui beans                    // and                    // then exit.                    exitWindowClosed();                }            });        }        frame.setVisible(true);    }    public static void main(String[] args) {        Debug.init();        if (args.length < 1) {            System.exit(0);        }        try {            URL dbf = new URL(args[0]);            DbfInputStream dis = new DbfInputStream(dbf.openStream());            DbfTableModel dtm = new DbfTableModel(dis);            MetaDbfTableModel mdtm = new MetaDbfTableModel(dtm);            mdtm.showGUI(args[0]);            mdtm.exitOnClose = true;        } catch (Exception e) {            Debug.error(e.getMessage());            e.printStackTrace();        }    }}

⌨️ 快捷键说明

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