Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package mymoney;
- import java.awt.*;
- import javax.swing.*;
- import java.util.ArrayList;
- //for testing
- import java.util.Random;
- /**
- *
- * @author hypesystem
- */
- public class GraphComponent extends JComponent implements Viewable {
- static final int PREF_WIDTH = 500;
- static final int PREF_HEIGHT = 80;
- private int view = MyMoney.VIEW_DAY;
- private ArrayList<Day> displayed = new ArrayList<Day>();
- private int text_padding = 4;
- private int text_height = 10;
- private int text_margin_bottom = 0 - 20;
- public GraphComponent() {
- //test days added
- Random rnd = new Random();
- for(int i = 0; i < 7; i++) {
- Day temp_day = new Day(rnd.nextInt(31),rnd.nextInt(12),rnd.nextInt(10) + 2002);
- for(int j = 0; j < rnd.nextInt(15); j++) {
- temp_day.addEntry((double)(rnd.nextInt(400) - 100));
- }
- displayed.add(temp_day);
- System.out.println(""+displayed.size()+": "+Day.STR_FROM_DAY[displayed.size() - 1]);
- }
- Day test_day = new Day(11,11,2011);
- test_day.addEntry(200);
- test_day.addEntry(-100);
- displayed.add(test_day);
- view = MyMoney.VIEW_WEEK;
- }
- @Override
- public void setView(int view) {
- this.view = view;
- }
- @Override
- public void paint(Graphics g) {
- //view one day
- if(view == MyMoney.VIEW_DAY && !displayed.isEmpty() && displayed.get(0) != null) {
- Day day = displayed.get(0);
- double positive = 0, negative = 0, total = 0;
- for(double entry : day.getEntries()) {
- if(entry > 0) positive += entry;
- else negative -= entry;
- total += entry;
- }
- System.out.println("P"+positive+"N"+negative+"T"+total);
- double positive_w = 1 + (positive / (positive + negative)) * PREF_WIDTH,
- negative_w = 1 + (negative / (positive + negative)) * PREF_WIDTH,
- total_w = 1 + (total / (positive + negative)) * PREF_WIDTH;
- System.out.println("PW"+positive_w+"NW"+negative_w+"TW"+(positive_w + negative_w));
- g.setColor(Color.GREEN);
- g.fillRect(0, 0, (int)positive_w, PREF_HEIGHT);
- g.setColor(Color.RED);
- g.fillRect((int)positive_w, 0, (int)negative_w, PREF_HEIGHT);
- g.setColor(Color.BLACK);
- g.fillRect(0,PREF_HEIGHT - 2 * text_height - text_padding,(int)total_w,PREF_HEIGHT);
- g.drawString("IN: ~ "+(int)positive, text_padding, PREF_HEIGHT - 3 * (text_height + text_padding));
- g.drawString("OUT: ~ -"+(int)negative, text_padding, PREF_HEIGHT - 2 * (text_height + text_padding));
- g.setColor(Color.WHITE);
- g.drawString("SUM: ~ "+(int)total, text_padding, PREF_HEIGHT - (text_height + text_padding) + text_padding);
- }
- //view a week
- else if(view == MyMoney.VIEW_WEEK) {
- int w = PREF_WIDTH / displayed.size(), h = PREF_HEIGHT,
- spill = PREF_WIDTH % displayed.size();
- double highest_sum = 0, lowest_sum = 0, running_sum = 0;
- for(Day day : displayed) {
- running_sum += day.getSum();
- if(running_sum > highest_sum) highest_sum = running_sum;
- else if(running_sum < lowest_sum) lowest_sum = running_sum;
- }
- //total value is temp, should be gotten from previously total
- int j = 0;
- double old_sum = 0, new_sum = 0, height = highest_sum + lowest_sum;
- for(Day day : displayed) {
- old_sum = new_sum;
- new_sum += day.getSum();
- if(j > 0) {
- if(new_sum > old_sum) g.setColor(Color.GREEN);
- else g.setColor(Color.RED);
- g.drawLine((j - 1) * w, (int)(PREF_HEIGHT - ((old_sum / height) * PREF_HEIGHT)), j * w, (int)(PREF_HEIGHT - ((new_sum / height) * PREF_HEIGHT)));
- g.setColor(Color.BLACK);
- g.drawString(""+new_sum,j * w, PREF_HEIGHT - text_padding);
- }
- else {
- g.setColor(Color.BLACK);
- g.drawString(""+day.getSum(),j * w, PREF_HEIGHT - text_padding);
- }
- j++;
- }
- //draw unknown (last) day
- g.setColor(Color.LIGHT_GRAY);
- g.fillRect((displayed.size() - 1) * w, 0, w + spill, h);
- g.setColor(Color.BLACK);
- g.drawString(Day.STR_FROM_DAY[displayed.get(displayed.size() - 1).getDay()],
- (displayed.size() - 1) * w + text_padding,
- text_padding + text_height);
- //draw lines seperating days
- g.setColor(Color.GRAY);
- for(int i = 0; i < (displayed.size()); i++)
- g.drawLine(i * w, 0, i * w, h);
- }
- g.setColor(Color.BLACK);
- g.drawRect(0, 0, PREF_WIDTH - 1, PREF_HEIGHT - 1);
- }
- public void display(int type, ArrayList<Day> days) {
- if(type == MyMoney.VIEW_DAY && days.size() > 1 ||
- type == MyMoney.VIEW_WEEK && days.size() > Week.DAYS_IN_WEEK ||
- type == MyMoney.VIEW_MONTH && days.size() > Month.daysInMonth(1) ||
- type == MyMoney.VIEW_YEAR && days.size() > Year.daysInYear(1)) {
- System.out.println("display() of GraphComponent called with invalid "
- + "argument sets of type ("+MyMoney.STR_FROM_VIEW[type]+") and "
- + "amount of days ("+days.size()+")");
- }
- else {
- view = type;
- displayed = days;
- repaint();
- }
- }
- @Override
- public Dimension getPreferredSize() {
- return new Dimension(PREF_WIDTH, PREF_HEIGHT);
- }
- @Override
- public Dimension getMinimumSize() {
- return getPreferredSize();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment