Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Chart;
- import javax.swing.*;
- import java.awt.*;
- import java.awt.geom.Line2D;
- import java.awt.geom.Rectangle2D;
- import java.util.ArrayList;
- import java.util.List;
- class GraphComponent extends JComponent {
- private static final int DEFAULT_WIDTH = 1000;
- private static final int DEFAULT_HEIGHT = 750;
- private int width;
- private int height;
- private int screenWidth;
- private int screenHeight;
- private Point zeroPoint;
- private int gapPixels;
- private int gapValue;
- private Coordinates<Integer> displacement;
- private List<Function> functions;
- public GraphComponent() {
- functions = new ArrayList<>();
- displacement = new Coordinates<>(0, 0);
- Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
- screenWidth = (int) screenSize.getWidth();
- screenHeight = (int) screenSize.getHeight();
- width = 1000; //screenWidth*4/5;
- height = 1000; //screenHeight*3/5;
- zeroPoint = new Point(width/2, height/2);
- gapPixels = 20;
- gapValue = 1;
- }
- public void paintComponent(Graphics g) {
- Graphics2D g2 = (Graphics2D) g;
- drawBackground(g2);
- drawNet(g2, gapPixels);
- drawAxes(g2);
- drawAxesOverlay(g2, gapPixels);
- }
- private void drawBackground(Graphics2D g) {
- g.setPaint(Color.WHITE);
- Rectangle2D background = new Rectangle2D.Float(0, 0, width, height);
- g.fill(background);
- //g.draw(background);
- }
- private void drawAxes(Graphics2D g) {
- float size = 5;
- g.setPaint(Color.BLACK);
- //lines
- g.setStroke(new BasicStroke(1));
- g.draw(new Line2D.Float(0, height/2, width, height/2));
- g.draw(new Line2D.Float(width/2, 0, width/2, height));
- g.setStroke(new BasicStroke(1));
- drawArrow(Direction.UP, width/2, 0, size, g);
- drawArrow(Direction.RIGHT, width, height/2, size, g);
- //x and y
- g.drawString("y", width/2 + size*2,size*2);
- g.drawString("x", width - size*3, (int) (height/2 + size*2.5));
- }
- private void drawArrow(Direction direction, int tipX, int tipY, float size, Graphics2D g) {
- g.setPaint(Color.BLACK);
- g.setStroke(new BasicStroke(1));
- switch (direction) {
- case UP:
- g.draw(new Line2D.Float(tipX, tipY, tipX-size, tipY+size));
- g.draw(new Line2D.Float(tipX, tipY, tipX+size, tipY+size));
- break;
- case RIGHT:
- g.draw(new Line2D.Float(tipX, tipY, tipX-size, tipY-size));
- g.draw(new Line2D.Float(tipX, tipY, tipX-size, tipY+size));
- break;
- default:
- //Not supported
- throw new IllegalArgumentException();
- }
- g.setStroke(new BasicStroke(1));
- }
- private void drawAxesOverlay(Graphics2D g, int gap) {
- int val;
- /*
- //vertical
- val = 0 - gapValue * ((int) width/2/gap);
- for (int i = (int) zeroPoint.getX() - gap * ((int) width/2/gap); i < width; i += gap) {
- g.drawString(Integer.toString(val), width/2 + gap/2, i);
- val += gapValue;
- }
- */
- //horizontal
- val = 0 - gapValue * ((int) height/2/gap);
- for (int i = (int) zeroPoint.getY() - gap * ((int) height/2/gap); i < height; i += gap) {
- g.drawString(Integer.toString(val), i, height/2 + gap);
- val += gapValue;
- }
- }
- private void drawFunctions(Graphics2D g) {
- }
- private void drawFunction(Graphics2D g) {
- }
- private void drawNet(Graphics2D g, int gap) {
- //brighter lines
- int greyScale = 220;
- g.setPaint(new Color(greyScale, greyScale, greyScale));
- drawSimpleNet(g, gap);
- //darker lines
- greyScale = 190;
- g.setPaint(new Color(greyScale, greyScale, greyScale));
- drawSimpleNet(g, gap*5);
- }
- private void drawSimpleNet(Graphics2D g, int gap) {
- //vertical
- /*
- for (int i = (int) zeroPoint.getX(); i> 0; i -= gap) {
- g.draw(new Line2D.Float(i, 0, i, height));
- }
- for (int i = (int) zeroPoint.getX(); i < width; i += gap) {
- g.draw(new Line2D.Float(i, 0, i, height));
- }
- */
- for (int i = (int) zeroPoint.getX() - gap * ((int) width/2/gap); i < width; i += gap) {
- g.draw(new Line2D.Float(i, 0, i, height));
- }
- //horizontal
- /*
- for (int i = (int) zeroPoint.getY(); i > 0; i -= gap) {
- g.draw(new Line2D.Float(0, i, width, i));
- }
- for (int i = (int) zeroPoint.getY(); i < height; i += gap) {
- g.draw(new Line2D.Float(0, i, width, i));
- }
- */
- for (int i = (int) zeroPoint.getY() - gap * ((int) height/2/gap); i < height; i += gap) {
- g.draw(new Line2D.Float(0, i, width, i));
- }
- }
- public Dimension getPreferredSize() {
- return new Dimension(width, height);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement