Aplicación gráfica con NetBeans
En este tutorial vamos a mostrar varias cosas a la vez:
- Como crear una aplicación gráfica con NetBeans
- Como hacer una pequeña herramienta de dibujo
- Como contruir … a través de clases abstractas …. programas
ampliables
NetBeans es un entorno de desarrollo gratuito, muy sencillo y potente
….Vamos a capturar todas las pantallas para mostraros como crear el esqueleto
de nuestro programa.
Este es el aspecto de NetBeans al arrancarlo:
Creamos un nuevo proyecto
Pulsamos el botón NEW
Seleccionamos el título del proyecto
Ya tenemos el proyecto donde meter nuestros ficheros
Vamos a crear un directorio ….
Seleccionamos el sistema de ficheros
Creamos un nuevo directorio … editor gráfico
Ahora sobre nuestro proyecto pulsamos el botón derecho
Hemos elegido …. tipo Frame
Elegimos los metodos a sobre escribir
Vemos el resumen
El sistema ha escrito el código por nosotros
/* * editorGrafico.java * * Created on 16 de mayo de 2003, 22:42 */ /** * * @author Administrator */ public class editorGrafico extends java.awt.Frame { /** Creates new form editorGrafico */ public editorGrafico() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() { addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); pack(); } /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } /** * @param args the command line arguments */ public static void main(String args[]) { new editorGrafico().show(); } public void paint(java.awt.Graphics graphics) { } // Variables declaration - do not modify // End of variables declaration } |
Queremos atender los eventos del raton… porque pintaremos cuando el usuario
pulse y suelte en ratón
Vemos que ha generado el código necesario de un modo sencillo
Nuestra aplicación pretende ser un pequeño programa de dibujo
simple que nos permita dibujar distintos tipos de objetos y repintarlos cuando
sea necesario, aunque lo vamos a dejar preparado para que haga más cosas
…
Vamos a crear una clase que represente todos los objetos
pintados, otra que represente cada uno de los objetos a pintar (una clase
abstracta) y otra que sea una implementación del primer tipo de elemento …..
una linea
Bueno … aunque tengamos muchas pantallas ….. el código por
ahora generado es poco
/* * editorGrafico.java * * Created on 16 de mayo de 2003, 22:42 */ /** * * @author Administrator */ public class editorGrafico extends java.awt.Frame { /** Creates new form editorGrafico */ public editorGrafico() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() { addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { botonPulsado(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { botonSoltado(evt); } }); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); pack(); } private void botonSoltado(java.awt.event.MouseEvent evt) { // Add your handling code here: } private void botonPulsado(java.awt.event.MouseEvent evt) { // Add your handling code here: } /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } /** * @param args the command line arguments */ public static void main(String args[]) { new editorGrafico().show(); } public void paint(java.awt.Graphics graphics) { } // Variables declaration - do not modify // End of variables declaration } class listaObjetos { } class objetoGenerico { } class objetoLinea extends objetoGenerico { } |
Bueno .. creo que lo hemos captado …
por lo que vemos a seguir
escribiendo ….. a mano el código
La verdad es que tampoco hay que escribir demasiado …. os
mostramos el programa final y luego esplicamos un poco la lógica
import java.awt.*; import java.util.*; import java.lang.*; import java.io.*; /* * editorGrafico.java * * Created on 16 de mayo de 2003, 22:42 */ /** * * @author Administrator */ public class editorGrafico extends java.awt.Frame { // objeto que contiene todo lo que pintamos private listaObjetos nuestrosObjetos = new listaObjetos(); // variables temporales donde almacenar los puntos int xIniTemp = 0; int yIniTemp = 0; int xFinTemp = 0; int yFinTemp = 0; // metodo para centrar mensajes de depuracion void depura(String mensaje) { System.out.println("El mensaje es " + mensaje); } /** Creates new form editorGrafico */ public editorGrafico() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() { addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { botonPulsado(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { botonSoltado(evt); } }); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); pack(); } private void botonSoltado(java.awt.event.MouseEvent evt) { depura("Boton soltado"); Point punto = evt.getPoint(); xFinTemp = punto.x; yFinTemp = punto.y; objetoLinea nElemento = new objetoLinea(xIniTemp,yIniTemp,xFinTemp,yFinTemp); Graphics g = this.getGraphics(); nElemento.pinta(g); g.dispose(); nuestrosObjetos.insertaElemento(nElemento); // Add your handling code here: } private void botonPulsado(java.awt.event.MouseEvent evt) { // Add your handling code here: depura("Boton pulsado"); Point punto = evt.getPoint(); xIniTemp = punto.x; yIniTemp = punto.y; } /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } /** * @param args the command line arguments */ public static void main(String args[]) { editorGrafico miapp = new editorGrafico(); miapp.resize(600,400); miapp.show(); } public void paint(java.awt.Graphics pContexto) { nuestrosObjetos.pintaTodo(pContexto); } // Variables declaration - do not modify // End of variables declaration } class listaObjetos implements Serializable { private Vector arrayObjetos = new Vector(); public void insertaElemento(objetoGenerico pElemento) { arrayObjetos.add(pElemento); } public void pintaTodo(Graphics pContexto) { for (int i = 0 ; i< arrayObjetos.size(); i++) { objetoGenerico elemento = (objetoGenerico) arrayObjetos.get(i); elemento.pinta(pContexto); } } } abstract class objetoGenerico implements Serializable { abstract public void pinta(Graphics pContexto); } class objetoLinea extends objetoGenerico { int xorigen = 0; int yorigen = 0; int xdestino = 0; int ydestino = 0; objetoLinea(int pXorigen, int pYorigen,int pXdestino, int pYdestino) { xorigen = pXorigen; yorigen = pYorigen; xdestino = pXdestino; ydestino = pYdestino; } public void pinta(Graphics pContexto) { pContexto.drawLine(xorigen,yorigen,xdestino,ydestino); } } |
Lo que hemos hecho es crear un objeto
que representa todo lo que vamos pintando
private listaObjetos nuestrosObjetos
= new listaObjetos();
Este objeto tiene dentro un vector, que
es quien irá agragando los puntos
private Vector arrayObjetos
= new Vector();
public void insertaElemento(objetoGenerico pElemento)
{
arrayObjetos.add(pElemento);
}
De tal modo que nuestra aplicación,
cuando el usuario pulsa el boton, captura las coordenas iniciales y cuando lo
suelta, captura las finales, creando un objeto (en este caso una linea) y
añadiendolo al Vector
private void botonSoltado(java.awt.event.MouseEvent
evt) {
depura(«Boton
soltado»);
Point punto = evt.getPoint();
xFinTemp = punto.x;
yFinTemp = punto.y;
objetoLinea nElemento = new
objetoLinea(xIniTemp,yIniTemp,xFinTemp,yFinTemp);
Graphics g = this.getGraphics();
nElemento.pinta(g);
g.dispose();
nuestrosObjetos.insertaElemento(nElemento);
// Add your handling code here:
}
private void botonPulsado(java.awt.event.MouseEvent
evt) {
// Add your handling code here:
depura(«Boton
pulsado»);
Point punto = evt.getPoint();
xIniTemp = punto.x;
yIniTemp = punto.y;
}
Cuando hay que repintar la pantalla,
los que hacemos es decir que se repinten todos los objetos
public void paint(java.awt.Graphics pContexto)
{
nuestrosObjetos.pintaTodo(pContexto);
}
Esta función itera por todos los
elementos y los manda pintar
public void pintaTodo(Graphics pContexto)
{
for (int i = 0
; i< arrayObjetos.size(); i++)
{
objetoGenerico elemento = (objetoGenerico) arrayObjetos.get(i);
elemento.pinta(pContexto);
}
}
Si veis … lo hemos dejado preparado
…. para poder leerlo y escribirlo en disco
class listaObjetos implements Serializable
Y para poder .. modificando 4 lineas
….. pintar distintos tipos de objetos (uso de clase abstracta)
abstract class objetoGenerico implements
Serializable
{
abstract public void pinta(Graphics pContexto);
}
Descargarse el
código
muchas gracias. bien explicado!