Status der Berechnung per JProgress anzeigen lassen

Status
Nicht offen für weitere Antworten.

gondor

Bekanntes Mitglied
hallo!

kann man folgendes realisieren:

ich drücke einen button, der mir eine methode aufruft, in der eine lange berechnung ausgeführt wird. um dem user zu zeigen wie weit seine ausführung der berechnung ist, würde ich gerne dieses per jProgressBar anzeigen lassen. also eine art: status-anzeige.

wie kann ich das machen? zumal die berechnungszeiten doch immer unterschiedlich ist...

gondor(..)
 

thE_29

Top Contributor
du könntest den ProgressBar sagen er soll sich hin und her bewegen (knight rider mäßig)

setIndeterminate(boolean newValue)
 

Isaac

Bekanntes Mitglied
Du must schon eine Ahnung haben wie weit der Vorgang wirklich ist. Bei dem Laden einer Datei z.b. Verhältniss zwischen gelesenen Bytes und Gesammtgrösse. Bei Berechnungen z.b. die Anzahl der Teilergebnisse etc.

Ansonsten halt wie schon gesagt, Knight Rider mässig.
 

gondor

Bekanntes Mitglied
@thE_29

thx!

@Isaac

ok... für die berechnung habe ich mir das 'knight-rider' überlegt.

aber das laden von dateien habe ich auch in meiner applikation. wie hast du es denn da realisiert?
haste evtl. nen stück code ;)

gondor(..)
 

Thorsten

Mitglied
Man bastelt sich dafür eine kleine Status-Klasse, wie ich:

Code:
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.JPanel;

public class Status extends JFrame
{
	private int Width = 160;
	private int Height = 70;
	public ths my;
	private GridBagLayout Aufbau;
	private GridBagConstraints gbc;
	private JPanel Inhalt;
	private JProgressBar Bar;
	
	public Status(int MaxStatus)
	{
		//Titel des Fensters
		super("Batchbetrieb! Bitte warten...");
		
		my = new ths();
				
		//Fenster Größe festlegen
		my.WindowSize(Width,Height);
		
		//Layout Manager erzeugen
		Aufbau = new GridBagLayout();
		
		Inhalt = new JPanel(); //Contentbereich erstellen
		Inhalt.setLayout(Aufbau); //Mit Layout verbinden
		setContentPane(Inhalt); //Mit dem Fenster verbinden
		
		//------------------
		//Bar erstellen
		//------------------
							
		//Bar erstellen
		Bar = new JProgressBar(0, MaxStatus);		
		Bar.setToolTipText("Fortschritt");
		Bar.setStringPainted(true);		
					
		//Layout Einstellungen
		gbc = my.makegbc(0, 0, 1, 1); //Größe + Position
		gbc.fill = GridBagConstraints.BOTH; //Verhalten bei Änderung des Windows
		Aufbau.setConstraints(Bar, gbc); //Verbinden
		Inhalt.add(Bar); //Verbinden
	}

	public void setStatus(int Wert)
	{
		Bar.setValue(Wert);
	}

	public void Anzeigen()
	{
		my.setScreen(getToolkit().getScreenSize());
		setSize(my.getWidth(), my.getHeight());
		setLocation(my.getMitte());
		setResizable(false);
		setVisible(true);
	}
}

Dann benötigst du ein paar Methoden aus meiner Tool-Klasse (ths):
Code:
import javax.swing.*;
import java.awt.*;
import java.util.*;

public class ths extends JFrame
{   
    //Diese Maße werden zunächst für alle Fenster genommen.
    //Nur für den Fall, dass die Fenster diese Werte nicht
    //überschreiben.
    private int Width = 450;
    private int Height = 500;
    
    //Bildschirmauflösung. Sie wird einmal hinterlegt. Daher
    //eine static Varibale -> wird nicht mit instanziert.
    private static Dimension Screen;
    
    //Wurde die Screengröße schon gesetzt? Wichtig, um feststellen
    //zu können, ob die Mittelpunktskoordinaten berechnet werden
    //können.
    private static boolean ScreenSet = false;
    
    //Mittelpunktskoordinaten des Fensters. 
    private Point Mitte = new Point();
    
    //Wurden die Koordinaten schon berechnet?
    private boolean MitteSet = false;
    
    //Methode um Elemente der Fenster sehr easy zu verwalten.
    //Es wird die Position (x, y) und die Größe in x und y
    //Richtung übermittelt. Die Einheiten dieser Daten sind
    //NICHT Pixel!!! Es gibt keine Einheit! Die Daten sind
    //relativ zu den anderen Elementen. Eine Breite / Länge
    //von 2 bedeutet, dass dieses Element die Breite von
    //zwei anderen Elementen besitzt.
    public GridBagConstraints makegbc(int x, int y, int width, int height)
    {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        
        //Der Abstand zu allen Seiten; Einheit: Pixel
        gbc.insets = new Insets(2, 2, 2, 2);
                
        return gbc;
    }
    
    public void WindowSize(int width, int height)
    {
        Width = width;
        Height = height;        
    }   
    
    public int getWidth()
    {
        return Width;
    }
    
    public int getHeight()
    {
        return Height;
    }
    
    //Screengröße schreiben
    public void setScreen(Dimension Monitor)
    {
        Screen = Monitor;
        ScreenSet = true;
    }
    
    //Die Mitte für das Fenster berechnen und schreiben.
    public void makeMitte()
    {           
        Mitte.setLocation((Screen.width / 2) - (Width / 2), (Screen.height / 2) - (Height / 2));
        MitteSet = true;
    }
    
    //Die Mitte zurückgeben
    public Point getMitte()
    {
        //Wenn die Screengröße noch nicht bekannt ist, wird dieses
        //Fenster an die Position 0, 0 gelegt.
        if (ScreenSet == false)
        {
            Mitte.setLocation(0, 0);
            return Mitte.getLocation();
        }
        else
        {
            //Die Screengröße ist also schon bekannt. Wurde
            //die Mitte berechnet?
            if (MitteSet == true)
            {
                //Ja. Mitte zurück geben!
                return Mitte.getLocation();
            }
            else
            {
                //Nein. Die Mitte muss erst noch berechnet werden.
                makeMitte();
                
                //Die Mitte zurück geben.
                return Mitte.getLocation();
            }
        }
    }
}

Dann viel Spaß :)
 

Thorsten

Mitglied
Okay, nun die Anwendung (der andere Beitrag war schon lang genug):
(Ich denke mal, dass es ohne Erklärung genügt)


Code:
Status myStatus = new Status(files.size());
myStatus.Anzeigen();

for (int file = 0; file < files.size(); file++)
{
    //mach was
    //[...]
    myStatus.setStatus(file);
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
beatles Swing JTextField - Game Status aus Array anzeigen AWT, Swing, JavaFX & SWT 3
F Java FX AudioPlayer: wie reagiert man auf den Status "Musik abgespielt" AWT, Swing, JavaFX & SWT 2
O Jcheckbox Status nachträglich abfragen AWT, Swing, JavaFX & SWT 2
F Status von RadioButtons abfragen AWT, Swing, JavaFX & SWT 5
D Fibonacci-Folge status Leiste. AWT, Swing, JavaFX & SWT 16
G Status(minimiert, maximi) eines JInternakframes herausfinden AWT, Swing, JavaFX & SWT 3
G JInternalFrame Fenster Status von Icon nach Normal? AWT, Swing, JavaFX & SWT 5
T 2 JScrollPanes auf den selben Status setzten AWT, Swing, JavaFX & SWT 8
A JTree: Status des Baums speichern? AWT, Swing, JavaFX & SWT 15
D CheckBox ändert Status nur, wenn sie FocusOwner ist AWT, Swing, JavaFX & SWT 2
H JTabel - RowFilter Daten für Berechnung filtern AWT, Swing, JavaFX & SWT 6
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
M Graphics2D: drawString Berechnung AWT, Swing, JavaFX & SWT 1
D Swing Bestimmte Berechnung von Spalten durchführen und dann die Zeilen nach bestimmten Kriterien einfärben AWT, Swing, JavaFX & SWT 5
R Berechnung von Animationen AWT, Swing, JavaFX & SWT 7
B ProgressBar während Berechnung AWT, Swing, JavaFX & SWT 4
E Buttons während einer Berechnung deaktivieren AWT, Swing, JavaFX & SWT 6
S Berechnung abbrechen mit Button AWT, Swing, JavaFX & SWT 6
P Berechnung Kurvendiskussion AWT, Swing, JavaFX & SWT 6
S int-berechnung des RGB-Wertes ohne neue Instanz? AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben