Autor: BUILDER.COM
JSP bietet viele einfache und praktische Tools, darunter das Lesen von Daten aus der Datenbank, das Senden von Daten und die Möglichkeit, die Ergebnisse in einem Kreisdiagramm anzuzeigen. Schauen wir uns nun diese einfache, aber praktische Methode an.
was Sie brauchen
Um die Beispiele zu diesem Artikel korrekt auszuführen, benötigen Sie JDK 1.2 oder höher, ein relationales Datenbankverwaltungssystem und einen JSP-Netzwerkserver. Ich habe diese Beispiele in Tomcat debuggt und außerdem die vom Sun Java 2 SDK veröffentlichten com.sun.image.codec.jpegclasses verwendet.
Datenbankdesign Angenommen, Sie arbeiten für ein Unternehmen, das frisches Obst verkauft. Zu den von dem Unternehmen verkauften Früchten gehören: Äpfel, Orangen und Weintrauben. Jetzt möchte Ihr Chef ein kuchenförmiges Diagramm verwenden, um das Gesamtverkaufsvolumen jeder Obstsorte anzuzeigen. Das kuchenförmige Diagramm kann die Verkäufe jedes Produkts auf einen Blick klar machen, und der Chef kann die Produkttransaktionen des Unternehmens schnell erfassen .
Tabelle A verwendet zwei Datenbanklisten aus diesem Artikel. Die erste Liste (Produkte) enthält die Namen aller verkauften Produkte; die zweite Liste (Verkäufe) enthält das Verkaufsvolumen jedes Produkts.
Die Produktliste enthält zwei Felder: Produkt-ID und Produktname. Die Verkaufsliste enthält die Verkaufs-ID, die Produkt-ID und den Gesamtbetrag. Die Produkt-ID in der Verkaufsliste stellt die Verbindung zwischen den beiden Listen her. Die Summen in der Verkaufsliste enthalten den Geldbetrag für jeden Verkauf als Gleitkommazahl.
Die Methode getProducts() in Tabelle B verbindet zwei Datenbanken und speichert alle Produktnamen in einem Array. Ich habe die folgenden Datenbankregeln festgelegt:
ProductID ist das eindeutigste in der Produktliste und ist es auch auch das kritischste;
ProductID hat für den ersten Datensatz den Wert 0;
Alle nachfolgenden aufeinanderfolgenden Datensätze sind kumulativ, sodass die Produkt-ID des zweiten Datensatzes 1, die Produkt-ID des dritten Datensatzes 2 usw. ist.
Diese Datenbankregeln ermöglichen die Speicherung von Daten im Produktarray, wie unten gezeigt:
arr[rs.getInt("productID")] = rs.getString("productname");
Einige Datenbankverwaltungssysteme ermöglichen standardmäßig die automatische Speicherung von Daten. Akkumulation oder automatische Sortierung. Wenn Sie eine Datenbank entwerfen, sollten Sie zunächst herausfinden, welche Regeln Ihr Datenbankverwaltungssystem befolgt, z. B. automatische Akkumulation, automatische Sortierung usw.
Erhalten Sie das Gesamtverkaufsvolumen
In den meisten Fällen enthält die Verkaufsliste viele Datensätze, daher ist ein schneller und effizienter Zugriff auf die Datenbank sehr wichtig. Jetzt müssen wir nur noch auf die Gesamtverkäufe für jedes Produkt in der Datenbank zugreifen.
Die Methode getSales() in Tabelle C stellt eine Verbindung zur Datenbank her und gibt ein Array zurück, das den Gesamtumsatz jedes Produkts enthält. Wenn getSales() alle Datensätze durchläuft, speichert es nur das neue Verkaufsvolumen jedes Produkts:
int product = rs.getInt("productID");
arr[product] += rs.getFloat("amount");
Jedes Produkt im Kreisdiagramm sollte in einer anderen Farbe angezeigt werden. Um diesen Zweck zu erreichen, erstellen wir ein pieColor-Objekt (wie in Tabelle D gezeigt). Dieses Objekt enthält ein Array verwandter Farben:
Color pieColorArray[] = {new Color(210,60,60), new Color(60,210,). 60 )...}
Die pieColor-Klasse definiert eine setNewColor()-Methode, die curPieColor und den Index erhöhen kann. Gleichzeitig kann überprüft werden, ob der Index den Grenzbereich überschreitet, dh die verwendete Methode ist: Wenn curPieColor zu groß ist, wird der Wert 0 zugewiesen.
Effizienter ist es, wenn setNewColor() jede Farbe durchläuft und den folgenden Code für die erste Farbe ausführt:
curPieColor++;
if(curPieColor >= pieColorArray.length)
{curPieColor = 0;}
RenderingHints und Antialiasing-Klassen
Die Klasse java.awt.RenderingHints definiert viele Methoden zum Anzeigen zweidimensionaler Grafiken, einschließlich alpha_interpolation-, Dithering- und Antialiasing-Methoden. RenderingHints helfen dabei, zu bestimmen, wie Grafiken angezeigt werden und wie Grafiken am besten verarbeitet werden.
Um eine reibungslose Darstellung zu gewährleisten, können Sie die Antialiasing-Methode zur Verarbeitung von Kreisgrafiken verwenden. Antialiasing ist eine Methode zur Grafikglättung. Der Algorithmus wählt den Farbwert eines speziellen Pixels aus und ersetzt das Schnittpunktpixel, wodurch der Schnittpunkt der Linien geglättet wird.
Abbildung A veranschaulicht die Wirkung der Antialiasing-Methode. Es ist ersichtlich, dass der Schnittpunkt der Linien des Kreisdiagramms mithilfe der Antialiasing-Methode sehr glatt wird.
Abbildung A
Gleichzeitig können Sie auch ein RenderingHints-Objekt erstellen und es an die Graphics2D-Methode setRenderingHints() übergeben, wie unten gezeigt:
RenderingHints renderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHints(renderHints);
Erstellen Sie anpassbare Ränder
Die Kreisform in Abbildung A hat einen Rand. Wie kann ich die Größe des Randes ändern? Sie können zunächst int border = 10 definieren und dann die Größe des Bereichs innerhalb des Rahmens berechnen, um Folgendes zu erreichen:
Ellipse2D.Double elb = new Ellipse2D.Double(x_pie - border/2, y_pie - border/2, pieWidth + border, pieHeight + border);
x_pie Der Wert von y_pie stellt die obere linke Ecke des Quadrats dar, das die Kreisform umgibt. Wir erhalten die Mitte der Tortenform, indem wir die Hälfte des Randbereichs (Rand/2) nehmen.
Bogentheorie (Arc) Die von der Klasse java.awt.Graphics geerbte Methode fillArc() bietet eine einfache Methode zum Zeichnen verschiedener Teile (oder Bögen) kreisförmiger Grafiken:
g2d.fillArc(x_position, y_position, width, height, startAngle
,
SweepAngle);
Wenn die Werte für Breite und Höhe gleich sind, ist das Kreisdiagramm ein Kreis. Wenn Breite und Höhe nicht gleich sind, ist das Kreisdiagramm eine Ellipse.
Die Methode fillArc() bestimmt die Größe des Bogens basierend auf dem ganzzahligen Wert von SweepAngle. Wenn der SweepAngle-Wert positiv ist, wird der Bogen gegen den Uhrzeigersinn gezeichnet, andernfalls wird er im Uhrzeigersinn gezeichnet.
Der erste Schritt beim Zeichnen eines Bogens besteht darin, die getPieColor()-Methode des pieColor-Objekts zu verwenden, um die Farbe des nächstgelegenen kreisbogenförmigen Bogens zu ermitteln und ihn dem aktuellen Bogen zuzuweisen:
g2d.setColor(pc.getPieColor())
; , Durchlaufen Sie das Array sales[] und akkumulieren Sie es, um das Gesamtverkaufsvolumen zu erhalten:
salesTotal += sales[i];
Mithilfe des Gesamtverkaufsvolumens können Sie den Prozentsatz der Verkäufe jedes Produkts am Gesamtverkaufsvolumen berechnen:
float perc = (sales [i]/salesTotal);
Wir berechnen SweepAngle, um jedem Teil des Bogens Grad zuzuweisen:
int SweepAngle = (int)(perc * 360);
Nachdem jeder Teil des Bogens gezeichnet wurde, kann startAngle entsprechend erhöht werden zum aktuellen SweepAngle. Dadurch wird sichergestellt, dass der aktuelle Bogenteil beim vorherigen Bogen beginnt, wodurch eine vollständige Tortenform entsteht.
Anzeigesymbole Symbole bieten die einfachste Möglichkeit, die verschiedenen Teile eines Kreisdiagramms anzuzeigen. Die Größe eines Symbols sollte der im Kreisdiagramm belegten Menge entsprechen.
Abbildung B zeigt ein vollständiges Kreisdiagramm und die Symbole für jeden Teil, einschließlich Produktname, Gesamtverkaufsvolumen und Anteil jedes Teils.
Bild B
Zusammenfassung
In diesem Artikel wird beschrieben, wie JSP zum Zeichnen von Kreisdiagrammmethoden und -algorithmen verwendet wird. Diese Methoden und Algorithmen sind einfach und praktisch, und Entwickler können diese Methoden vollständig nutzen.