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;
}
}