Problem mit JProgressBar

ich_Schmiddy

Mitglied
Hallo!

Ich habe eine Oberfläche, wenn der Benutzer dort einen Knopf drückt, wird eine Methode aufgerufen, die zwei Vektoren miteinander vergleicht. Während dieser Vergleich läuft, soll in einem kleinen neuen Fenster ein JProgressBar den Fortschritt anzeigen.

Wie kann ich das machen? Ich hab schon alles mögliche probiert, aber es klappt einfach nicht..... :(

Danke!
 
Moin!

siehe:

Code:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;

/*
 * Created on 28.02.2004
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class SwingTest extends JFrame {

	private JButton button;
	private JPanel panel;

	private Thread compareThread;

	private ProgressJFrame pFrame;

	private boolean stopped = false;

	public SwingTest() {
		super("Vektor Vergleich");

		panel = new JPanel();
		panel.setSize(400, 300);
		panel.setLayout(new FlowLayout());

		button = new JButton("VektorVergleich");
		button.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				System.out.println("start Vektorvergleich!");
				doIt();
			}

		});

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent evt) {
				stopped = true;
			}
		});

		compareThread = new Thread(new Runnable() {

			public void run() {
					// TODO Auto-generated method stub
	for (int i = 0; i < 100 && !stopped; i++) {
					System.out.println("Val: " + i);
					final int val = i;
					SwingUtilities.invokeLater(new Runnable() {

						public void run() {
							// TODO Auto-generated method stub
							pFrame.updateBar(val);
						}

					});
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

				}
				setVisible(false);
				dispose();
				System.exit(0);
			}
		});

		pFrame = new ProgressJFrame(0, 100, this);

		setSize(400, 300);
		setVisible(true);

	}

	public static void main(String[] args) {
		new SwingTest().doIt();
	}

	/**
	 * 
	 */
	private void doIt() {

		compareThread.start();

	}

	class ProgressJFrame extends JFrame {
		private JPanel pan;
		private JProgressBar bar;

		private int start;
		private int end;

		private JFrame frm;

		public ProgressJFrame(int start, int end, JFrame frm) {
			super("Progress JFrame");
			this.start = start;
			this.end = end;
			this.frm = frm;
			pan = new JPanel();
			pan.setSize(200, 50);
			pan.setLayout(new FlowLayout());

			bar = new JProgressBar();
			bar.setMinimum(start);
			bar.setMaximum(end);

			pan.add(bar);

			getContentPane().add(pan);

			setSize(200, 50);
			Point loc = frm.getLocation();
			loc.setLocation(
				loc.getX() + 400 + 50,
				loc.getLocation().getY());
			setLocation(loc);
			setVisible(true);

		}
		public void updateBar(int val) {
			bar.setValue(val);
		}
	}

}

Gruß Tom
 
Zurück