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

📄 scaletextpanel.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/gui/ScaleTextPanel.java,v $// $RCSfile: ScaleTextPanel.java,v $// $Revision: 1.3.2.2 $// $Date: 2005/02/11 22:51:24 $// $Author: dietrick $// // **********************************************************************package com.bbn.openmap.gui;import java.awt.Insets;import java.awt.event.ActionListener;import java.io.Serializable;import javax.swing.JTextField;import com.bbn.openmap.I18n;import com.bbn.openmap.MapBean;import com.bbn.openmap.event.ProjectionEvent;import com.bbn.openmap.event.ProjectionListener;import com.bbn.openmap.event.ZoomEvent;import com.bbn.openmap.event.ZoomListener;import com.bbn.openmap.event.ZoomSupport;import com.bbn.openmap.proj.Projection;import com.bbn.openmap.util.Debug;/** * The ScaleTextPanel is a JPanel holding a JTextField that controls * and responds to the scale setting of a MapBean's projection. It is * also a Tool, so it can be added to the ToolPanel. */public class ScaleTextPanel extends OMToolComponent implements Serializable,        ActionListener, ProjectionListener {    public final static String defaultKey = "scaletext";    public transient final static String setScaleCmd = "setScale";    protected String key = defaultKey;    protected transient JTextField scaleField = null;    /** Support for zooming when text field is used. */    protected transient ZoomSupport zoomDelegate = null;    /**     * The last projection received from the MapBean, so it can be     * used to compare it to any more that come in. The ScaleTextPanel     * listens to the MapBean for projection changes so it can keep up     * with any scale changes later.     */    protected Projection projection;    protected transient java.text.DecimalFormat df = new java.text.DecimalFormat("###,###,###");    /**     * Create the ScaleTextPanel     */    public ScaleTextPanel() {        super();        setKey(defaultKey);        zoomDelegate = new ZoomSupport(this);        String entry = "";        String info = "Scale";        String command = setScaleCmd;        scaleField = new JTextField(entry, 10);        //        scaleField.setToolTipText(info);        scaleField.setToolTipText(i18n.get(ScaleTextPanel.class,                command,                I18n.TOOLTIP,                info));        scaleField.setMargin(new Insets(0, 0, 0, 0));        scaleField.setActionCommand(command);        scaleField.addActionListener(this);        scaleField.setHorizontalAlignment(JTextField.RIGHT);        gridbag.setConstraints(scaleField, c);        add(scaleField);    }    /**     * Called to set the scale setting on the scale text object.     */    public synchronized void setProjection(Projection aProjection) {        projection = aProjection;        if (Debug.debugging("scaletextpanel")) {            System.out.println("ScaleTextPanel.setProjection(): scale is "                    + projection.getScale() + " \""                    + String.valueOf(projection.getScale()) + "\"");        }        String oldScale = scaleField.getText();        String newScale = df.format(projection.getScale());        if (!oldScale.equals(newScale)) {            scaleField.setText("1:" + newScale);        }    }    /**     * Add a ZoomListener to the listener list.     *      * @param listener The ZoomListener to be added     */    public synchronized void addZoomListener(ZoomListener listener) {        zoomDelegate.addZoomListener(listener);    }    /**     * Remove a ZoomListener from the listener list.     *      * @param listener The ZoomListener to be removed     */    public synchronized void removeZoomListener(ZoomListener listener) {        zoomDelegate.removeZoomListener(listener);    }    /**     * Convenience function to set up listeners of the components. If     * you are hooking the MapBean up to the ScaleTextPanel, this is     * one of two methods you need to call. The other is     * addMouseModes(), if the MapBean has more than one Mouse Mode.     *      * @param aMap a map object.     */    public void setupListeners(MapBean aMap) {        if (aMap != null) {            // Wire up the beans for event passing            addZoomListener((ZoomListener) aMap);            aMap.addProjectionListener(this);            // set the scaleEntry            scaleField.setText("1:" + String.valueOf(aMap.getScale()));        }    }    /**     * This function removes the mapBean object from its set of     * Listeners. An inverse of setupListeners() method.     *      * @param mapBean a map object.     */    public void removeFromAllListeners(MapBean mapBean) {        if (mapBean != null) {            // Unwire the mapBean from these listeners            removeZoomListener((ZoomListener) mapBean);            mapBean.removeProjectionListener(this);            // set the scaleEntry to 0            scaleField.setText("----"/* String.valueOf(0) */);        }    }    /**     * Get the scale field widget.     *      * @return JTextField that is rigged to set the scale for the map.     */    public JTextField getScaleField() {        return scaleField;    }    /**     * ActionListener interface.     *      * @param e ActionEvent     */    public void actionPerformed(java.awt.event.ActionEvent e) {        String command = e.getActionCommand();        if (Debug.debugging("scaletextpanel")) {            Debug.output("ScaleTextPanel.actionPerformed(): " + command);        }        if (command.equals(setScaleCmd)) {            setScale(scaleField.getText());        }    }    protected void fireScaleChange(float scale) {        if (Debug.debugging("scaletextpanel")) {            Debug.output("ScaleTextPanel setting scale to " + scale);        }        zoomDelegate.fireZoom(ZoomEvent.ABSOLUTE, scale);    }    //set the scale of the map.    private void setScale(String strscale) {        float scale;        int colon = strscale.indexOf(':');        if (colon > -1) {            strscale = strscale.substring(colon + 1);        }        try {            if (strscale.toLowerCase().endsWith("m")) {                strscale = strscale.substring(0, strscale.length() - 1);                scale = df.parse(strscale).floatValue() * 1000000f;                if (scale < 1f)                    System.err.println("ScaleTextPanel.applyScale(): problem");                else                    fireScaleChange(scale);            } else if (strscale.toLowerCase().endsWith("k")) {                strscale = strscale.substring(0, strscale.length() - 1);                scale = df.parse(strscale).floatValue() * 1000f;                if (scale < 1f)                    System.err.println("ScaleTextPanel.applyScale(): problem");                else                    fireScaleChange(scale);            } else if (strscale.trim().equals("")) {                return; // ignore empty string            } else {                scale = df.parse(strscale).floatValue();                if (scale < 1f)                    System.err.println("ScaleTextPanel.applyScale(): problem");                else                    fireScaleChange(scale);            }        } catch (java.text.ParseException e) {            System.err.println("ScaleTextPanel.setScale(): invalid scale: "                    + strscale);        } catch (NumberFormatException e) {            System.err.println("ScaleTextPanel.setScale(): invalid scale: "                    + strscale);        }    }    //------------------------------------------------------------    // ProjectionListener interface    //------------------------------------------------------------    /**     * ProjectionListener interface method.     *      * @param e ProjectionEvent     */    public void projectionChanged(ProjectionEvent e) {        if (Debug.debugging("scaletextpanel")) {            System.out.println("ScaleTextPanel.projectionChanged()");        }        Projection newProj = e.getProjection();        if (projection == null || (!projection.equals(newProj))) {            setProjection((Projection) newProj.makeClone());        }    }    public void findAndInit(Object someObj) {        if (someObj instanceof MapBean) {            setupListeners((MapBean) someObj);        }    }    public void findAndUndo(Object someObj) {        if (someObj instanceof MapBean) {            removeFromAllListeners((MapBean) someObj);        }    }}

⌨️ 快捷键说明

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