📄 chart.java
字号:
/**
* @version 1.20 27 Jun 1998
* @author Cay Horstmann
*/
import java.awt.*;
import javax.swing.*;
class ChartPanel extends JPanel
{ public ChartPanel(double[] v, String[] n, String t)
{ names = n;
values = v;
title = t;
}
public void paintComponent(Graphics g)
{ super.paintComponent(g);
if (values == null || values.length == 0) return;
int i;
double minValue = 0;
double maxValue = 0;
for (i = 0; i < values.length; i++)
{ if (minValue > values[i]) minValue = values[i];
if (maxValue < values[i]) maxValue = values[i];
}
Dimension d = getSize();
int clientWidth = d.width;
int clientHeight = d.height;
int barWidth = clientWidth / values.length;
Font titleFont
= new Font("SansSerif", Font.BOLD, 20);
FontMetrics titleFontMetrics
= g.getFontMetrics(titleFont);
Font labelFont
= new Font("SansSerif", Font.PLAIN, 10);
FontMetrics labelFontMetrics
= g.getFontMetrics(labelFont);
int titleWidth
= titleFontMetrics.stringWidth(title);
int y = titleFontMetrics.getAscent();
int x = (clientWidth - titleWidth) / 2;
g.setFont(titleFont);
g.drawString(title, x, y);
int top = titleFontMetrics.getHeight();
int bottom = labelFontMetrics.getHeight();
if (maxValue == minValue) return;
double scale = (clientHeight - top - bottom)
/ (maxValue - minValue);
y = clientHeight - labelFontMetrics.getDescent();
g.setFont(labelFont);
for (i = 0; i < values.length; i++)
{ int x1 = i * barWidth + 1;
int y1 = top;
int height = (int)(values[i] * scale);
if (values[i] >= 0)
y1 += (int)((maxValue - values[i]) * scale);
else
{ y1 += (int)(maxValue * scale);
height = -height;
}
g.setColor(Color.red);
g.fillRect(x1, y1, barWidth - 2, height);
g.setColor(Color.black);
g.drawRect(x1, y1, barWidth - 2, height);
int labelWidth
= labelFontMetrics.stringWidth(names[i]);
x = i * barWidth + (barWidth - labelWidth) / 2;
g.drawString(names[i], x, y);
}
}
private double[] values;
private String[] names;
private String title;
}
public class Chart extends JApplet
{ public void init()
{ String v = getParameter("values");
if (v == null) return;
int n = Integer.parseInt(v);
double[] values = new double[n];
String[] names = new String[n];
int i;
for (i = 0; i < n; i++)
{ values[i] = Double.parseDouble
(getParameter("value_" + (i + 1)));
names[i] = getParameter("name_" + (i + 1));
}
Container contentPane = getContentPane();
contentPane.add(new ChartPanel(values, names,
getParameter("title")));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -