Grafico

Grafico

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

@SuppressWarnings("serial")
public class Grafico extends JFrame implements ChangeListener{
    int a, b, c, d;
    
    private JSlider aDeslizante, bDeslizante, cDeslizante, dDeslizante;
    private JTextField aTexto, bTexto, cTexto, dTexto;
    private JPanel panel;
    private int altura = 200, anchura = 200;
    
    public static void main(String[] args) {
        Grafico frame = new Grafico();
        frame.setSize(350,350);
        frame.crearGUI();
        frame.setVisible(true);
    }
    private void crearGUI(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container ventana = getContentPane();
        ventana.setLayout(new FlowLayout());
        
        aDeslizante = new JSlider(-5,5);
        aDeslizante.setBackground(Color.blue);
        aDeslizante.addChangeListener(this);
        ventana.add(aDeslizante);
        
        aTexto = new JTextField(4);
        ventana.add(aTexto);
        
        bDeslizante = new JSlider(-5,5);
        bDeslizante.setBackground(Color.blue);
        bDeslizante.addChangeListener(this);
        ventana.add(bDeslizante);
        
        bTexto = new JTextField(4);
        ventana.add(bTexto);
        
        cDeslizante = new JSlider(-5,5);
        cDeslizante.setBackground(Color.blue);
        cDeslizante.addChangeListener(this);
        ventana.add(cDeslizante);
        
        cTexto = new JTextField(4);
        ventana.add(cTexto);
        
        dDeslizante = new JSlider(-5,5);
        dDeslizante.setBackground(Color.blue);
        dDeslizante.addChangeListener(this);
        ventana.add(dDeslizante);
        
        dTexto = new JTextField(4);
        ventana.add(dTexto);
        
        panel = new JPanel();
        panel.setPreferredSize(new Dimension(anchura, altura));
        panel.setBackground(Color.black);
        ventana.add(panel);
    }
    public void stateChanged(ChangeEvent e){
        a = aDeslizante.getValue();
        b = bDeslizante.getValue();
        c = cDeslizante.getValue();
        d = dDeslizante.getValue();
        
        aTexto.setText("a = "+Integer.toString(a));
        bTexto.setText("b = "+Integer.toString(b));
        cTexto.setText("c = "+Integer.toString(c));
        dTexto.setText("d = "+Integer.toString(d));
        dibujar();
    }
    private void dibujar(){
        Graphics p = panel.getGraphics();
        p.setColor(Color.black);
        p.fillRect(0,0,anchura,altura);
        double x, y, siguienteX, siguienteY;
        int pixelX, pixelY, siguientePixelX, siguientePixelY;
        p.setColor(Color.red);
        for(pixelX = 0; pixelX <= anchura; pixelX++){
            x = escalarX(pixelX);
            y = laFuncion(x);
            pixelY = escalarY(y);
            siguientePixelX = pixelX + 1;
            siguienteX = escalarX(siguientePixelX);
            siguienteY = laFuncion(siguienteX);
            siguientePixelY = escalarY(siguienteY);
            p.drawLine(pixelX,pixelY,siguientePixelX,siguientePixelY);
        }
    }
    private double laFuncion(double x){
        return a*x*x*x+b*x*x+c*x+d;
    }
    private double escalarX(int pixelX){
        double xInicial = -5,xFinal = 5;
        double xEscala = anchura/(xFinal-xInicial);
        return (pixelX-(anchura/2))/xEscala;
    }
    private int escalarY(double y){
        double yInicial = -5,yFinal = 5;
        int coordPixel;
        double yEscala = altura/(yFinal-yInicial);
        coordPixel = (int)(-y*yEscala)+(int)(altura/2);
        return coordPixel;
    }
}