Гистограмма на 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.