JProgressBar

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
Hi,

habe zwar denn großen Forenbeitrag verfolgt zu ProgressBar, nur bin ich nicht weiter schlau geworden.
Ich habe eine Methode, die eine Datei ausließt und anschließend in ein Format Packt. Das kann von parr Sekunden bis hin zu Minuten dauern. Ich kann nicht einschätzen wie lange dieser Vorgang dauert.

Ist es möglich für sowas ein "Ladenbildschirm" zu machen? So das er in etwa selber weis wie weit er ist? Oder wie mache ich son "Knight Rider" style? Also der User soll nichts machen können wären er Arbeitet.

Mfg Oliver
 
S

SlaterB

Gast
> So das er in etwa selber weis wie weit er ist?

super Magie ;)

> Oder wie mache ich son "Knight Rider" style?

Thread/ Timer laufen lassen, alle x Sekunden Zustand ändern (z.B. 1, 2, 3, 4, 5, 4, 3, 2, ..),
repaint() und ne paint-Komponente, die entsprechend malt
 

Marco13

Top Contributor
Neee, das KnightRider-Dingens kriegt man mit einer JProgressBar, wenn man sie auf setIndeterminate(true) setzt... Und das ganze in einem modalen Dialog, dann kann der User nichts machen.
 
T

tuxedo

Gast
Wenn du aus der Datei liest, dann hast du auch zugriff auf deren Dateigröße und darauf, wieviel du schon gelesen hast. Ergo kannst du mit der ProgressBar exakt anzeigen lassen wie weit der Vorgang schon ist.

Wie liest du denn aus der File?

- Alex
 

Titanpharao

Bekanntes Mitglied
Sry das mich so lange nicht gemeldet habe ;-), aber gestern keine Zeit mehr.

Code:
      SAXParser saxParser = factory.newSAXParser();
      saxParser.parse(new File(filename), handler);

XML-Datei...das problem ist nur das ich diese speziell auslese, was mehrfache Schleifendurchläufe benötigt, und das dauert dann so lange, nicht das eigentliche auslesen der Datei.

Hat einer mal zufällig kleines Beispiel mit so einem Modul? :roll:
 

Titanpharao

Bekanntes Mitglied
Hier nochmal...bissel Code.

Code:
	conv.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent evt) {
			if(checktextfield()){
				setPanel(loadTreeProgress());
				loadTree();
			}
		}
	});
	
	panel.add(conv);
	return panel;	
	}
	
	public JPanel loadTreeProgress(){
		panel=new JPanel(new BorderLayout());
		panel.setBackground(Color.WHITE);
		JProgressBar jpb=new JProgressBar();
		jpb.setIndeterminate(true);
		panel.add(jpb);				
		return panel;
	}
	
	private void loadTree(){
		VSXwV parser = new VSXwV();
		long startTime = System.currentTimeMillis();
		parser.parse(xmlff.getText());
		long estimatedTime = System.currentTimeMillis() - startTime;
		System.out.println("Treeerstellen:"+ estimatedTime/1000.0+" Sekunden.");
		xsdschema=parser.handler.xsdschema;
		setPanel(tree());
	}

Ist einfach mal so ausm Programm herraus. Kann es sein, das der Parser die Progressbar "überschreibt". Es wird keine angezeigt, doch wenn ich parser.parse(...) rausnehme dann funktionierts.

Dachte mir das so zeichne ProgressBar, führe parsen durch, wenn parsen fertig zeige Tree.

Oder muss ich das Parsen in Thread stecken / Progressbar?
 

Titanpharao

Bekanntes Mitglied
Hm...habe mich jetz fast 30min von dem zulaufen lassen ;-), war aber schon echt interresant.

Habe jetzt sowas

Code:
	private void loadTree(){
		SwingWorker swingWorker=new SwingWorker(){
			public Object construct(){
				VSXwV parser = new VSXwV();
				parser.parse(xmlff.getText());
				xsdschema=parser.handler.xsdschema;
			}
			public void finished(){
				setPanel(tree());		
			}
		};
		swingWorker.start();
	}

Hoffe mal das ist soweit richtig. Habe das so aus seine Demo mal für mich übersetzt.

Leider spinnt der noch ander new und start Zeile herrum :(
Will <> haben? Aber hatte der doch auch nicht.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben