Автор: BUILDER.COM
JSP предоставляет множество простых и практичных инструментов, включая чтение данных из базы данных, отправку данных и возможность отображения результатов в виде круговой диаграммы. Теперь давайте рассмотрим этот простой, но практичный метод.
что тебе нужно
Чтобы правильно запустить примеры, относящиеся к этой статье, вам потребуется JDK 1.2 или выше, система управления реляционными базами данных и сетевой сервер JSP. Я отлаживал эти примеры в Tomcat, а также использовал классы com.sun.image.codec.jpeg, выпущенные Sun Java 2 SDK.
Проектирование базы данных Предположим, вы работаете в компании, которая продает свежие фрукты. Компания продает следующие фрукты: яблоки, апельсины и виноград. Теперь ваш начальник хочет использовать круговую диаграмму для отображения общего объема продаж каждого типа фруктов. С помощью круговой диаграммы можно сразу увидеть продажи каждого продукта, и начальник может быстро понять операции с продуктами компании. .
В таблице A используются два списка баз данных из этой статьи. Первый список («Продукты») содержит названия всех проданных товаров; второй список («Продажи») содержит объем продаж, соответствующий каждому товару.
Список «Продукты» содержит два поля: ProductID и ProductName. Список «Продажи» содержит идентификатор продажи, идентификатор продукта и общую сумму. ProductID в списке продаж обеспечивает связь между двумя списками. Итоговые суммы в списке продаж содержат сумму денежных средств для каждой продажи в виде числа с плавающей запятой.
Метод getProducts() в таблице B соединяет две базы данных и сохраняет все названия продуктов в массиве. Я установил следующие правила базы данных:
ProductID является наиболее уникальным в списке продуктов и имеет значение. также самый критический;
ProductID имеет значение 0 для первой записи;
Все последующие последовательные записи являются накопительными, поэтому идентификатор продукта второй записи равен 1, идентификатор продукта третьей записи — 2 и т. д.
Эти правила базы данных позволяют хранить данные в массиве продуктов, как показано ниже:
arr[rs.getInt("productID")] = rs.getString("productname");
Некоторые системы управления базами данных допускают автоматическое сохранение данных по умолчанию. Накопление или автоматическая сортировка. При проектировании базы данных обязательно сначала выясните, каким правилам следует ваша система управления базой данных, например автоматическое накопление, автоматическая сортировка и т. д.
Получить общий объем продаж
В большинстве случаев в списке продаж будет много записей, поэтому очень важен быстрый и эффективный доступ к базе данных. Теперь нам просто нужно получить доступ к общему объему продаж каждого продукта в базе данных.
Метод getSales() в таблице C подключается к базе данных и возвращает массив, содержащий общий объем продаж каждого продукта. Когда getSales() просматривает все записи, он сохраняет только новый объем продаж каждого продукта:
int product = rs.getInt("productID");
arr[продукт] += rs.getFloat("сумма");
Каждый продукт на круговой диаграмме должен отображаться разным цветом. Для достижения этой цели мы создаем объект pieColor (как показано в таблице D). Этот объект содержит массив связанных цветов:
Color pieColorArray[] = {new Color(210,60,60), new Color(60,210, 60 )...}
Класс pieColor определяет метод setNewColor(), который может увеличивать curPieColor и индекс. В то же время он может проверять, что индекс не выходит за пределы граничного диапазона, то есть используемый метод: если curPieColor слишком велик, присваивается значение 0.
Более эффективно, setNewColor() перебирает каждый цвет и выполняет следующий код для первого цвета:
curPieColor++;
if(curPieColor >= pieColorArray.length)
{curPieColor = 0;}
RenderingHints и классы сглаживания
Класс java.awt.RenderingHints определяет множество методов для отображения двухмерной графики, включая методы альфа_интерполяции, сглаживания и сглаживания. RenderingHints помогают определить, как отображается графика и как ее лучше всего обрабатывать.
Чтобы обеспечить плавное отображение, вы можете использовать метод сглаживания для обработки круговой графики. Сглаживание — это метод сглаживания графики. Алгоритм выбирает значение цвета специального пикселя и заменяет пиксель пересечения, тем самым сглаживая пересечение линий.
Рисунок A иллюстрирует эффект метода сглаживания. Видно, что пересечение линий круговой диаграммы с использованием метода сглаживания становится очень плавным.
Рисунок A
В то же время вы также можете создать объект RenderingHints и передать его методу Graphics2D setRenderingHints(), как показано ниже:
RenderingHints renderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHints(renderHints);
Создание регулируемых границ;
Круговая фигура на рисунке A имеет границу. Как изменить размер границы? Вы можете сначала определить int border = 10, а затем вычислить размер области внутри границы, чтобы получить:
Ellipse2D.Double elb = new Ellipse2D.Double(x_pie - border/2, y_pie - border/2, pieWidth + border, pieHeight + border);
x_pie Значение y_pie представляет верхний левый угол квадрата, окружающего круговую фигуру. Мы получим центр круговой фигуры, взяв половину области границы (border/2).
Теория дуги (дуги) Метод fillArc(), унаследованный от класса java.awt.Graphics, предоставляет простой метод для рисования различных частей (или дуг) круговой графики:
g2d.fillArc(x_position, y_position, width, height, startAngle , SweepAngle);
Целые числа x_position и y_position представляют координаты x, y верхнего левого угла заполняемой дуги, а целые числа ширины и высоты представляют ее конкретный размер. Если значения ширины и высоты равны, круговая диаграмма будет представлять собой круг. Если ширина и высота не равны, круговая диаграмма будет представлять собой эллипс.
Метод fillArc() определяет размер дуги на основе целочисленного значения SweepAngle. Если значение SweepAngle положительное, дуга рисуется против часовой стрелки, в противном случае — по часовой стрелке.
Первым шагом при рисовании дуги является использование метода getPieColor() объекта pieColor для получения цвета ближайшей круговой дуги и присвоения его текущей дуге:
g2d.setColor
(pc.getPieColor());
, используя непрерывный цикл массива sales[] и накапливая его, чтобы получить общий объем продаж:
salesTotal += sales[i]
Используя общий объем продаж, вы можете рассчитать процент продаж каждого продукта в общем объеме продаж:
float; perc = (sales [i]/salesTotal);
Мы вычисляем SweepAngle, чтобы присвоить градусы каждой части дуги:
int SweepAngle = (int)(perc * 360);
После того, как каждая часть дуги нарисована, startAngle можно увеличить соответствующим образом; к текущему углу развертки. Это гарантирует, что текущая часть дуги начинается с предыдущей дуги, создавая тем самым полную круговую форму.
Значки дисплея Значки обеспечивают самый простой способ отображения различных частей круговой диаграммы. Размер значка должен соответствовать объему, занимаемому на круговой диаграмме.
На рисунке B показана полная круговая диаграмма и значки, соответствующие каждой части, включая название продукта, общий объем продаж и долю каждой части.
Изображение Б
Резюме
В этой статье описывается, как использовать JSP для построения методов и алгоритмов круговой графики. Эти методы и алгоритмы просты и практичны, и разработчики могут в полной мере использовать их.