JProgressBar

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo!

hab ein Problem mit der JProgressBar in meinem programm. ich will das man 10 sekunden warten muss. der fortschritt soll mit der progressbar sichtlich sein (also 1 sekunde sind 10%)

Code:
public void Fenster()
	{
		Box box1 = Box.createHorizontalBox();
		Box box2 = Box.createHorizontalBox();
		Box vbox = Box.createVerticalBox();
		vbox.add(box1);
		vbox.add(box2);
		
		JProgressBar pro = new JProgressBar(0);
		pro.setValue(0);
		pro.setStringPainted(true);
		box2.add(pro);
	         
	    long endZeit = System.currentTimeMillis() + 10 * 1000;
	    int zeit = 10;
	    while(endZeit > System.currentTimeMillis())
	    {
	    	++zeit;
	    	pro.setValue(zeit);
	    }
		
		b1 = new JButton("Weiter");
		box1.add(b1);
		add(vbox);

	}

leider geht das irgendwie nicht. das fenster öffnent sich, jedoch ohne JMenu und der oberfläche. vor diesem versuch gings jedoch.

danke im voraus!
 
falls das nicht reichen sollte: hier das ganze programm

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

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.AbstractAction;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.io.File;
import javax.swing.filechooser.FileFilter;
import java.awt.HeadlessException;
import java.net.MalformedURLException;
import java.io.*;
import javax.swing.JComponent;


class StecknControl extends JFrame
{
private JMenuBar bar;
private JMenu m1,m2;
private JMenuItem jm1,jm2,jm3,jm4;
private JFileChooser chooser = new JFileChooser();
private File sf;
private PrintWriter out;
private JFileChooser fc = new JFileChooser();
//public JTextComponent text;
private JTextPane text;
private Container cp;
private JButton b1;
private double dom = 0, louise = 0, mama = 0;
//private int progr = 0;


public StecknControl()
{
Fenstereigenschaften();
Menu();
Fenster();

} // ende StecknControl()


public void Fenstereigenschaften()
{
setSize(400,350);
setLocation(250,200);
setResizable(false);
setIconImage(new ImageIcon("lock.png").getImage());
setTitle("StecknControl");

} // ende Fenstereigenschaften


public void Menu()
{
setJMenuBar(bar = new JMenuBar());

// File
bar.add(m1 = new JMenu("File"));
//m1.setMnemonic(KeyEvent.VK_F);
m1.add(jm1 = new JMenuItem("Neu", new ImageIcon("New24.gif")));
//jm1.setAccelerator(KeyStroke.getKeyStroke('N', Event.CTRL_MASK));

} // ende Menu()


public void Fenster()
{
Box box1 = Box.createHorizontalBox();
Box box2 = Box.createHorizontalBox();
Box vbox = Box.createVerticalBox();
vbox.add(box1);
vbox.add(box2);

JProgressBar pro = new JProgressBar(0);
pro.setValue(0);
pro.setStringPainted(true);
box2.add(pro);

long endZeit = System.currentTimeMillis() + 10 * 1000;
int zeit = 10;
while(endZeit > System.currentTimeMillis())
{
++zeit;
pro.setValue(zeit);
System.out.println(zeit);
}

b1 = new JButton("Weiter");
box1.add(b1);
add(vbox);

}





/*
public void Offnen()
{
int option = chooser.showOpenDialog(text);
if(option == JFileChooser.APPROVE_OPTION)
{
File sf = chooser.getSelectedFile();
try
{
FileReader fr = new FileReader(sf);
text.read(fr,null);
fr.close();
} catch(IOException e) {
System.out.println("Problem beim Öffnen der Datei");
}
}

} // ende Offnen


public void Speichern()
{
String schreiben;

if(fc.showSaveDialog(cp) == 0)
{
sf = fc.getSelectedFile();
try
{
out = new PrintWriter(new FileWriter(sf));
schreiben = text.getText();
out.flush();
out.close();
} catch(Exception e) {
System.out.println("Fehler beim Speichern");
}
}
else
{
JOptionPane.showMessageDialog(cp,"Keine Datei zum Speichern gewählt!",
"SPEICHERN",JOptionPane.ERROR_MESSAGE);
}

} // Speichern()
*/

} // ende StecknControl




public class Steckn
{
public static void main(String[] argv)
{
StecknControl st = new StecknControl();
st.setVisible(true);
}

} // ende Steckn
 
danke!

habs jetzt so gemacht:

Code:
	public void Fenster()
	{
		Box box1 = Box.createHorizontalBox();
		Box box2 = Box.createHorizontalBox();
		Box vbox = Box.createVerticalBox();
		vbox.add(box1);
		vbox.add(box2);
		
		pro = new JProgressBar(0,10);
		pro.setValue(0);
		pro.setStringPainted(true);
		box2.add(pro);

		int max = 5;
		for ( int i = 1; i <= max; i++ )
	    {
	      try { Thread.sleep( 1000 ); } catch ( InterruptedException e ) { }
	      final int j = i;
	      SwingUtilities.invokeLater( new Runnable() {
	            public void run() { pro.setValue( j ); }
	          } );
	    }
	    
		
		b1 = new JButton("Weiter");
		box1.add(b1);
		
		add(vbox);

	}

jedoch zählt es zuerst die 5sec hoch und dann zeigt es erst die GUI an. der balken ist dann auf 100%
was mach ich falsch?
 
Deine for-Schleife musst du in einen eigenen Thread packen. Nur so kann der AWT-Thread weiterarbeiten, während die for ihre Runden dreht.

Code:
new Thread(){
  public void run(){
    for( ... ){ ... }
  }
}.start();
 
danke! so geht zwar das fenster auf, aber die oberfläche ist weg! hab mehrere methoden versucht.

Code:
	public void Fenster()
	{
		Box box1 = Box.createHorizontalBox();
		Box box2 = Box.createHorizontalBox();
		Box vbox = Box.createVerticalBox();
		vbox.add(box1);
		vbox.add(box2);
		
		pro = new JProgressBar(0,10);
		pro.setValue(0);
		pro.setStringPainted(true);
		box2.add(pro);

		
		
		
		new Thread() {
			public void run() {
				for ( int i = 1; i <= max; i++ )
			    {
			      try { Thread.sleep( 1000 ); } catch ( InterruptedException e ) { }
			      final int j = i;
			      pro.setValue(j);
			      //SwingUtilities.invokeLater( new Runnable() {
			      //     public void run() { pro.setValue( j ); }
			      //} );
			    }
			}
		}.start();
	    
		
		b1 = new JButton("Weiter");
		box1.add(b1);
		
		add(vbox);

	}
 
war schon deklariert. hier mal der ganze code:

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.AbstractAction;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.io.File;
import javax.swing.filechooser.FileFilter;
import java.awt.HeadlessException;
import java.net.MalformedURLException;
import java.io.*;
import javax.swing.JComponent;


class StecknControl extends JFrame
{
	private JMenuBar bar;
	private JMenu m1,m2;
	private JMenuItem jm1,jm2,jm3,jm4;
	private JFileChooser chooser = new JFileChooser();
	private File sf;
	private PrintWriter out;
	private JFileChooser fc = new JFileChooser();
	//public JTextComponent text;
	private JTextPane text;
	private Container cp;
	private JButton b1;
	private double dom = 0, louise = 0, mama = 0;
	//private int progr = 0;
	private JProgressBar pro;
	private int max = 5;


	
	
	public StecknControl()
	{
		Fenstereigenschaften();
		Menu();
		Fenster();
		
	} // ende StecknControl()
	
	
	public void Fenstereigenschaften()
	{
		setSize(400,350);
		setLocation(250,200);
		setResizable(false);
		setIconImage(new ImageIcon("lock.png").getImage());
		setTitle("StecknControl");
		
	} // ende Fenstereigenschaften
	
	
	public void Menu()
	{
		setJMenuBar(bar = new JMenuBar());
		
		// File
		bar.add(m1 = new JMenu("File"));
		//m1.setMnemonic(KeyEvent.VK_F);
			m1.add(jm1 = new JMenuItem("Neu", new ImageIcon("New24.gif")));
			//jm1.setAccelerator(KeyStroke.getKeyStroke('N', Event.CTRL_MASK));
		
	} // ende Menu()
	

	
	
	public void Fenster()
	{
		Box box1 = Box.createHorizontalBox();
		Box box2 = Box.createHorizontalBox();
		Box vbox = Box.createVerticalBox();
		vbox.add(box1);
		vbox.add(box2);
		
		pro = new JProgressBar(0,10);
		pro.setValue(0);
		pro.setStringPainted(true);
		box2.add(pro);

		
		
		
		new Thread() {
			public void run() {
				for ( int i = 1; i <= max; i++ )
			    {
			      try { Thread.sleep( 1000 ); } catch ( InterruptedException e ) { }
			      final int j = i;
			      pro.setValue(j);
			      //SwingUtilities.invokeLater( new Runnable() {
			      //     public void run() { pro.setValue( j ); }
			      //} );
			    }
			}
		}.start();
	    
		
		b1 = new JButton("Weiter");
		box1.add(b1);
		
		add(vbox);

	}
	
	
	
	
	
	/*
	public void Offnen()
	{
		int option = chooser.showOpenDialog(text);
		if(option == JFileChooser.APPROVE_OPTION)
		{
			File sf = chooser.getSelectedFile();
			try
			{
				FileReader fr = new FileReader(sf);
				text.read(fr,null);
				fr.close();
			} catch(IOException e) {
				System.out.println("Problem beim Öffnen der Datei");
			}
		}
		
	} // ende Offnen
	
	
	public void Speichern()
	{
		String schreiben;
		
		if(fc.showSaveDialog(cp) == 0)
		{
			sf = fc.getSelectedFile();
			try
			{
				out = new PrintWriter(new FileWriter(sf));
				schreiben = text.getText();
				out.flush();
				out.close();
			} catch(Exception e) {
				System.out.println("Fehler beim Speichern");
			}
		}
		else
		{
			JOptionPane.showMessageDialog(cp,"Keine Datei zum Speichern gewählt!",
		    "SPEICHERN",JOptionPane.ERROR_MESSAGE);
		}
		
	} // Speichern()
	 */
	
} // ende StecknControl




public class Steckn 
{
	public static void main(String[] argv)
	{
		StecknControl st = new StecknControl();
		st.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		st.setVisible(true);
	}
	
} // ende Steckn
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben