package gui; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import java.text.NumberFormat; import java.util.ArrayList; import java.util.Iterator; import javax.swing.JPanel; import data.Offer; import data.Search; public class GraphPanel extends JPanel { // Generated by Eclipse private static final long serialVersionUID = 1L; ArrayList<Offer> offers; int sortOrder; float average; public void init(ArrayList<Offer> offers, int sortOrder, float avg) { this.offers = offers; this.sortOrder = sortOrder; average = avg; this.repaint(); } private double getStrWidth(Graphics g, Offer o) { NumberFormat.getInstance().setMinimumIntegerDigits(10); String minimum = "" + getValue(o); System.out.println(minimum); FontRenderContext frc = ((Graphics2D) g).getFontRenderContext(); Rectangle2D bounds = this.getFont().getStringBounds(minimum, frc); return bounds.getWidth() + 3; } public void paint(Graphics g) { Dimension size = getSize(); g.clearRect(0, 0, size.width, size.height); if (offers == null || offers.size() == 0) { return; } double off1 = getStrWidth(g, offers.get(0)); double off2 = getStrWidth(g, offers.get(offers.size() - 1)); double xoff = Math.max(off1, off2); System.out.println("" + getValue(offers.get(0))); g.drawString("" + getValue(offers.get(0)), 0, size.height - 2); g.drawString("" + getValue(offers.get(offers.size() - 1)), 0, 10); g.drawLine((int) xoff, 0, (int) xoff, size.height); g.drawLine(0, size.height - 1, size.width, size.height - 1); int height = size.height; double coeff = height / getValue(offers.get(offers.size() - 1)); double lastY = height - (coeff * getValue(offers.get(0))); double lastX = xoff; double xdiff = (size.getWidth() - xoff) / offers.size(); g.drawLine((int) xoff, (int) (average * coeff), size.width, (int) (average * coeff)); System.out.println("AVG: " + average + " " + coeff + " " + average * coeff); for (Iterator<Offer> iter = offers.iterator(); iter.hasNext();) { Offer o = iter.next(); System.out.println(o); double x = lastX + xdiff; double y = height - (coeff * getValue(o)); System.out.println(x + " " + y); g.drawLine((int) lastX, (int) lastY, (int) x, (int) y); lastX = x; lastY = y; } } float getValue(Offer o) { switch (sortOrder) { case Search.AREA: return o.getArea(); case Search.AREA_PRICE: return o.getAreaPrice(); default: return o.getPrice(); } } }