positiontable.java

来自「world wind java sdk 源码」· Java 代码 · 共 497 行 · 第 1/2 页

JAVA
497
字号
/*Copyright (C) 2001, 2007 United States Governmentas represented by the Administrator of theNational Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.applications.sar;import gov.nasa.worldwind.geom.Angle;import javax.swing.*;import javax.swing.border.*;import javax.swing.table.*;import java.awt.*;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.text.NumberFormat;/** * @author tag * @version $Id: PositionTable.java 9496 2009-03-18 19:23:14Z dcollins $ */public class PositionTable extends JTable{    private static final int ITEM_NUM_COLUMN = 0;    private static final int LATITUDE_COLUMN = 1;    private static final int LONGITUDE_COLUMN = 2;    private static final int ALTITUDE_COLUMN = 3;    private SARTrack sarTrack;    private String elevationUnit;    private String angleFormat;    public PositionTable()    {        this.setToolTipText("Track Positions");        this.setModel(new MyTableModel(this));        TableCellRenderer tcr = this.getTableHeader().getDefaultRenderer();        // Setup latitude and longitude columns        this.getTableHeader().getColumnModel().getColumn(LATITUDE_COLUMN).setHeaderRenderer(new AngleHeaderRenderer(tcr, this));        this.getTableHeader().getColumnModel().getColumn(LONGITUDE_COLUMN).setHeaderRenderer(new AngleHeaderRenderer(tcr, this));        this.getColumnModel().getColumn(LATITUDE_COLUMN).setCellRenderer(new AngleCellRenderer(this));        this.getColumnModel().getColumn(LONGITUDE_COLUMN).setCellRenderer(new AngleCellRenderer(this));        this.getColumnModel().getColumn(LATITUDE_COLUMN).setCellEditor(new AngleCellEditor(this, -90, 90));        this.getColumnModel().getColumn(LONGITUDE_COLUMN).setCellEditor(new AngleCellEditor(this, -180, 180));        // Setup altitude column        this.getTableHeader().getColumnModel().getColumn(ALTITUDE_COLUMN).setHeaderRenderer(new AltitudeHeaderRenderer(tcr, this));        this.getColumnModel().getColumn(ALTITUDE_COLUMN).setCellRenderer(new AltitudeCellRenderer(this));        this.getColumnModel().getColumn(ALTITUDE_COLUMN).setCellEditor(new AltitudeCellEditor(this));        {            TableColumnModel cm = this.getColumnModel();            cm.getColumn(0).setResizable(false);            cm.getColumn(0).setMinWidth(35);            cm.getColumn(0).setPreferredWidth(35);            cm.getColumn(1).setResizable(false);            cm.getColumn(1).setMinWidth(70);            cm.getColumn(1).setPreferredWidth(80);            cm.getColumn(2).setResizable(false);            cm.getColumn(2).setMinWidth(70);            cm.getColumn(2).setPreferredWidth(80);            cm.getColumn(3).setResizable(false);            cm.getColumn(3).setMinWidth(70);            cm.getColumn(3).setPreferredWidth(70);        }    }    public SARTrack getSarTrack()    {        return sarTrack;    }    public void setSarTrack(SARTrack sarTrack)    {        this.sarTrack = sarTrack;        updateTableData();        this.sarTrack.addPropertyChangeListener(TrackController.TRACK_MODIFY, new PropertyChangeListener()        {            public void propertyChange(PropertyChangeEvent propertyChangeEvent)            {                Object newValue = propertyChangeEvent.getNewValue();                if (newValue != null && newValue instanceof Integer)                {                    updateTableRow((Integer) newValue);                }                else                {                    updateTableData();                }            }        });    }    public String getElevationUnit()    {        return this.elevationUnit;    }    public void setElevationUnit(String unit)    {        this.elevationUnit = unit;    }    public String getAngleFormat()    {        return this.angleFormat;    }    public void setAngleFormat(String format)    {        this.angleFormat = format;    }    public void updateTableData()    {         ((AbstractTableModel) this.getModel()).fireTableDataChanged();    }    public void updateTableRow(int row)    {         ((AbstractTableModel) this.getModel()).fireTableRowsUpdated(row, row);    }    private class MyTableModel extends AbstractTableModel    {        String[] columnNames = new String[] {            "#", "Latitude", "Longitude", "Altitude"        };        Class[] columnTypes = new Class[] {            Integer.class, String.class, String.class, Double.class        };        boolean[] columnEditable = new boolean[] {            false, true, true, true        };        private PositionTable table;        public MyTableModel(PositionTable table)        {            this.table = table;        }        @Override        public Class<?> getColumnClass(int columnIndex)        {            return this.columnTypes[columnIndex];        }        @Override        public boolean isCellEditable(int rowIndex, int columnIndex)        {            return this.columnEditable[columnIndex];        }        public int getRowCount()        {            return sarTrack != null ? sarTrack.size() : 0;        }        @Override        public String getColumnName(int columnIndex)        {            return this.columnNames[columnIndex];        }        public int getColumnCount()        {            return 4;        }        public Object getValueAt(int row, int col)        {            if (sarTrack == null)                return null;            switch (col)            {                case ITEM_NUM_COLUMN:                    return row;                case LATITUDE_COLUMN:                    return sarTrack.get(row).getLatitude().degrees;                case LONGITUDE_COLUMN:                    return sarTrack.get(row).getLongitude().degrees;                case ALTITUDE_COLUMN:                    return sarTrack.get(row).getElevation();            }            return null;        }        @Override        public void setValueAt(Object object, int row, int col)        {            if (sarTrack == null)                return;            SARPosition curPos = sarTrack.get(row);            SARPosition newPos;            Angle newAngle;            switch (col)            {                case LATITUDE_COLUMN:                    if (!(object instanceof String))                        return;                    if ((newAngle = table.toAngle((String)object)) == null)                        return;                    newPos = new SARPosition(newAngle, curPos.getLongitude(), curPos.getElevation());                    break;                case LONGITUDE_COLUMN:                    if (!(object instanceof String))                        return;                    if ((newAngle = table.toAngle((String)object)) == null)                        return;                    newPos = new SARPosition(curPos.getLatitude(), newAngle, curPos.getElevation());                    break;                case ALTITUDE_COLUMN:                    // The value stored in a SARPosition's elevation will always be in meters.                    // So when the altitude is displayed in feet, we will convert the incoming                    // value back to meters. This allows the user entring a value to operate in                    // whatever units are being displayed without thinking about conversion.                    if (!(object instanceof Double))                        return;                    double newVal = (Double) object;                    if (SAR2.UNIT_IMPERIAL.equals(elevationUnit))                        newVal = SAR2.feetToMeters(newVal);                    newPos = new SARPosition(curPos.getLatitude(), curPos.getLongitude(), newVal);                    break;                default:                    return;            }            sarTrack.set(row, newPos);        }    }    private Angle toAngle(String string)    {        if (Angle.ANGLE_FORMAT_DMS.equals(this.angleFormat))        {            try

⌨️ 快捷键说明

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