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

📄 histogram.java

📁 java算法大全
💻 JAVA
字号:
import java.awt.*;import java.applet.*;import java.io.*;import java.util.*;public class Histogram extends Panel {    int panel_height, panel_width;    FontMetrics fm;    Dimension offscreensize = null;    Image offscreen = null;    Graphics offGraphics = null;    Font font;    String title, xLabel, yLabel;    int yMax, yMin, yStep;    int xMax, xMin, xStep;    Hashtable table;    public Histogram() {	setBackground(Color.white);	this.font = new Font("Courier", Font.PLAIN, 12);	this.fm = this.getFontMetrics(font);	title = new String();	xLabel = new String();	yLabel = new String();	yMax = 0; yMin = 0; yStep = 0;	table = new Hashtable();    }    public void init() {	table = new Hashtable();	repaint();    }    public void setTitle(String title) {	this.title = title;    }    public void setXLabel(String xLabel) {	this.xLabel = xLabel;    }    public void setYLabel(String yLabel) {	this.yLabel = yLabel;    }    public void setYMax(int yMax) {	this.yMax = yMax;    }    public void setYStep(int step) {	this.yStep = step;    }    public void setYMin(int yMin) {	this.yMin = yMin;    }    public void setXMax(int xMax) {	this.xMax = xMax;    }    public void setXStep(int step) {	this.xStep = step;    }    public void setXMin(int xMin) {	this.xMin = xMin;    }    public void setValueXY(int x, int y) {	Integer X = new Integer(x);	Integer Y = new Integer(y);	table.put(X, Y);	if (x > xMax)	    setXMax(x + 1);	if (y > yMax)	    setYMax(y + 1);	if (xStep < (xMax-xMin)/10) {	    xStep = (xMax-xMin)/10;	    xStep += 10-(xStep%10);	}	if (yStep < (yMax-yMin)/10) {	    yStep = (yMax-yMin)/10;	    yStep += 10-(yStep%10);	}    }    public void incValueX(int x) {	Integer X = new Integer(x);	if (table.containsKey(X)) {	    Integer Y = new Integer(((Integer)table.get(X)).intValue() + 1);	    table.put(X, Y);	    if (Y.intValue() > yMax)		setYMax(Y.intValue() + 1);	} else {	    Integer Y = new Integer(1);	    table.put(X, Y);	    if (x > xMax)		setXMax(x + 1);	    if (Y.intValue() > yMax)		setYMax(Y.intValue() + 1);	}	if (xStep < (xMax-xMin)/10) {	    xStep = (xMax-xMin)/10;	    xStep += 10-(xStep%10);	}	if (yStep < (yMax-yMin)/10) {	    yStep = (yMax-yMin)/10;	    yStep += 10-(yStep%10);	}    }    public void update(Graphics g) {        Dimension d = size();        if (d.width < 1 || d.height < 1)            return;         if ((offscreen == null) || (d.width != offscreensize.width) ||                    (d.height != offscreensize.height)) {            offscreen = createImage(d.width, d.height);            offscreensize = d;            offGraphics = offscreen.getGraphics();        }         offGraphics.setColor(getBackground());        offGraphics.fillRect(0, 0, d.width, d.height);        offGraphics.setFont(font);        fm = offGraphics.getFontMetrics();        paint(offGraphics);        g.drawImage(offscreen, 0, 0, null);    }    public void paint(Graphics g) {        panel_height = size().height;        panel_width = size().width; 	g.setColor(Color.black);	//g.drawRect(1, 1, panel_width-2, panel_height-2);	// draw Title	g.setFont(font);	g.drawString(title, (panel_width - title.length()*7)/2, 20);	// draw X axis	g.drawLine(30, panel_height - 30, panel_width - 30, panel_height - 30);	g.drawString(xLabel, (panel_width - xLabel.length()*7)/2, 		panel_height - 5);	// draw Y axis	g.drawLine(30, 50, 30, panel_height - 30);	g.drawString(yLabel, 5, 45);	if (xMax != xMin) {	    int range = (panel_width - 85);	    for (int i = xMin; i <= xMax; i += xStep) {		g.drawLine(45+(i-xMin)*range/(xMax-xMin), panel_height-28,			45+(i-xMin)*range/(xMax-xMin), panel_height-32);		g.drawString(""+i,			45+(i-xMin)*range/(xMax-xMin) - 7,		    	panel_height-17);	    }	}	if (yMax != yMin) {	    int range = (panel_height - 90);	    for (int i = yMin; i <= yMax; i += yStep) {	    	if (i == yMin)		    continue;		g.drawLine(28, panel_height-30-(i-yMin)*range/(yMax-yMin),			32, panel_height-30-(i-yMin)*range/(yMax-yMin));		g.drawString(""+i,			5, panel_height-30-(i-yMin)*range/(yMax-yMin) + 5);	    }	}	if (!table.isEmpty()) {	    // plot bar	    g.setColor(Color.blue);	    int barWidth = (panel_width - 85) / (xMax - xMin);	    if (barWidth < 2) barWidth = 2;	    for (int i = xMin; i <= xMax; i++) {		Integer X = new Integer(i);		if (!table.containsKey(X))		    continue;		int barHeight = ((Integer)table.get(X)).intValue();		barHeight = (barHeight-yMin) * (panel_height - 90) / 				(yMax - yMin);		g.fillRect(			45+(i-xMin)*(panel_width - 85) / (xMax - xMin) -				barWidth/2, 			panel_height - 30 - barHeight,			barWidth>2?barWidth - 1:barWidth, barHeight);	    }	}    } // paint();}

⌨️ 快捷键说明

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