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

📄 cylinderrenderer.java

📁 JFreeChart开发全攻略,JFreeChart开发全攻略
💻 JAVA
字号:
package bar;

import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.geom.*;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.CategoryItemEntity;
import org.jfree.chart.entity.EntityCollection;
import org.jfree.chart.labels.CategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.CategoryItemRendererState;
import org.jfree.data.category.CategoryDataset;

/**
 * 自定义的圆柱形表现类.
 */
public class CylinderRenderer extends BarRenderer3D {

	public CylinderRenderer() {
	}

	public CylinderRenderer(double d, double d1) {
		super(d, d1);
	}

	/**
	 * 画圆柱形柱子的方法.
	 */
	public void drawItem(Graphics2D graphics2d,
			CategoryItemRendererState categoryitemrendererstate,
			Rectangle2D rectangle2d, CategoryPlot categoryplot,
			CategoryAxis categoryaxis, ValueAxis valueaxis,
			CategoryDataset categorydataset, int i, int j, int k) {
		Number number = categorydataset.getValue(i, j);
		if (number == null)
			return;
		double d = number.doubleValue();
		java.awt.geom.Rectangle2D.Double double1 = new java.awt.geom.Rectangle2D.Double(
				rectangle2d.getX(), rectangle2d.getY() + getYOffset(),
				rectangle2d.getWidth() - getXOffset(), rectangle2d.getHeight()
						- getYOffset());
		PlotOrientation plotorientation = categoryplot.getOrientation();
		double d1 = calculateBarW0(categoryplot, plotorientation, double1,
				categoryaxis, categoryitemrendererstate, i, j);
		double ad[] = calculateBarL0L1(d);
		if (ad == null)
			return;
		org.jfree.ui.RectangleEdge rectangleedge = categoryplot
				.getRangeAxisEdge();
		float f = (float) valueaxis
				.valueToJava2D(ad[0], double1, rectangleedge);
		float f1 = (float) valueaxis.valueToJava2D(ad[1], double1,
				rectangleedge);
		float f2 = Math.min(f, f1);
		float f3 = Math.abs(f1 - f);
		GeneralPath generalpath = new GeneralPath();
		java.awt.geom.Ellipse2D.Double double2 = null;
		if (plotorientation == PlotOrientation.HORIZONTAL) {
			generalpath.moveTo((float) ((double) f2 + getXOffset() / 2D),
					(float) d1);
			generalpath.lineTo(
					(float) ((double) (f2 + f3) + getXOffset() / 2D),
					(float) d1);
			java.awt.geom.Arc2D.Double double3 = new java.awt.geom.Arc2D.Double(
					f2 + f3, d1, getXOffset(), categoryitemrendererstate
							.getBarWidth(), 90D, 180D, 0);
			generalpath.append(double3, true);
			generalpath.lineTo((float) ((double) f2 + getXOffset() / 2D),
					(float) (d1 + categoryitemrendererstate.getBarWidth()));
			double3 = new java.awt.geom.Arc2D.Double(f2, d1, getXOffset(),
					categoryitemrendererstate.getBarWidth(), 270D, -180D, 0);
			generalpath.append(double3, true);
			generalpath.closePath();
			double2 = new java.awt.geom.Ellipse2D.Double(f2 + f3, d1,
					getXOffset(), categoryitemrendererstate.getBarWidth());
		} else {
			generalpath.moveTo((float) d1,
					(float) ((double) f2 - getYOffset() / 2D));
			generalpath.lineTo((float) d1,
					(float) ((double) (f2 + f3) - getYOffset() / 2D));
			java.awt.geom.Arc2D.Double double4 = new java.awt.geom.Arc2D.Double(
					d1, (double) (f2 + f3) - getYOffset(),
					categoryitemrendererstate.getBarWidth(), getYOffset(),
					180D, 180D, 0);
			generalpath.append(double4, true);
			generalpath.lineTo((float) (d1 + categoryitemrendererstate
					.getBarWidth()), (float) ((double) f2 - getYOffset() / 2D));
			double4 = new java.awt.geom.Arc2D.Double(d1, (double) f2
					- getYOffset(), categoryitemrendererstate.getBarWidth(),
					getYOffset(), 0.0D, -180D, 0);
			generalpath.append(double4, true);
			generalpath.closePath();
			double2 = new java.awt.geom.Ellipse2D.Double(d1, (double) f2
					- getYOffset(), categoryitemrendererstate.getBarWidth(),
					getYOffset());
		}
		Object obj = getItemPaint(i, j);
		if (getGradientPaintTransformer() != null
				&& (obj instanceof GradientPaint)) {
			GradientPaint gradientpaint = (GradientPaint) obj;
			obj = getGradientPaintTransformer().transform(gradientpaint,
					generalpath);
		}
		graphics2d.setPaint(((java.awt.Paint) (obj)));
		graphics2d.fill(generalpath);
		if (obj instanceof GradientPaint)
			graphics2d.setPaint(((GradientPaint) obj).getColor2());
		if (double2 != null)
			graphics2d.fill(double2);
		if (isDrawBarOutline() && categoryitemrendererstate.getBarWidth() > 3D) {
			graphics2d.setStroke(getItemOutlineStroke(i, j));
			graphics2d.setPaint(getItemOutlinePaint(i, j));
			graphics2d.draw(generalpath);
			if (double2 != null)
				graphics2d.draw(double2);
		}
		org.jfree.chart.labels.CategoryItemLabelGenerator categoryitemlabelgenerator = getItemLabelGenerator(
				i, j);
		if (categoryitemlabelgenerator != null && isItemLabelVisible(i, j))
			drawItemLabel(graphics2d, categorydataset, i, j, categoryplot,
					categoryitemlabelgenerator, generalpath.getBounds2D(),
					d < 0.0D);
		if (categoryitemrendererstate.getInfo() != null) {
			EntityCollection entitycollection = categoryitemrendererstate
					.getEntityCollection();
			if (entitycollection != null) {
				String s = null;
				CategoryToolTipGenerator categorytooltipgenerator = getToolTipGenerator(
						i, j);
				if (categorytooltipgenerator != null)
					s = categorytooltipgenerator.generateToolTip(
							categorydataset, i, j);
				String s1 = null;
				if (getItemURLGenerator(i, j) != null)
					s1 = getItemURLGenerator(i, j).generateURL(categorydataset,
							i, j);
				CategoryItemEntity categoryitementity = new CategoryItemEntity(
						generalpath.getBounds2D(), s, s1, categorydataset,
						categorydataset.getRowKey(i), categorydataset
								.getColumnKey(j));
				entitycollection.add(categoryitementity);
			}
		}
	}
}

⌨️ 快捷键说明

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