hypesystem

GraphComponent.java

Dec 6th, 2011
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.03 KB | None | 0 0
  1. package mymoney;
  2.  
  3. import java.awt.*;
  4. import javax.swing.*;
  5. import java.util.ArrayList;
  6.  
  7. //for testing
  8. import java.util.Random;
  9.  
  10. /**
  11.  *
  12.  * @author hypesystem
  13.  */
  14. public class GraphComponent extends JComponent implements Viewable {
  15.     static final int PREF_WIDTH = 500;
  16.     static final int PREF_HEIGHT = 80;
  17.     private int view = MyMoney.VIEW_DAY;
  18.     private ArrayList<Day> displayed = new ArrayList<Day>();
  19.     private int text_padding = 4;
  20.     private int text_height = 10;
  21.     private int text_margin_bottom = 0 - 20;
  22.    
  23.     public GraphComponent() {
  24.         //test days added
  25.         Random rnd = new Random();
  26.         for(int i = 0; i < 7; i++) {
  27.             Day temp_day = new Day(rnd.nextInt(31),rnd.nextInt(12),rnd.nextInt(10) + 2002);
  28.             for(int j = 0; j < rnd.nextInt(15); j++) {
  29.                 temp_day.addEntry((double)(rnd.nextInt(400) - 100));
  30.             }
  31.             displayed.add(temp_day);
  32.             System.out.println(""+displayed.size()+": "+Day.STR_FROM_DAY[displayed.size() - 1]);
  33.         }
  34.         Day test_day = new Day(11,11,2011);
  35.         test_day.addEntry(200);
  36.         test_day.addEntry(-100);
  37.         displayed.add(test_day);
  38.         view = MyMoney.VIEW_WEEK;
  39.     }
  40.    
  41.     @Override
  42.     public void setView(int view) {
  43.         this.view = view;
  44.     }
  45.    
  46.     @Override
  47.     public void paint(Graphics g) {
  48.        
  49.         //view one day
  50.         if(view == MyMoney.VIEW_DAY && !displayed.isEmpty() && displayed.get(0) != null) {
  51.  
  52.             Day day = displayed.get(0);
  53.             double positive = 0, negative = 0, total = 0;
  54.             for(double entry : day.getEntries()) {
  55.                 if(entry > 0) positive += entry;
  56.                 else negative -= entry;
  57.                 total += entry;
  58.             }
  59.             System.out.println("P"+positive+"N"+negative+"T"+total);
  60.             double positive_w = 1 + (positive / (positive + negative)) * PREF_WIDTH,
  61.                     negative_w = 1 + (negative / (positive + negative)) * PREF_WIDTH,
  62.                     total_w = 1 + (total / (positive + negative)) * PREF_WIDTH;
  63.             System.out.println("PW"+positive_w+"NW"+negative_w+"TW"+(positive_w + negative_w));
  64.             g.setColor(Color.GREEN);
  65.             g.fillRect(0, 0, (int)positive_w, PREF_HEIGHT);
  66.             g.setColor(Color.RED);
  67.             g.fillRect((int)positive_w, 0, (int)negative_w, PREF_HEIGHT);
  68.             g.setColor(Color.BLACK);
  69.             g.fillRect(0,PREF_HEIGHT - 2 * text_height - text_padding,(int)total_w,PREF_HEIGHT);
  70.             g.drawString("IN: ~ "+(int)positive, text_padding, PREF_HEIGHT - 3 * (text_height + text_padding));
  71.             g.drawString("OUT: ~ -"+(int)negative, text_padding, PREF_HEIGHT - 2 * (text_height + text_padding));
  72.             g.setColor(Color.WHITE);
  73.             g.drawString("SUM: ~ "+(int)total, text_padding, PREF_HEIGHT - (text_height + text_padding) + text_padding);
  74.         }
  75.        
  76.         //view a week
  77.         else if(view == MyMoney.VIEW_WEEK) {
  78.             int w = PREF_WIDTH / displayed.size(), h = PREF_HEIGHT,
  79.                     spill = PREF_WIDTH % displayed.size();
  80.            
  81.             double highest_sum = 0, lowest_sum = 0, running_sum = 0;
  82.             for(Day day : displayed) {
  83.                 running_sum += day.getSum();
  84.                 if(running_sum > highest_sum) highest_sum = running_sum;
  85.                 else if(running_sum < lowest_sum) lowest_sum = running_sum;
  86.             }
  87.            
  88.             //total value is temp, should be gotten from previously total
  89.             int j = 0;
  90.             double old_sum = 0, new_sum = 0, height = highest_sum + lowest_sum;
  91.             for(Day day : displayed) {
  92.                 old_sum = new_sum;
  93.                 new_sum += day.getSum();
  94.                 if(j > 0) {
  95.                     if(new_sum > old_sum) g.setColor(Color.GREEN);
  96.                     else g.setColor(Color.RED);
  97.                     g.drawLine((j - 1) * w, (int)(PREF_HEIGHT - ((old_sum / height) * PREF_HEIGHT)), j * w, (int)(PREF_HEIGHT - ((new_sum / height) * PREF_HEIGHT)));
  98.                     g.setColor(Color.BLACK);
  99.                     g.drawString(""+new_sum,j * w, PREF_HEIGHT - text_padding);
  100.                 }
  101.                 else {
  102.                     g.setColor(Color.BLACK);
  103.                     g.drawString(""+day.getSum(),j * w, PREF_HEIGHT - text_padding);
  104.                 }
  105.                 j++;
  106.             }
  107.  
  108.             //draw unknown (last) day
  109.             g.setColor(Color.LIGHT_GRAY);
  110.             g.fillRect((displayed.size() - 1) * w, 0, w + spill, h);
  111.             g.setColor(Color.BLACK);
  112.             g.drawString(Day.STR_FROM_DAY[displayed.get(displayed.size() - 1).getDay()],
  113.                     (displayed.size() - 1) * w + text_padding,
  114.                     text_padding + text_height);
  115.  
  116.             //draw lines seperating days
  117.             g.setColor(Color.GRAY);
  118.             for(int i = 0; i < (displayed.size()); i++)
  119.                 g.drawLine(i * w, 0, i * w, h);
  120.         }
  121.        
  122.         g.setColor(Color.BLACK);
  123.         g.drawRect(0, 0, PREF_WIDTH - 1, PREF_HEIGHT - 1);
  124.     }
  125.  
  126.     public void display(int type, ArrayList<Day> days) {
  127.         if(type == MyMoney.VIEW_DAY && days.size() > 1 ||
  128.                 type == MyMoney.VIEW_WEEK && days.size() > Week.DAYS_IN_WEEK ||
  129.                 type == MyMoney.VIEW_MONTH && days.size() > Month.daysInMonth(1) ||
  130.                 type == MyMoney.VIEW_YEAR && days.size() > Year.daysInYear(1)) {
  131.             System.out.println("display() of GraphComponent called with invalid "
  132.                     + "argument sets of type ("+MyMoney.STR_FROM_VIEW[type]+") and "
  133.                     + "amount of days ("+days.size()+")");
  134.         }
  135.         else {
  136.             view = type;
  137.             displayed = days;
  138.             repaint();
  139.         }
  140.     }
  141.    
  142.     @Override
  143.     public Dimension getPreferredSize() {
  144.         return new Dimension(PREF_WIDTH, PREF_HEIGHT);
  145.     }
  146.    
  147.     @Override
  148.     public Dimension getMinimumSize() {
  149.         return getPreferredSize();
  150.     }
  151. }
  152.  
Advertisement
Add Comment
Please, Sign In to add comment