In this series of Java Graphic examples, we are going to show you how to draw simple bar chart in Java.
Bar Chart in Java
In this series of Java Graphic examples, we are going to show you how to draw
simple bar chart in Java. A bar chart (bar graph) is a way of comparing two or more
values using rectangular bars of lengths. The bars can be
horizontally or vertically oriented. We are providing you an example which shows the Bar chart
in Java.
To draw a bar chart, the variables minvalue, maxvalue
of double type are define. The width of the bar is determined by clientWidth/value.length.
The FontMetrics class defines a font
metrics object which encapsulates information about the rendering of a
particular font on a particular screen. The Font class represents font.
The font 'Book Antiqua' is defined in the constructor of Font class.
The method getAscent() determines the
font ascent of the font described by the FontMetrics object. The font ascent is
the distance from the font's baseline to the top of most alphanumeric
characters. The method getDescent() determines the font descent. The method getHeight() gets the standard height of a line of text in
the font.
Following code describes the scale of bar chart:
double scale = (clientHeight - top - bottom) / (maxValue -
minValue); |
Here is the code of SimpleBarChart.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class SimpleBarChart extends JPanel {
private double[] value;
private String[] languages;
private String title;
public SimpleBarChart(double[] val, String[] lang, String t) {
languages = lang;
value = val;
title = t;
}
public void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
if (value == null || value.length == 0)
return;
double minValue = 0;
double maxValue = 0;
for (int i = 0; i < value.length; i++) {
if (minValue > value[i])
minValue = value[i];
if (maxValue < value[i])
maxValue = value[i];
}
Dimension dim = getSize();
int clientWidth = dim.width;
int clientHeight = dim.height;
int barWidth = clientWidth / value.length;
Font titleFont = new Font("Book Antiqua", Font.BOLD, 15);
FontMetrics titleFontMetrics = graphics.getFontMetrics(titleFont);
Font labelFont = new Font("Book Antiqua", Font.PLAIN, 10);
FontMetrics labelFontMetrics = graphics.getFontMetrics(labelFont);
int titleWidth = titleFontMetrics.stringWidth(title);
int q = titleFontMetrics.getAscent();
int p = (clientWidth - titleWidth) / 2;
graphics.setFont(titleFont);
graphics.drawString(title, p, q);
int top = titleFontMetrics.getHeight();
int bottom = labelFontMetrics.getHeight();
if (maxValue == minValue)
return;
double scale = (clientHeight - top - bottom) / (maxValue - minValue);
q = clientHeight - labelFontMetrics.getDescent();
graphics.setFont(labelFont);
for (int j = 0; j < value.length; j++) {
int valueP = j * barWidth + 1;
int valueQ = top;
int height = (int) (value[j] * scale);
if (value[j] >= 0)
valueQ += (int) ((maxValue - value[j]) * scale);
else {
valueQ += (int) (maxValue * scale);
height = -height;
}
graphics.setColor(Color.blue);
graphics.fillRect(valueP, valueQ, barWidth - 2, height);
graphics.setColor(Color.black);
graphics.drawRect(valueP, valueQ, barWidth - 2, height);
int labelWidth = labelFontMetrics.stringWidth(languages[j]);
p = j * barWidth + (barWidth - labelWidth) / 2;
graphics.drawString(languages[j], p, q);
}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(350, 300);
double[] value= new double[5];
String[] languages = new String[5];
value[0] = 1;
languages[0] = "Visual Basic";
value[1] = 2;
languages[1] = "PHP";
value[2] = 3;
languages[2] = "C++";
value[3] = 4;
languages[3] = "C";
value[4] = 5;
languages[4] = "Java";
frame.getContentPane().add(new SimpleBarChart(value, languages,
"Programming Languages"));
WindowListener winListener = new WindowAdapter() {
public void windowClosing(WindowEvent event) {
System.exit(0);
}
};
frame.addWindowListener(winListener);
frame.setVisible(true);
}
}
|
Output will be displayed as:
Download Source Code