Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.13 KB | None | 0 0
  1. package Chart;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.geom.Line2D;
  6. import java.awt.geom.Rectangle2D;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9.  
  10. class GraphComponent extends JComponent {
  11.     private static final int DEFAULT_WIDTH = 1000;
  12.     private static final int DEFAULT_HEIGHT = 750;
  13.     private int width;
  14.     private int height;
  15.     private int screenWidth;
  16.     private int screenHeight;
  17.     private Point zeroPoint;
  18.     private int gapPixels;
  19.     private int gapValue;
  20.     private Coordinates<Integer> displacement;
  21.  
  22.     private List<Function> functions;
  23.  
  24.     public GraphComponent() {
  25.         functions = new ArrayList<>();
  26.         displacement = new Coordinates<>(0, 0);
  27.         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  28.         screenWidth = (int) screenSize.getWidth();
  29.         screenHeight = (int) screenSize.getHeight();
  30.         width = 1000; //screenWidth*4/5;
  31.         height = 1000; //screenHeight*3/5;
  32.         zeroPoint = new Point(width/2, height/2);
  33.         gapPixels = 20;
  34.         gapValue = 1;
  35.     }
  36.  
  37.     public void paintComponent(Graphics g) {
  38.         Graphics2D g2 = (Graphics2D) g;
  39.         drawBackground(g2);
  40.         drawNet(g2, gapPixels);
  41.         drawAxes(g2);
  42.         drawAxesOverlay(g2, gapPixels);
  43.     }
  44.  
  45.     private void drawBackground(Graphics2D g) {
  46.         g.setPaint(Color.WHITE);
  47.         Rectangle2D background = new Rectangle2D.Float(0, 0, width, height);
  48.         g.fill(background);
  49.         //g.draw(background);
  50.     }
  51.  
  52.     private void drawAxes(Graphics2D g) {
  53.         float size = 5;
  54.  
  55.         g.setPaint(Color.BLACK);
  56.  
  57.         //lines
  58.         g.setStroke(new BasicStroke(1));
  59.  
  60.         g.draw(new Line2D.Float(0, height/2, width, height/2));
  61.         g.draw(new Line2D.Float(width/2, 0, width/2, height));
  62.  
  63.         g.setStroke(new BasicStroke(1));
  64.  
  65.         drawArrow(Direction.UP, width/2, 0, size, g);
  66.         drawArrow(Direction.RIGHT, width, height/2, size, g);
  67.  
  68.         //x and y
  69.         g.drawString("y", width/2 + size*2,size*2);
  70.         g.drawString("x", width - size*3, (int) (height/2 + size*2.5));
  71.     }
  72.  
  73.     private void drawArrow(Direction direction, int tipX, int tipY, float size, Graphics2D g) {
  74.         g.setPaint(Color.BLACK);
  75.         g.setStroke(new BasicStroke(1));
  76.         switch (direction) {
  77.             case UP:
  78.                 g.draw(new Line2D.Float(tipX, tipY, tipX-size, tipY+size));
  79.                 g.draw(new Line2D.Float(tipX, tipY, tipX+size, tipY+size));
  80.                 break;
  81.             case RIGHT:
  82.                 g.draw(new Line2D.Float(tipX, tipY, tipX-size, tipY-size));
  83.                 g.draw(new Line2D.Float(tipX, tipY, tipX-size, tipY+size));
  84.                 break;
  85.             default:
  86.                 //Not supported
  87.                 throw new IllegalArgumentException();
  88.         }
  89.         g.setStroke(new BasicStroke(1));
  90.     }
  91.  
  92.     private void drawAxesOverlay(Graphics2D g, int gap) {
  93.         int val;
  94.  
  95.         /*
  96.         //vertical
  97.         val = 0 - gapValue * ((int) width/2/gap);
  98.         for (int i = (int) zeroPoint.getX() - gap * ((int) width/2/gap); i < width; i += gap) {
  99.             g.drawString(Integer.toString(val), width/2 + gap/2, i);
  100.             val += gapValue;
  101.         }
  102.  
  103.          */
  104.  
  105.         //horizontal
  106.         val = 0 - gapValue * ((int) height/2/gap);
  107.         for (int i = (int) zeroPoint.getY() - gap * ((int) height/2/gap); i < height; i += gap) {
  108.             g.drawString(Integer.toString(val), i, height/2 + gap);
  109.             val += gapValue;
  110.         }
  111.  
  112.  
  113.  
  114.     }
  115.  
  116.     private void drawFunctions(Graphics2D g) {
  117.  
  118.     }
  119.  
  120.     private void drawFunction(Graphics2D g) {
  121.  
  122.     }
  123.  
  124.     private void drawNet(Graphics2D g, int gap) {
  125.         //brighter lines
  126.         int greyScale = 220;
  127.         g.setPaint(new Color(greyScale, greyScale, greyScale));
  128.  
  129.         drawSimpleNet(g, gap);
  130.  
  131.         //darker lines
  132.         greyScale = 190;
  133.         g.setPaint(new Color(greyScale, greyScale, greyScale));
  134.  
  135.         drawSimpleNet(g, gap*5);
  136.     }
  137.  
  138.     private void drawSimpleNet(Graphics2D g, int gap) {
  139.         //vertical
  140.         /*
  141.         for (int i = (int) zeroPoint.getX(); i> 0; i -= gap) {
  142.             g.draw(new Line2D.Float(i, 0, i, height));
  143.         }
  144.  
  145.         for (int i = (int) zeroPoint.getX(); i < width; i += gap) {
  146.             g.draw(new Line2D.Float(i, 0, i, height));
  147.         }
  148.          */
  149.  
  150.         for (int i = (int) zeroPoint.getX() - gap * ((int) width/2/gap); i < width; i += gap) {
  151.             g.draw(new Line2D.Float(i, 0, i, height));
  152.         }
  153.  
  154.         //horizontal
  155.         /*
  156.         for (int i = (int) zeroPoint.getY(); i > 0; i -= gap) {
  157.             g.draw(new Line2D.Float(0, i, width, i));
  158.         }
  159.  
  160.         for (int i = (int) zeroPoint.getY(); i < height; i += gap) {
  161.             g.draw(new Line2D.Float(0, i, width, i));
  162.         }
  163.          */
  164.  
  165.         for (int i = (int) zeroPoint.getY() - gap * ((int) height/2/gap); i < height; i += gap) {
  166.             g.draw(new Line2D.Float(0, i, width, i));
  167.         }
  168.     }
  169.  
  170.  
  171.     public Dimension getPreferredSize() {
  172.         return new Dimension(width, height);
  173.     }
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement