Гистограмма на Java
В одном из предыдущих своих материалов я уже показывал, как на Java создавать простые диаграммы по точкам. В этой же заметке мы углубимся в вопрос и научимся создавать обычные гистограммы на Java с помощью awt и swing.
Что вообще такое обычная гистограмма (Clustered Column)? По сути дела это графическое представление определенных данных. С помощью такой формы можно наглядно показать разницу, динамику и изменение данных. Например, у нас есть данные по посещаемости некоторых сайтов в определенные месяцы года. Можно их наглядно представить в виде гистограммы:
Теперь попробуем то же самое реализовать на Java. Для рисования нам потребуется создать класс DrawingComponent, который будет создан на основе класса (расширять его возможности) JPanel. Листинг:
class DrawingComponent extends JPanel {
@Override
protected void paintComponent(Graphics gh) {
Graphics2D drp = (Graphics2D)gh;
//горизонтальные линии и обозначения
for (int i=2; i<9; i++) {
drp.drawLine(50, 50+44*i, 400, 50+44*i);
int vs = 80 - i*10;
drp.drawString(vs+"", 30, 50+44*i);
}
drp.drawString("upread.ru", 100, 40);
drp.drawString("google.ru", 100, 60);
drp.drawString("yandex.ru", 100, 80);
drp.drawString("Январь", 60, 420);
drp.drawString("Февраль", 160, 420);
drp.drawString("Март", 260, 420);
drp.drawString("Апрель", 360, 420);
drp.setColor(Color.BLUE);
drp.fillRect(80, 30, 10, 10);
drp.setColor(Color.RED);
drp.fillRect(80, 50, 10, 10);
drp.setColor(Color.GREEN);
drp.fillRect(80, 70, 10, 10);
for (int i=0; i<4; i++) {
//строим саму гистограмму
//извлекаем цвет для каждого графика
Color color = RED;
for (int j=0;j<3;j++) {
try {
Field field = Class.forName("java.awt.Color").getField(GrGis.col[j].toLowerCase());
color = (Color)field.get(null);
} catch (Exception e) {}
drp.setColor(color);
//переводим полученные данные в реальные координаты
int realY = (int) (400-44*GrGis.y[j][i]/10)+3;
drp.fillRect(50+20*j+100*i, realY, 20,(int) (GrGis.y[j][i]*4.4));
}
}
}
}
Сложного тут нет ничего совершенно: мы просто рисуем линии и прямоугольники и добавляем текст по заданным координатам. А вот сами координаты берутся из основного класса – здесь двумерный массив y определяется в основном методе для наглядности:
public class GrGis extends JFrame{
public static double y[][] = new double[3][4];
public static String col[] = {"BLUE", "RED", "GREEN"};//массив цветов
public GrGis () {
super("Обычная гистограмма");
JPanel jcp = new JPanel(new BorderLayout());
setContentPane(jcp);
jcp.add(new DrawingComponent(), BorderLayout.CENTER);
jcp.setBackground(Color.gray);
setSize(500, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
y[0][0]=5;
y[0][1]=10;
y[0][2]=12;
y[0][3]=8;
y[1][0]=24;
y[1][1]=44;
y[1][2]=18;
y[1][3]=28;
y[2][0]=20;
y[2][1]=20;
y[2][2]=30;
y[2][3]=50;
GrGis gr = new GrGis ();
gr.setVisible(true);
}
}
Тут тоже ничего особо сложного нет. Создаем окно, пара массивов – со значениями и цветами, добавляем панель на окно. В итоге мы имеем вот это:
Вот так с помощью awt и swing можно реализовать обычную гистограмму, создать класс для работы с деловой графикой на языке Java. Если у вас есть какие-либо вопросы, или требуется написать программу на Java, то вы в любое время можете обратиться ко мне.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты