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

📄 scaleplot.java

📁 EclipseTrader is a stock exchange analysis system, featuring shares pricing watch, intraday and hi
💻 JAVA
字号:
/* * Copyright (c) 2004-2006 Marco Maccaferri and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: *     Marco Maccaferri - initial API and implementation */package net.sourceforge.eclipsetrader.charts;import java.text.NumberFormat;import java.util.List;import org.eclipse.swt.SWT;import org.eclipse.swt.events.ControlEvent;import org.eclipse.swt.events.ControlListener;import org.eclipse.swt.events.DisposeEvent;import org.eclipse.swt.events.DisposeListener;import org.eclipse.swt.events.PaintEvent;import org.eclipse.swt.events.PaintListener;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.GC;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.graphics.Rectangle;import org.eclipse.swt.widgets.Canvas;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Label;/** */public class ScalePlot extends Canvas implements ControlListener, DisposeListener, PaintListener{    private Image image;    private Scaler scaler;    private NumberFormat nf = NumberFormat.getInstance();    private Label label;    private Color labelColor = new Color(null, 255, 255, 0);    private double marketValue = -1;    private Label marketValueLabel;    private Color marketValueColor = new Color(null, 255, 224, 0);    private Color separatorColor = new Color(null, 0, 0, 0);    private boolean needRepaint = true;    public ScalePlot(Composite parent, int style)    {        super(parent, style|SWT.DOUBLE_BUFFERED);        nf.setGroupingUsed(true);        nf.setMinimumIntegerDigits(1);        nf.setMinimumFractionDigits(4);        nf.setMaximumFractionDigits(4);                label = new Label(this, SWT.NONE);        label.setBackground(labelColor);        label.setBounds(0, 0, 0, 0);                marketValueLabel = new Label(this, SWT.NONE);        marketValueLabel.setBackground(marketValueColor);        marketValueLabel.setBounds(0, 0, 0, 0);                addControlListener(this);        addDisposeListener(this);        addPaintListener(this);    }        public void setScaler(Scaler scaler)    {        this.scaler = scaler;        if (this.scaler != null)            this.scaler.set(getSize().y);    }    public Color getSeparatorColor()    {        return new Color(null, separatorColor.getRGB());    }    public void setSeparatorColor(Color separatorColor)    {        if (this.separatorColor != null && !this.separatorColor.isDisposed())            this.separatorColor.dispose();        this.separatorColor = new Color(null, separatorColor.getRGB());    }    /* (non-Javadoc)     * @see org.eclipse.swt.events.ControlListener#controlMoved(org.eclipse.swt.events.ControlEvent)     */    public void controlMoved(ControlEvent e)    {    }    /* (non-Javadoc)     * @see org.eclipse.swt.events.ControlListener#controlResized(org.eclipse.swt.events.ControlEvent)     */    public void controlResized(ControlEvent e)    {        if (image != null && !image.isDisposed())            image.dispose();        if (getSize().x != 0 && getSize().y != 0)        {            image = new Image(getDisplay(), getSize().x, getSize().y);                        if (scaler != null)                scaler.set(getSize().y);                GC gc = new GC(image);            draw(gc);            gc.dispose();        }    }        public void redrawAll()    {        if (needRepaint == false)        {            needRepaint = true;            redraw();        }    }    public void draw(GC gc)    {        Rectangle bounds = image.getBounds();         Color background = getBackground();        Color foreground = getForeground();                if (background != null)            gc.setBackground(background);        if (foreground != null)            gc.setForeground(foreground);        gc.fillRectangle(bounds);        nf.setGroupingUsed(true);        nf.setMinimumIntegerDigits(1);        nf.setMinimumFractionDigits(4);        nf.setMaximumFractionDigits(4);        if (scaler != null)        {            List scaleArray = scaler.getScaleArray();            int loop;            for (loop = 0; loop < scaleArray.size(); loop++)            {                int y = scaler.convertToY(((Double) scaleArray.get(loop)).doubleValue());                double value = ((Double) scaleArray.get(loop)).doubleValue();                String s = ""; //$NON-NLS-1$                                if (Math.abs(value) > 1000000)                {                    nf.setMinimumFractionDigits(0);                    nf.setMaximumFractionDigits(0);                    s = nf.format(value / 1000000) + "m"; //$NON-NLS-1$                }                else if (Math.abs(value) > 100)                {                    nf.setMinimumFractionDigits(2);                    nf.setMaximumFractionDigits(2);                    s = nf.format(value);                }                else                {                    nf.setMinimumFractionDigits(4);                    nf.setMaximumFractionDigits(4);                    s = nf.format(value);                }                /*                if (Math.abs(value) > 1000000000)                {                    nf.setMinimumFractionDigits(0);                    nf.setMaximumFractionDigits(0);                    s = nf.format(value / 1000000000) + "b";                }                else if (Math.abs(value) > 1000000)                {                    nf.setMinimumFractionDigits(0);                    nf.setMaximumFractionDigits(0);                    s = nf.format(value / 1000000) + "m";                }                else if (Math.abs(value) > 1000)                {                    nf.setMinimumFractionDigits(0);                    nf.setMaximumFractionDigits(0);                    s = nf.format(value / 1000) + "k";                }*/                int h = gc.stringExtent(s).y / 2;                if ((y - h) >= 0 && (y + h) <= bounds.height)                {                    gc.drawLine(0, y, 4, y);                    gc.drawString(s, 7, y - h);                }            }        }        if (background != null)            background.dispose();        if (foreground != null)            foreground.dispose();    }    /* (non-Javadoc)     * @see org.eclipse.swt.events.PaintListener#paintControl(org.eclipse.swt.events.PaintEvent)     */    public void paintControl(PaintEvent e)    {        if (image != null && !image.isDisposed())        {            if (needRepaint)            {                GC gc = new GC(image);                draw(gc);                gc.dispose();                if (marketValue != -1)                {                    int y = scaler.convertToY(marketValue);                    marketValueLabel.setBounds(1, y - 7, getSize().x - 1, 14);                }                needRepaint = false;            }            e.gc.drawImage(image, e.x, e.y, e.width, e.height, e.x, e.y, e.width, e.height);        }        e.gc.setForeground(separatorColor);        e.gc.drawLine(0, 0, 0, getSize().y);    }    /* (non-Javadoc)     * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)     */    public void widgetDisposed(DisposeEvent e)    {        if (image != null && !image.isDisposed())            image.dispose();        if (separatorColor != null && !separatorColor.isDisposed())            separatorColor.dispose();        if (labelColor != null && !labelColor.isDisposed())            labelColor.dispose();    }        public void setLabel(int y)    {        if (scaler != null)        {            String s = nf.format(Scaler.roundToTick(scaler.convertToValue(y)));            if (s.length() >= 9)                s = s.substring(0, s.length() - 4) + "k"; //$NON-NLS-1$            label.setText(" " + s); //$NON-NLS-1$            label.setBounds(1, y - 7, getSize().x - 1, 14);        }    }        public void hideLabel()    {        label.setBounds(0, 0, 0, 0);    }        public void setMarketValue(double value)    {        marketValue = value;        if (scaler != null)        {            int y = scaler.convertToY(marketValue);            marketValueLabel.setText(" " + nf.format(marketValue)); //$NON-NLS-1$            marketValueLabel.setBounds(1, y - 7, getSize().x - 1, 14);        }    }        public void hideMarketValue()    {        marketValueLabel.setBounds(0, 0, 0, 0);        marketValue = -1;    }}

⌨️ 快捷键说明

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