📄 stockpanel.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 + -