Progress bar

Can someone gives me a simple code example of using a Progress bar while copying a file ?Thanks in advance.
[121 byte] By [pfigueiraa] at [2007-10-1 22:39:36]
# 1

I put in an adjustable delay to slow things down so you can see the progress. Enter a destination file path, select a source file and press copy.

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.util.Hashtable;

import javax.swing.*;

import javax.swing.event.*;

public class CopyProgress

{

JFileChooser fileChooser;

JProgressBar progressBar;

int delay;

public CopyProgress()

{

fileChooser = new JFileChooser(".");

fileChooser.setControlButtonsAreShown(false);

progressBar = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100);

progressBar.setStringPainted(true);

delay = 10;

}

private JPanel getCopyPanel()

{

final JTextField textField = new JTextField(16);

JButton copy = new JButton("copy to file");

copy.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

final File source = fileChooser.getSelectedFile();

final File dest = new File(textField.getText());

copyFile(source, dest);

}

});

// delay in milliseconds with 20 ms increments

final JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 50, 5);

slider.setToolTipText("delay");

slider.setMajorTickSpacing(5);

slider.setPaintTicks(true);

slider.setLabelTable(getLabels());

slider.setPaintLabels(true);

slider.addChangeListener(new ChangeListener()

{

public void stateChanged(ChangeEvent e)

{

delay = 20 * slider.getValue();

}

});

JPanel panel = new JPanel(new GridBagLayout());

GridBagConstraints gbc = new GridBagConstraints();

gbc.insets = new Insets(2,2,2,2);

gbc.weightx = 1.0;

gbc.anchor = gbc.EAST;

panel.add(new JLabel("dest file"), gbc);

gbc.anchor = gbc.WEST;

panel.add(textField, gbc);

gbc.anchor = gbc.CENTER;

panel.add(copy, gbc);

gbc.gridy = 1;

gbc.gridwidth = 3;

gbc.fill = gbc.HORIZONTAL;

panel.add(slider, gbc);

return panel;

}

private Hashtable getLabels()

{

Hashtable ht = new Hashtable();

for(int j = 0; j <= 10; j++)

ht.put(new Integer(5*j), new JLabel(String.valueOf(100*j)));

return ht;

}

private void copyFile(final File src, final File dst)

{

final int length = (int)src.length();

new Thread(new Runnable()

{

int total = 0;

public void run()

{

try

{

InputStream in = new FileInputStream(src);

OutputStream out = new FileOutputStream(dst);

byte[] buffer = new byte[1024];

int len;

while((len = in.read(buffer)) > 0)

{

out.write(buffer, 0, len);

total += len;

progressBar.setValue(total*100/length);

// slow down the action for demonstration

try

{

Thread.sleep(delay);

}

catch(InterruptedException ie)

{

System.err.println("interrupt: " + ie.getMessage());

}

}

in.close();

out.close();

}

catch(IOException ioe)

{

System.err.println("io: " + ioe.getMessage());

}

progressBar.setValue(0);

}

}).start();

}

public static void main(String[] args)

{

CopyProgress cp = new CopyProgress();

JFrame f = new JFrame();

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.getContentPane().add(cp.getCopyPanel(), "North");

f.getContentPane().add(new JScrollPane(cp.fileChooser));

f.getContentPane().add(cp.progressBar, "South");

f.pack();

f.setLocation(200,200);

f.setVisible(true);

}

}

74philipa at 2007-7-13 14:41:55 > top of Java-index,Archived Forums,Java 2 Software Development Kit (J2SE SDK)...