Está en la página 1de 7

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; ProgressDemo { String startdir; String patt; JTextArea outarea; JFrame frame; JProgressBar progbar; JLabel fileslab; boolean search_flag; // // // // // // //

public class

directorio de busqueda lo que vamos a buscar output area for file pathnames frame barra de progreso numero de ficheros encontrado 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 aaden 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,ScrollPaneC onstants.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(); } }

Publicado por Ping en 1 comentarios Etiquetas: ejemplos, JProgressBar

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 nmero de Filas y Columnas y los componentes se aaden 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(); } }

Un ejemplo de la utilizacin 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(){ //Aadimos el formato de FlowLayout al JFrame this.setLayout(new FlowLayout()); //Aadimos 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(); } }

El FlowLayout es el mtodo ms 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 continuacin 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 utilizacin 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(){ //Aadimos el formato de FlowLayout al JFrame this.setLayout(new FlowLayout()); //Aadimos 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(); } }

Ejmplo del uso de una JToolBar. Coloca una barra de herramientas en tu programas en java. Lo ms normal es insertar una ImageIcon (icono) que represente la accin que realiza el botn. Por ejemplo para insertar una imagen en el botn 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(); } }

También podría gustarte