viernes, 20 de abril de 2007

JTable

En muchas ocasiones necesitamos representar una gran cantidad de datos con un JTable con un scroll muy lento y un gran consumo de memoria y recursos.

A continuación el siguiente manual que explica como realiar esta tarea de la forma más optima posible. Este manual es básico para utiizar de forma adecuada un gran volumen de datos en una aplicación en java JTable

lunes, 26 de marzo de 2007

Numero de cifras

Este ejercicio en java divide un números sucesivamente hasta conseguir
el número de cifras que tiene un entero.

Por ejemplo si tu introduces el número 3454 el programa te devolverá
un 4.


import java.io.*;

class Cifras {

static int total=0;
static int x=0;

static int numCifras(int x){
while(x!=0){
x=x/10;
total+=1; //incrementamos el contador
}
return total;
}

public static void main(String[]args) throws IOException{
//BufferedReader para leer de consola
BufferedReader leer = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Introduce un nu4mero:");
//leemos una línea como string
String linea = leer.readLine();
/*Convertirmos el string a un número. Podrías poner
*un try y catch para comprobrar errores al convertirlo.Por
*ejemplo si introducen un string*/
x= Integer.parseInt(linea);
System.out.println("El numero de cifras es:");
//Imprimimos el número de líneas
System.out.println(numCifras(x));
}
}

Buscar en archivos java

Barras de progreso JProgressBar y aplicaciones gráficas

Este ejemplo busca coincidencias en los archivos a partir de un directorio
especificado por el usuario.

Problema:
Si tenemos una aplicaciones que realiza un proceso que consume un tiempo relativamente largo, es bueno hacer saber al usuario de la aplicacion que la tarea esta siendo procesada y mas o menos el tiempo que queda, lo tipico del mensaje:'El proceso va por el 20%' por ejemplo.

Las librerias de Swing en java, tiene unos mecanismos para mostrar este progreso, vamos a hacer un ejemplo de una aplicacion que busca una cadena de texto en todos los ficheros de un directorio espedificado.

Fuente original: telepolis.com

import java.awt.GridLayout;
import java.awt.Cursor;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.lang.reflect.InvocationTargetException; public class ProgressDemo {

String startdir; // directorio de busqueda
String patt; // lo que vamos a buscar
JTextArea outarea; // output area for file pathnames
JFrame frame; // frame
JProgressBar progbar; // barra de progreso
JLabel fileslab; // numero de ficheros encontrado
boolean search_flag; // true si la busqueda esta en progreso

class Search extends Thread
{

// actualiza el GUI
void doUpdate(Runnable r) {
try {
SwingUtilities.invokeAndWait(r);
}
catch (InvocationTargetException e1) {
System.err.println(e1);
}
catch (InterruptedException e2) {
System.err.println(e2);
}
}
// nos da la lista de los ficheros de un directorio
void getFileList(File f, List list) {

// recursividad si hay un directorio dentro del mismo
if (f.isDirectory()) {
String entries[] = f.list();
for (int i = 0; i < entries.length; i++) {
getFileList(new File(f, entries[i]),
list);
}
}

// para fciheros , se añaden a la lista y se actualiza la barra de progreso
else if (f.isFile()) {
list.add(f.getPath());
final int size = list.size();
if (size % 100 != 0) {
return;
}
doUpdate(new Runnable() {
public void run() {
progbar.setValue(size % 1000);
}
});
}
}

// comprueba que el fichero contiene la cadena
boolean fileMatch(String fn, String patt) {
boolean found = false;

try {
FileReader fr = new FileReader(fn);
BufferedReader br = new BufferedReader(fr);
String str;
while ((str = br.readLine()) != null) {
if (str.indexOf(patt) != -1) {
found = true;
break;
}
}
br.close();
}
catch (IOException e) {
System.err.println(e);
}
return found;
}



// realiza la busqueda
public void run() {
List filelist = new ArrayList();
final String sep =
System.getProperty("line.separator");

doUpdate(new Runnable() {
public void run() {
outarea.setText("");
fileslab.setText("");
}
});

// nos da la lista de todos los ficheros y muestra el contador
getFileList(new File(startdir), filelist);
final int size = filelist.size();
doUpdate(new Runnable() {
public void run() {
progbar.setValue(0);
fileslab.setText("Encontrados " + size +
" ficheros, buscando ...");
}
});

// configura el monitor de progreso
final ProgressMonitor pm = new ProgressMonitor(
frame, "Buscando ficheros", "", 0, size - 1);
pm.setMillisToDecideToPopup(0);
pm.setMillisToPopup(0);

// itera entre los ficheros, actualizando el monitor de progreso
for (int i = 0; i < size; i++) {
final String fn = (String)filelist.get(i);
final int curr = i;
if (pm.isCanceled()) {
break;
}
final boolean b = fileMatch(fn, patt);
doUpdate(new Runnable() {
public void run() {
pm.setProgress(curr);
pm.setNote(fn);
if (b) {
outarea.append(fn + sep);
}
}
});
}

doUpdate(new Runnable() {
public void run() {
pm.close();
outarea.setCaretPosition(0);
fileslab.setText("");
}
});
search_flag = false;
}
}

public ProgressDemo() {
frame = new JFrame("ProgressDemo");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});



JPanel paneltop = new JPanel();
JPanel panelbot = new JPanel();
paneltop.setLayout(new GridLayout(5, 1));
JPanel panel1 = new JPanel();
panel1.add(new JLabel("Directorio inicial"));
final JTextField dirfield = new JTextField(20);
panel1.add(dirfield);
JPanel panel2 = new JPanel();
panel2.add(new JLabel("Patron de busqueda"));
final JTextField pattfield = new JTextField(20);
panel2.add(pattfield);
JPanel panel3 = new JPanel();
JButton button = new JButton("Search");
panel3.add(button);
JPanel panel4 = new JPanel();
progbar = new JProgressBar(0, 999);
panel4.add(progbar);
JPanel panel5 = new JPanel();
fileslab = new JLabel();
panel5.add(fileslab);
JPanel panel6 = new JPanel();
outarea = new JTextArea(8, 40);
outarea.setEditable(false);
JScrollPane jsp = new JScrollPane(outarea,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
panel6.add(jsp);

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
startdir = dirfield.getText();
patt = pattfield.getText();
if (startdir == null ||
startdir.trim().equals("") ||
patt == null ||
patt.trim().equals("")) {
JOptionPane.showMessageDialog(
frame, "Entrada invalida", "Error",
JOptionPane.ERROR_MESSAGE);
}
else if (search_flag) {
JOptionPane.showMessageDialog(
frame, "Busqueda en progreso",
"Error", JOptionPane.ERROR_MESSAGE);
}
else {
search_flag = true;
new Search().start();
}
}
});

paneltop.add(panel1);
paneltop.add(panel2);
paneltop.add(panel3);
paneltop.add(panel4);
paneltop.add(panel5);
panelbot.add(panel6);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 1));
panel.add(paneltop);
panel.add(panelbot);
frame.getContentPane().add(panel);
frame.pack();
frame.setLocation(200, 200);
frame.setVisible(true);
}

public static void main(String args[]) {
new ProgressDemo();
}
}

jueves, 15 de marzo de 2007

GridLayout

El GridLayout es una forma de situar los componentes con gran flexibilidad en el panel.
con setLayout(new GridLayout(Fila,Columna)); puedes establecer un layout con el número de Filas y Columnas y los componentes se añaden dentro de las celdas definidas.

En el siguiente ejemplo se colocan los componentes en una rejilla que ocupa todo el frame y coloca cuatro botones en su respectiva celda.

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


class Ejemplo extends JFrame {
JButton uno = new JButton("uno");
JButton dos = new JButton("dos");
JButton tres = new JButton("tres");
JButton cuatro = new JButton("cuatro");

Menu(){
this.setLayout(new GridLayout(2,2));
add(uno);
add(dos);
add(tres);
add(cuatro);

setTitle("Ejemplos de GridLayout");
setSize(400,400);
setVisible(true);
}

public static void main (String []args){
new Ejemplo();
}

}

martes, 13 de marzo de 2007

FlowLayout

El FlowLayout es el método más simple de colocar los componentes dentro de un Panel o un Jpanel en java. Cada uno de los componentes de un panel que se encuentran en FlowLayout se encuentran situados de izquierda a derecha como en una lista, unos a continuación de los otros, saltando hacia abajo cuando no hay espacio suficiente para ese componente.

FlowLayout pertenece a java.awt, pero tambien se puede aplicar a swing, por ejemplo como en este caso a un JPanel.

Un ejemplo de la utilización del FlowLayout en un programa para colocar tres botones en un panel.


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


class Ejemplo extends JFrame {
JButton primero = new JButton("Primero");
JButton anterior = new JButton("Anterior");
JButton siguiente = new JButton("Siguiente");
JButton ultimo = new JButton("Ultimo");

Ejemplo(){
//Añadimos el formato de FlowLayout al JFrame
this.setLayout(new FlowLayout());
//Añadimos componentes
add(primero);
add(anterior);
add(siguiente);
add(ultimo);

setTitle("Ejemplos FlowLayout");
setSize(400,400);
setVisible(true);
}

public static void main (String []args){
new Ejemplo();
}

}

lunes, 12 de marzo de 2007

Añadir scroll a JTextArea

Con este código podras insertar unas barras de scroll en un JTextArea tal y como cualquier editor de texto.

Sea Texto un JTextArea y zonaText un JPanel el que va insertado la caja de texto el ejemplo de como insertar scroll en una caja de texto queda de la siguiente forma.

Código:

//Añadir barras de scroll a la caja de texto principal
JScrollPane textScroll=new JScrollPane(Texto,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
zonaText.add(textScroll);

sábado, 3 de marzo de 2007

JToolBar en java

Ejmplo del uso de una JToolBar. Coloca una barra de herramientas en tu programas en java. Lo más normal es insertar una ImageIcon (icono) que represente la acción que realiza el botón.

Por ejemplo para insertar una imagen en el botón de guardar utilizaremos:
ImageIcon ImagenGuardar=new ImageIcon("guardar.gif");
BGuardar.setIcon(ImagenGuardar);


import javax.swing.*;

class Menu extends JFrame {
//Toolbar
JToolBar TBarra=new JToolBar();
JButton BNuevo=new JButton("N");
JButton BAbrir=new JButton("A");
JButton BCopiar=new JButton("C");
JButton BCortar=new JButton("C");
JButton BPegar=new JButton("P");
JButton BGuardar=new JButton("G");
public Menu() {

//ToolBar
TBarra.add(BNuevo);
TBarra.add(BAbrir);
TBarra.add(BGuardar);
TBarra.addSeparator();
TBarra.add(BCopiar);
TBarra.add(BCortar);
TBarra.add(BPegar);
BGuardar.setToolTipText ("Guardar");
BNuevo.setToolTipText ("Nuevo");
BAbrir.setToolTipText ("Abrir");
BCopiar.setToolTipText ("Copiar");
BCortar.setToolTipText ("BCortar");
BPegar.setToolTipText ("Pegar");


add(TBarra,"North");

TBarra.setFloatable(false);
setTitle("Ejemplos JPopUpMenu");
setSize(800,600);
setVisible(true);
}

public static void main (String []args){
new Menu();
}

}

viernes, 2 de marzo de 2007

JPopUpMenu, Boton dercho

Ejemplo de un JPopUpMenu en java. Con este código se agreaga a una caja de texto
un menú contextual con el botón derecho con los comando básicos de copiar, cortar
y pegar.

import javax.swing.*;

class Menu extends JFrame {
//PopUpMenu Boton derecho
JPopupMenu PopMenu=new JPopupMenu ();
JMenuItem PopCortar=new JMenuItem ("Cortar");
JMenuItem PopCopiar=new JMenuItem ("Copiar");
JMenuItem PopPegar=new JMenuItem ("Pegar");
JMenuItem PopSelTodo=new JMenuItem ("Seleccionar Todo");
JTextArea Texto = new JTexttArea();

public Menu() {

//JPopUpMenu
PopMenu.add (PopCortar);
PopMenu.add(PopCopiar);
PopMenu.add(PopPegar);
add(Texto);
//Establecer PopUpMenu al JFrame
Texto.setComponentPopupMenu (PopMenu);

setTitle("Ejemplos JPopUpMenu");
setSize(800,600);
setVisible(true);
}

public static void main (String []args){
new Menu();
}

}

JMenu en java

Ejemplo de creación de un Menu en java. Con este código realiza un menu en Swing.
Acuérdate que para que los botones funcionen tienes que añadirle algún evento de
acción como por ejemplo evento de acción: MGuardar.addActionListener (this);

import javax.swing.*;


class Menu extends JFrame {
//Elementos del Menu
JMenuBar MBarra=new JMenuBar();
JMenu MArchivo=new JMenu("Archivo");
JMenuItem MNuevo=new JMenuItem("Nuevo");
JMenuItem MAbrir=new JMenuItem("Abrir");
JMenuItem MSalir=new JMenuItem("Salir");
JMenuItem MGuardar=new JMenuItem("Guardar");
JMenuItem MImprimir=new JMenuItem("Imprimir");;
JMenu MEdicion=new JMenu("Edicion");
JMenuItem MCortar=new JMenuItem("Cortar");
JMenuItem MCopiar=new JMenuItem("Copiar");
JMenuItem MPegar=new JMenuItem("Pegar");
JMenuItem MBuscar=new JMenuItem("Buscar");
JMenuItem MRemplazar=new JMenuItem("Reemplazar");
JMenuItem MSelec=new JMenuItem("Seleccionar todo");

public Menu() {
//Menu
MArchivo.add(MNuevo);
MArchivo.add(MAbrir);
MArchivo.add(MSalir);
MArchivo.add(MGuardar);
MArchivo.add(MImprimir);
MArchivo.addSeparator();
MArchivo.add(MSalir);
MEdicion.add(MCortar);
MEdicion.add(MCopiar);
MEdicion.add(MPegar);

MEdicion.addSeparator(); //Pone una linea horizontal de separacion
MEdicion.add(MBuscar);
MEdicion.add(MRemplazar);
MEdicion.addSeparator();
MEdicion.add(MSelec);
MBarra.add(MArchivo);
MBarra.add(MEdicion);
setJMenuBar(MBarra);

setTitle("Ejemplo de JMenu en java");
setSize(800,600);
setVisible(true);
}

public static void main (String []args){
new Menu();
}

}

jueves, 1 de marzo de 2007

Buscar palabras con Tokens

Este código busca el número de concurrencias de una palabra en una cadena de texto determinada con la clase StringTokenizer. Diferencia entre mayúsculas y minúsculas.

//palabra: la palabra que deseas buscar en el texto.
//TextoBusc: texto en el que se deesa buscar la palabra.

void buscarPalbara(palabra,TextoBusc){
int posicion=0;
boolean mayusculas=true;
int numPalabras=0; //Cuenta el número e palabras en el texto
String token="";
//Uso de la clase StringTokenizer
StringTokenizer Busca=new StringTokenizer(TextoBusc,"\"'!., \t\n()[]?-_@");
while(Busca.hasMoreTokens()!=false) {
String palabrilla=Busca.nextToken();
if(mayusculas) //Diferenciando entre maysculas y minsculas
if(palabrilla.equals(palabra))numPalabras++;
else //Sin deferenciar entre maysculas y minsculas
if(palabrilla.toLowerCase().equals(palabra.toLowerCase()))numPalabras++;
}
}

Salir aplicación en java

La mayoría de las veces que cierras la ventana principal en java no se produce una salida de la aplicación como cabe de esperar. Para salir totalmente de la aplicación al cerrar la ventana de tu formulario principal debes introducir el siguiente código en la clase principal del formulario.


//Método para cerrar la ventana
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});

domingo, 18 de febrero de 2007

ImageIcon y Image en applet

Para cargar una Image o una ImageIcon en un applet en java se utiliza la siguiente sentencia:
ImageIcon:
ImageIcon foto =new ImageIcon(getImage(getCodeBase(),"Foto.JPG"));

También puedes cargar bloques de imágenes del siguiente modo img1.jpg, img2.jpg, img*.jpg con este truco, por ejemplo con 10 imágenes.

ImageIcon foto []=new ImageIcon[10];
for(int i=0;i<10;i++){
foto[i]=new ImageIcon(getImage(getCodeBase(),Integer.toString(i)+".JPG"));
}


Para cargar una miagen en un Applet se utiliza el siguiente código:
Image imgJava = getImage(j.getCodeBase(),"java.png");

También se puede realizar el truco anterior para cargar grupos de imágenes.

Icon foto []=new Icon[10];
for(int i=0;i<10;i++){
foto[i]=new getImage(j.getCodeBase(),"img"+Integer.toString(i)+".png");
}

viernes, 16 de febrero de 2007

Leer url en java

Ejemplo de url en java. Este código abre una url de una página web y lee
todo el contenido de la dirección. Las constantes IP y PUERTO son los propios
del proxy en caso de tenerlo, sino tienes proxy elimina o comenta esta parte
del código.

String texto="";
try{
//En caso de tener proxy
System.setProperty("http.proxyHost",IP);
System.setProperty("http.proxyPort",PUERTO);

URL direccion=new URL("http://programasjava.blogspot.com");
InputStreamReader isr=new InputStreamReader(direccion.openStream());
BufferedReader entrada=new BufferedReader(isr);
String linea=null;
while((linea=entrada.readLine())!=null){
texto+=linea +"\n";
}
entrada.close();
}
catch(MalformedURLException mre){
System.out.println(mre);
}
catch(IOException ioe){
System.out.println(ioe);
}

jueves, 15 de febrero de 2007

Abrir archivo de texto

En este ejemplo se explica como abrir un fichero de texto en java, mostrándolo
en mediante un JTextArea de nombre "Texto" y eligiendo el fichero mediante un
JFileChooser.

String Text="";
try{
JFileChooser fc=new JFileChooser(System.getProperty("user.dir"));
fc.showOpenDialog(this);
File Abrir=fc.getSelectedFile(); //Devuelve el File que vamos a leerName
if(Abrir!=null){
Texto.setText("");
FileReader Fichero=new FileReader(Abrir);
BufferedReader leer=new BufferedReader(Fichero);
while((Text=leer.readLine())!=null){
Texto.append(Text+ "\n"); //append Concatena la linea leida
}
leer.close();
}
}
catch(IOException ioe){
System.out.println(ioe);
}

Guardar en fichero de texo

En este ejemplo se explica como guardar en java un fichero de texto, utilizando la clase JFileChooser para elegir el nombre y directorio del archivo.

String Texto = "El Texto que se desea guardar";
try{
//System.getProperty("user.dir") Abre el JFileChooser donde esta el ejecutable
JFileChooser fc=new JFileChooser(System.getProperty("user.dir"));
fc.showSaveDialog(this); //Muestra el diálogo
File Guardar =fc.getSelectedFile();
if(Guardar !=null){
FileWriter Guardx=new FileWriter(Guardar);
Guardx.write(Texto);
Guardx.close(); //Cierra el fichero
}
}
catch(IOException ioe){
System.out.println(ioe); //Muestra por consola los errores
}

domingo, 11 de febrero de 2007

Conectar a una BD en java

Para conectar a una bd en java se realiza la siguiente sentencia:
El siguiente ejemplo está diseñado para una bd con controlador jdbc
y en este caso con una BD access. Para cualquier otra BD solo hay que cambir
el tipo de controlador y la sentencia de conexión.

String baseDatos = 'ejemplo.mdb';
try{
//Cargar Controlador
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//Conectar a la BD
Conexion=DriverManager.getConnection("jdbc:odbc:Driver=
{Microsoft Access Driver (*.mdb)};DBQ="+baseDatos);
}
catch(ClassNotFoundException cnfe){
//No Hay driver
System.out.println(cnfe);
}

viernes, 9 de febrero de 2007

Eclipse

Eclipse es una plataforma de programación muy potente que permite el desarrollo de aplicaciones de muy diversos tipos, como C++, programas Java, php, etc.

Una de las principales herramientas que potencian esta herramienta es el uso de numerosos plug-ins que ayudarán a personalizar eclipse para java o php, etc.

Puedes descargarte eclipse en Eclipse

Lo plugins puedes descargártelos en Plug-ins

miércoles, 7 de febrero de 2007

Entorno programacion netbeans

NetBeans es un entorno de desarrollo de código abierto diseñado para realizar programas en distintas plataformas, haciendo uso de la tecnología Java.

Dispone de numerosos plugins practicos soporte para crear interfaces gráficas de forma visual en java, desarrollo de aplicaciones web (applets, servlets), control de versiones CVS. También permite la programación de aplicaciones de teléfonos móviles J2ME y mucho más.

Netbeans es una solución realmente buena para la programación en java de todas tus aplicaciones.


Descárgatelo desde Netbeans

Java 2 SE Development Kit (JDK)

Kit de desarrollo de la plataforma Java 2.

Nueva versión del kit de desarrollo de la plataforma Java 2, que te permite realizar tus propios programas en java. Esta versión es mucho más estable y rápido que nunca.

Software java

Java Runtime Environment (JRE)

Java Runtime Environment incluye todos los módulos para ejecutar aplicaciones hechas con Java.

Este plugin permite ejecutar programas en java en distintos navegadores
Internet Explorer, Netscape Navigator, Mozilla y Firefox. Podrás visualizar applets java y otro tipo de aplicaciones.

Esta versión de J2RE incluye la versión en inglés, español, etc.

Descárgatelo desde Software Java