package matematicas.graficas2D;
// Bibliotecas a enlazar
//AWT Abstract Window Toolkit (Kit de Herramientas de Ventana Abstracta)
import java.awt.*;
import java.awt.event.*;
//SWING movimiento?
import javax.swing.*;
// la palabra clave "extends" expresa herencia
// la palabra clave "implements" hace referencia al tipo de interfaz
// la siguiente sentencia además define una clase de nombre "ClPlanoCartesiano" que hereda la clase JFrame
// e implementa la interfaz "ActionListener"
// 1: CAMPOS
// Identificadores instancia de la clase o de referancia
// Declaración de un control tipo [Campo de E/S de texto (jTextField)] con ID referencia de nombre "fldCampo1" y tipo privada
// Se usara para mostrar un tecto de salida (coordenada final)
// Declaración de un control tipo PANEL con ID referencia de nombre "pnlPlanoDeGraficacion" y tipo privada
// se usara para contener una grafico (plano cartesiano)
private JPanel pnlPlanoDeGraficacion
;
// control tipo BOTON, nombre de ID "btnBoton1"
// se usara para iniciar la graficacion, al hacer clic se genera un evento de interrupcion que es "escuchado" por el metodo "actionPerformed"
public int intAnchoVentana;
public int intAltoVentana;
public int intPlanoCentroX;
public int intPlanoCentroY;
// 2: CONSTRUCTOR
// Función o método CONSTRUCTOR para inicializar los Identificadores instancia de la clase
// por medio de parametros formales "intAnchoVentana_par" y "intAltoVentana_par"
ClPlanoCartesiano(int intAnchoVentana_par, int intAltoVentana_par) {
intAnchoVentana = intAnchoVentana_par;
intAltoVentana = intAltoVentana_par;
intPlanoCentroX = intAnchoVentana_par / 2;
intPlanoCentroY = intAltoVentana_par / 2;
}// fin de la función o metodo CONSTRUCTOR
// Metodo Principal
//
public static void main
(String argumentosDeEntrada
[]) { // ID locales
// Constantes de la dimension de la ventana
// 400 pixeles direccion horizontal y 300 vertical
final int dim_x = 400;
final int dim_y = 300;
// Se crea una nueva y primer instancia de la clase "ClPlanoCartesiano", un obj de nombre identificador "ventana_obj1" parámetros actuales ANCHO, ALTO
ClPlanoCartesiano ventana_obj1 = new ClPlanoCartesiano(dim_x, dim_y);
// Se Fija el tamano de la ventana al objeto "ventana_obj1"
ventana_obj1.setSize(dim_x, dim_y);
ventana_obj1.setTitle("Plano cartesiano");
// Despliega y hace visible la ventana del objeto "ventana_obj1"
ventana_obj1.metCrearGUI();
ventana_obj1.setVisible(true);
}
private void metCrearGUI() {
// EL boton salir o cerrar [X] de la barra de titulo, ejecuta CERRAR al SALIR
setDefaultCloseOperation(EXIT_ON_CLOSE);
// PANEL
// Se crea o contruye un nuevo control tipo PANEL sobre el declarado ID referencia "pnlPlanoDeGraficacion"
pnlPlanoDeGraficacion
= new JPanel(); // Dimension menor al tamaño de la ventana
pnlPlanoDeGraficacion.
setPreferredSize(new Dimension(intAnchoVentana
- 100, intAltoVentana
- 100));
// Fija el fondo del PANEL en gris
pnlPlanoDeGraficacion.
setBackground(Color.
gray); // Se añade o adhiere el control PANEL a la GUI
GUI_obj1.add(pnlPlanoDeGraficacion);
// Sobre el plano de graficacion se dibuja una linea
//BOTON
// Se crea o contruye un nuevo control tipo BOTON sobre el declarado ID "btnBoton1" y se lo etiqueta con un nombre visible "Graficar"
btnBoton1
= new JButton("Graficar"); // Se añade o adhiere el control BOTON a la GUI
GUI_obj1.add(btnBoton1);
// Se adhiere o agrega "btnBoton1" al auditor de la interrupción
// this: Localize al metodo dentro del objeto
btnBoton1.addActionListener(this);
//CAMPO-de-TEXTO
// Se crea o contruye un nuevo control TIPO CAMPO-E/S-de-TEXTO con ID referencia "fldCampo1"
// además se le asigna un texto como salida fija del campo
// Se añade o adhiere el control CAMPO-de-TEXTO a la GUI
GUI_obj1.add(fldCampo1);
}
@Override
// ISR: Rutina de Servicio o Gestion de Interrupción a la accion realizada o pulsacion de un bonton del mouse sobre el puntero visible en pantalla
// De acceso PUBLICO, ya que es invocada externamente o fuera de esta clase
// Para usar el control PANEL como area de dibujo, se define el tipo de objeto "Graphics" con ID "grphGrafica_obj1" y contenido
Graphics grphGrafica_obj1
= pnlPlanoDeGraficacion.
getGraphics();
// CONSTANTES para indicar posición 0 que es el valor X de la coordenada, posición 1 igual a Y
final int x = 0;
final int y = 1;
// coordenadas de graficación de la línea recta cooA(x1, y1) cooB(x2, y2)
int cooA[] = {0, 0};
int cooB[] = {0, 0};
// El método drawLine, recibe, las coordenadas separadas y no como pares ordenados
// Grafica los ejes coordenados
// EJE x
cooA[0] = 0;
cooA[1] = intPlanoCentroY;
cooB[0] = intAnchoVentana;
cooB[1] = intPlanoCentroY;
grphGrafica_obj1.drawLine(cooA[x], cooA[y], cooB[x], cooB[y]);
// EJE y
cooA[0] = intPlanoCentroX;
cooA[1] = 0;
cooB[0] = intPlanoCentroX;
cooB[1] = intAltoVentana;
grphGrafica_obj1.drawLine(cooA[x], cooA[y], cooB[x], cooB[y]);
// Luego Grafica una línea recta desde el origen hasta (25,25)
cooA[0] = metCoox(0);
cooA[1] = metCooy(0);
cooB[0] = metCoox(25);
cooB[1] = metCooy(25);
grphGrafica_obj1.drawLine(cooA[x], cooA[y], cooB[x], cooB[y]);
// Grafica una línea recta desde (25,25) hasta (50,0)
// usando el metodo metDibujarLinea, primer parametro el objeto "grphGrafica_obj1", siguientes args coordenadas de los puntos extremos
metDibujarLinea(grphGrafica_obj1, 25,25,50,0);
// Despliega las coo de graficación
fldCampo1.setText("x0:" + cooA[x] + " y0:" + cooA[y] + " x1:" + cooB[x] + " x1:" + cooB[y]);
}
// Toma como 1er argumento un obtejo tipo "Graphics"
private void metDibujarLinea
(Graphics grphGrafica_obj1_copia,
int x0,
int y0,
int x1,
int y1
) {
grphGrafica_obj1_copia.drawLine(metCoox(x0), metCooy(y0), metCoox(x1), metCooy(y1));
}
// Método para el ajuste de coordenada X
private int metCoox(int x) {
int x_;
if (x >= 0) {
x_ = intPlanoCentroX + x;
} else {
x_ = intPlanoCentroX - x;
}
return x_;
}
// Método para el ajuste de coordenada Y
private int metCooy(int y) {
int y_;
if (y >= 0) {
y_ = intPlanoCentroY - y;
} else {
y_ = intPlanoCentroY + y;
}
return y_;
}
}//