在学习使用JFreeChart仪表图时,发现国内资源很少,所以分享一些Demo给大家。所需的JFreeChart-jar可以自己下载,也可以在我的分享里面免费下载。
import java.awt.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.dial.*;
import org.jfree.data.general.DefaultValueDataset;
import org.jfree.ui.GradientPaintTransformType;
import org.jfree.ui.StandardGradientPaintTransformer;
@SuppressWarnings("serial")
public class DialDemo2 extends JFrame
{
static class DemoPanel extends JPanel
implements ChangeListener
{
DefaultValueDataset dataset1;
DefaultValueDataset dataset2;
JSlider slider1;
JSlider slider2;
public void stateChanged(ChangeEvent changeevent)
{
dataset1.setValue(new Integer(slider1.getValue()));
dataset2.setValue(new Integer(slider2.getValue()));
}
public DemoPanel()
{
super(new BorderLayout());
dataset1 = new DefaultValueDataset(10D);
dataset2 = new DefaultValueDataset(38D);
DialPlot dialplot = new DialPlot();
dialplot.setView(0.0D, 0.0D, 1.0D, 1.0D);
dialplot.setDataset(0, dataset1);
dialplot.setDataset(1, dataset2);
StandardDialFrame standarddialframe = new StandardDialFrame();
standarddialframe.setBackgroundPaint(Color.lightGray);
standarddialframe.setForegroundPaint(Color.darkGray);
dialplot.setDialFrame(standarddialframe);
GradientPaint gradientpaint = new GradientPaint(new Point(), new Color(255, 255, 255), new Point(), new Color(170, 170, 220));
DialBackground dialbackground = new DialBackground(gradientpaint);
dialbackground.setGradientPaintTransformer(new StandardGradientPaintTransformer(GradientPaintTransformType.VERTICAL));
dialplot.setBackground(dialbackground);
//表盘中间字体
DialTextAnnotation dialtextannotation = new DialTextAnnotation("Temperature");
dialtextannotation.setFont(new Font("Dialog", 1, 14));
dialtextannotation.setRadius(0.69999999999999996D);
dialplot.addLayer(dialtextannotation);
//表盘具体数字 小格子
DialValueIndicator dialvalueindicator = new DialValueIndicator(0);
dialvalueindicator.setFont(new Font("Dialog", 0, 10));
dialvalueindicator.setOutlinePaint(Color.darkGray);
dialvalueindicator.setRadius(0.59999999999999998D);
dialvalueindicator.setAngle(-103D);
//dialplot.addLayer(dialvalueindicator);
//内表盘数据
DialValueIndicator dialvalueindicator1 = new DialValueIndicator(1);
dialvalueindicator1.setFont(new Font("Dialog", 0, 10));
dialvalueindicator1.setOutlinePaint(Color.red);
dialvalueindicator1.setRadius(0.59999999999999998D);
dialvalueindicator1.setAngle(-77D);
//dialplot.addLayer(dialvalueindicator1);
StandardDialScale standarddialscale = new StandardDialScale(0D, 100D, -120D, -300D, 10D, 4);
standarddialscale.setTickRadius(0.88D);
standarddialscale.setTickLabelOffset(0.14999999999999999D);
standarddialscale.setTickLabelFont(new Font("Dialog", 0, 14));
dialplot.addScale(0, standarddialscale);
StandardDialScale standarddialscale1 = new StandardDialScale(0.0D, 100D, -120D, -300D, 10D, 4);
//数字到圆心距离
standarddialscale1.setTickRadius(0.5D);
standarddialscale1.setTickLabelOffset(0.14999999999999999D);
standarddialscale1.setTickLabelFont(new Font("Dialog", 0, 10));
standarddialscale1.setMajorTickPaint(Color.red);
standarddialscale1.setMinorTickPaint(Color.red);
dialplot.addScale(1, standarddialscale1);
dialplot.mapDatasetToScale(1, 1);
StandardDialRange standarddialrange = new StandardDialRange(90D, 100D, Color.blue);
standarddialrange.setScaleIndex(1);
standarddialrange.setInnerRadius(0.58999999999999997D);
standarddialrange.setOuterRadius(0.58999999999999997D);
dialplot.addLayer(standarddialrange);
org.jfree.chart.plot.dial.DialPointer.Pin pin = new org.jfree.chart.plot.dial.DialPointer.Pin(1);
pin.setRadius(0.55000000000000004D);
dialplot.addPointer(pin);
org.jfree.chart.plot.dial.DialPointer.Pointer pointer = new org.jfree.chart.plot.dial.DialPointer.Pointer(0);
dialplot.addPointer(pointer);
DialCap dialcap = new DialCap();
dialcap.setRadius(0.10000000000000001D);
dialplot.setCap(dialcap);
//ChartFactory.create
JFreeChart jfreechart = new JFreeChart(dialplot);
jfreechart.setTitle("Dial Demo 2");
ChartPanel chartpanel = new ChartPanel(jfreechart);
chartpanel.setPreferredSize(new Dimension(400, 400));
JPanel jpanel = new JPanel(new GridLayout(2, 2));
jpanel.add(new JLabel("Outer Needle:"));//指针数据调节
jpanel.add(new JLabel("Inner Needle:"));
slider1 = new JSlider(0, 105);
slider1.setMajorTickSpacing(20);
slider1.setPaintTicks(true);
slider1.setPaintLabels(true);
slider1.addChangeListener(this);
jpanel.add(slider1);
slider2 = new JSlider(0, 100);
slider2.setMajorTickSpacing(100);
slider2.setPaintTicks(true);
slider2.setPaintLabels(true);
slider2.addChangeListener(this);
jpanel.add(slider2);//指针
add(chartpanel);
add(jpanel, "South");
}
}
public DialDemo2(String s)
{
super(s);
setDefaultCloseOperation(3);
setContentPane(createDemoPanel());
}
public static JPanel createDemoPanel()
{
return new DemoPanel();
}
public static void main(String args[])
{
DialDemo2 dialdemo2 = new DialDemo2("JFreeChart - Dial Demo 2");
dialdemo2.pack();
dialdemo2.setVisible(true);
}
}