[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/biblelamp/JavaExercises/master/Java%201/swing/DrawGraphs.java [Back]  [Original]

/**
 * Java. Level 1. Drawing graphs of simple functions
 *
 * @author Sergey Iryupin
 * @version 0.3 dated Aug 14, 2017
 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class DrawGraphs extends JFrame implements KeyListener {

    final String TITLE_OF_PROGRAM = "Drawing graphs of simple functions";
    final int START_LOCATION = 200;
    final int WINDOW_WIDTH = 550;
    final int WINDOW_HEIGTH = 350;
    final int LEFT = 37;    // key codes
    final int UP = 38;
    final int RIGHT = 39;
    final int DOWN = 40;
    final int SIN = 83;     // for choosing function
    final int COS = 67;
    final int TAN = 84;

    Canvas canvas; // JPanel for painting
    float stretchX = 1.2f;
    int stretchY = 75;
    int typeGraph = SIN;    // default type of function

    public static void main(String[] args) {
        new DrawGraphs();
    }

    DrawGraphs() {
        setTitle(TITLE_OF_PROGRAM);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(START_LOCATION, START_LOCATION, WINDOW_WIDTH, WINDOW_HEIGTH);
        setResizable(false);
        canvas = new Canvas();
        canvas.setBackground(Color.white);
        add(BorderLayout.CENTER, canvas);
        addKeyListener(this);
        setVisible(true);
    }

    @Override
    public void keyPressed(KeyEvent event) { }

    @Override
    public void keyTyped(KeyEvent event) { }

    @Override
    public void keyReleased(KeyEvent event) {
        switch (event.getKeyCode()) {
            case LEFT: stretchX -= 0.1;
                canvas.repaint();
                break;
            case RIGHT: stretchX += 0.1;
                canvas.repaint();
                break;
            case UP: stretchY += 5;
                canvas.repaint();
                break;
            case DOWN: stretchY -= 5;
                canvas.repaint();
                break;
            case SIN:
            case COS:
            case TAN: typeGraph = event.getKeyCode();
                canvas.repaint();
                break;
            default:
                System.out.println(event.getKeyCode());
        }
    }

    class Canvas extends JPanel { // for painting
        @Override
        public void paint(Graphics g) {
            super.paint(g);

            // get the real size
            Dimension d = this.getSize();
            int width = (int) d.getWidth();
            int height = (int) d.getHeight();

            // drawing coordinate lines
            g.drawLine(5, height / 2, width - 6, height / 2);
            g.drawLine(width / 2, 5, width / 2, height - 6);

            // draving arrows 
            g.drawLine(width - 6, height / 2, width - 6 - 7, height / 2 - 3);
            g.drawLine(width - 6, height / 2, width - 6 - 7, height / 2 + 3);

            // draving arrows Y
            g.drawLine(width / 2, 5, width / 2 - 3, 5 + 7);
            g.drawLine(width / 2, 5, width / 2 + 3, 5 + 7);

            // drawing name of coordinates
            g.drawString("X", width - 15, height / 2 - 8);
            g.drawString("Y", width / 2 - 15, 20);
            g.drawString("Sin | Cos | Tan", 10, height - 15);

            // converting degrees to radians
            // radians = degrees * Math.PI/180

            g.setColor(Color.blue);
            for (int x = -(width / 2 - 10), y = 0; x < width /2 - 10; x++) {
                double radian = Math.toRadians(x) * stretchX;
                switch (typeGraph) {
                    case SIN:
                        g.drawString("SIN", 10, 20);
                        y = (int) (Math.sin(radian) * stretchY);
                        break;
                    case COS:
                        g.drawString("COS", 10, 20);
                        y = (int) (Math.cos(radian) * stretchY);
                        break;
                    case TAN:
                        g.drawString("TAN", 10, 20);
                        y = (int) (Math.tan(radian) * stretchY);
                }
                g.drawRect(x + width / 2, y + height / 2, 0, 0);
            }
        }
    }
}

Web Proxy Viewer  |  New URL  |  Original Page