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 + -
显示快捷键?