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

📄 stockpanel.java

📁 一份很好的股票曲线文档
💻 JAVA
字号:
package stock;

import java.awt.Color;
import java.awt.Graphics;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;

public class StockPanel extends javax.swing.JPanel {

    DataReader reader = null;
 public StockPanel() {
        this("000001");
    }
 public StockPanel() {
        this("000001");
    }
 public StockPanel(String filename) {
        initComponents();
        setSize(650, 450);
        this.reader = new DataReader(filename);
    }
 public void setFileName(String fileName) {
        reader.setFileName(fileName);
    }
  private void formMouseClicked(java.awt.event.MouseEvent evt) {                                  
        repaint();
    }                                 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
//            System.out.println(evt);
            reader.setFileName(jTextField1.getText());
            Thread.sleep(10);
            repaint();
        } catch (InterruptedException ex) {
            Logger.getLogger(StockPanel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }                                        

    @Override
    public void paint(Graphics g) {//绘图 

        super.paint(g);//画背景
        double[] data = reader.getData();//获取数据

        double max = Double.MIN_VALUE, min = Double.MAX_VALUE;
        for (double d : data) {//计算最值
            max = Math.max(max, d);
            min = Math.min(min, d);
        }

        double d = max - min;//间隔值

        double ry = 380D / d;//纵坐标与数值得比率

        int rx = 630 / reader.getTotalDataLength();//横坐标与时间的比率

        g.setColor(Color.white);
        for (int i = 0; i <= 10; i++) {//画坐标数
            double a = d / 10 * i + min;//坐标数=i/10*间隔值+最小值
            g.drawString(String.format("%.2f", a), 10, getMapedY(ry, a, max));
            drawDottedX(g, 55, 645, getMapedY(ry, a, max));//对每个坐标点进行画虚线
        }

        g.drawLine(getMapedX(rx, data.length - 1), 5, getMapedX(rx, data.length - 1), 395);//结束线

        g.setColor(Color.red);
        g.drawLine(55, getMapedY(ry, data[0], max),
                getMapedX(rx, 0), getMapedY(ry, data[0], max));
        for (int i = 1; i < data.length; i++) {
            g.drawLine(getMapedX(rx, i - 1), getMapedY(ry, data[i - 1], max),//上一个数据点
                    getMapedX(rx, i), getMapedY(ry, data[i], max));//这个数据点
        }

        g.setColor(Color.white);
        g.drawLine(55, 5, 55, 395);//Y轴
        g.drawLine(55, 395, 645, 395);//X轴

        g.drawString("09:30", 55, 410);
        g.drawString("10:00", 125, 410);
        g.drawString("10:30", 195, 410);
        g.drawString("11:00", 265, 410);
        g.drawString("11:30", 335, 410);
        g.drawString("13:30", 405, 410);
        g.drawString("14:00", 475, 410);
        g.drawString("14:30", 545, 410);
        g.drawString("15:00", 615, 410);

        g.drawString(String.format("ID: %s   Name:%s   Data:%s", reader.getFileName(), reader.getName(), reader.getDate()), 10, 430);
    }

    public static void drawDottedX(Graphics g, int x1, int x2, int y) {//画虚线
        while (x1 < x2) {
            g.drawLine(x1, y, x1 += 2, y);
            x1 += 10;
        }
    }

{

    public static int getMapedX(int rx, int n) {//映射坐标
        return rx * (n) + 60;//比率*位置+修正
    }

    public static int getMapedY(double ry, double y, double max) {
        return (int) ((max - y) * ry + 10);//比率*(最大值-当前值)+修正
    }
                       
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JTextField jTextField1;
                     
}

⌨️ 快捷键说明

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