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

📄 datescrollbar.java

📁 网上期货交易的外挂原码,可实现自动交易功能,自动添加模块
💻 JAVA
字号:
/*
 * ChartScrollBar.java
 *
 */
package com.jsystemtrader.chart;

/**
 *
 */
import java.awt.event.*;
import java.util.*;

import javax.swing.*;

import org.jfree.chart.axis.*;
import org.jfree.chart.event.*;
import org.jfree.chart.plot.*;
import org.jfree.data.*;
import org.jfree.data.xy.*;

public class DateScrollBar extends JScrollBar implements AdjustmentListener, AxisChangeListener {
    private static final int STEPS = 10000;

    private final DateAxis dateAxis;
    private final ValueAxis rangeAxis;
    private final Range range;
    private double rangeMin, rangeMax, dateRange, ratio;
    private OHLCDataset dataset;

    public DateScrollBar(XYPlot plot) {
        super(HORIZONTAL);
        dateAxis = (DateAxis) plot.getDomainAxis();
        rangeAxis = plot.getRangeAxis();
        range = plot.getDataRange(dateAxis);
        dataset = (OHLCDataset) plot.getDataset();
        dateAxis.addChangeListener(this);
        addAdjustmentListener(this);
        axisChanged(null);
        adjustmentValueChanged(null);
    }


    private void rangeUpdate() {
        ArrayList<Double> xValues = new ArrayList<Double> ();
        int count = dataset.getItemCount(0);
        for (int item = 0; item < count; item++) {
            xValues.add(dataset.getXValue(0, item));
        }

        int firstItem = findItemIndex(xValues, dateAxis.getLowerBound(), count);
        int lastItem = findItemIndex(xValues, dateAxis.getUpperBound(), count);

        double max = dataset.getHighValue(0, firstItem);
        double min = dataset.getLowValue(0, firstItem);
        for (int item = firstItem; item <= lastItem; item++) {
            double high = dataset.getHighValue(0, item);
            if (high > max) {
                max = high;
            }

            double low = dataset.getLowValue(0, item);
            if (low < min) {
                min = low;
            }
        }

        rangeAxis.setRange(min, max);
    }


    public void axisChanged(AxisChangeEvent event) {
        Timeline timeLine = dateAxis.getTimeline();
        rangeMin = timeLine.toTimelineValue( (long) range.getLowerBound());
        rangeMax = timeLine.toTimelineValue( (long) range.getUpperBound());

        long dateMin = timeLine.toTimelineValue( (long) dateAxis.getLowerBound());
        long dateMax = timeLine.toTimelineValue( (long) dateAxis.getUpperBound());

        dateRange = dateMax - dateMin;
        ratio = STEPS / (rangeMax - rangeMin);

        int newExtent = (int) (dateRange * ratio);
        int newValue = (int) ( (dateMin - rangeMin) * ratio);

        setValues(newValue, newExtent, 0, STEPS);
    }


    public void adjustmentValueChanged(AdjustmentEvent e) {
        long start = (long) (getValue() / ratio + rangeMin);
        long end = (long) (start + dateRange);

        if (end > start) {
            Timeline timeLine = dateAxis.getTimeline();
            start = timeLine.toMillisecond(start);
            end = timeLine.toMillisecond(end);
        }

        dateAxis.setRange(start, end);
        rangeUpdate();
    }


    private int findItemIndex(ArrayList<Double> values, double value, int maxCount) {
        int itemIndex = Collections.binarySearch(values, value);
        if (itemIndex < 0) {
            itemIndex = -itemIndex - 1;
        }
        itemIndex = Math.max(0, Math.min(itemIndex - 1, maxCount - 1));
        return itemIndex;
    }


}

⌨️ 快捷键说明

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