# JProgressBar wird nicht angezeigt.



## Gilez2k (6. Mrz 2010)

Hallo!
Ich habe bereits viel gegoogelt, aber verstehe die Problembehandlung mit der JProgressBar noch immer nicht so recht...

In meinem Programm möchte ich einen solchen Fortschrittsbalken benutzen.
Zum Beispiel beim Laden vieler Dateien. Zunächst habe ich eine fensterErzeugen() Methode, in der eine JProgressBar und ein zweites JFrame, in dem die progressbar angezeigt werden soll, initialisiert werden:
[Java]
private void fensterErzeugen()
    {
            progressWindow = new JFrame();
        // An dieser Stelle wird das Hauptfenster erzeugt, Methoden ausgelassen

            // JFrame für ProgressBar intitialisieren:
            JFrame progressWindow = new JFrame(" Programmfortschritt ");
            JPanel cP = (JPanel) progressWindow.getContentPane();
            prozentBar = new JProgressBar(1,100);
            cP.add(prozentBar);
            progressWindow.setSize(250,70);
        progressWindow.setLocation((int) fenster.getLocation().getX()+fenster.getWidth()/2-progressWindow.getWidth()/2
                        ,(int) fenster.getLocation().getY()+fenster.getHeight()/2-progressWindow.getHeight()/2);
        progressWindow.setVisible(false);
        prozentBar.setStringPainted(true);
    }[/Java]


Dann habe ich noch eine Methode setzeProzent(int wert):
[Java]

    private void setzeProzent(double wert){
            prozentBar.setValue((int) wert);
            prozentBar.paint(prozentBar.getGraphics());
    }[/Java]


Nun versuche ich beim Öffnen der Dateien das progressWindow mit der JProgressBar anzeigen zu lassen und je nach Fortschritt den Prozentwert zu aktualisieren:

[Java]
    private void dateiOeffnen()
    {
            // Enable multiple selections
            dateiauswahldialog.setMultiSelectionEnabled(true);
            // Show the dialog; wait until dialog is closed
            int ergebnis = dateiauswahldialog.showOpenDialog(fenster);
            if (ergebnis != JFileChooser.APPROVE_OPTION){
                        return;
                }
            // Retrieve the selected files. This method returns empty
            // if multiple-selection mode is not enabled.
        File[] selektierteDateien = dateiauswahldialog.getSelectedFiles();
        before = new Farbbild[selektierteDateien.length];
        if (selektierteDateien.length>10){
                progressWindow.setVisible(true);
                prozentBar.setVisible(true);
        }
        for (int i = 0; i < selektierteDateien.length; i ++){
                before_ = BilddateiManager.ladeBild(selektierteDateien);
                setzeProzent(i/selektierteDateien.length);
        }[/Java]


Wenn ich nun das Programm starte und viele Dateien öffne, dann wird zwar das progressWindow sichtbar, allerdings wird die progressBar nicht gezeichnet. Erst wenn der Ladevorgang beendet ist, wird mir ein fertiger Prozess angezeigt. Woran liegt das/ Wie behebe ich das?
Kann mir jemand erklären?

vielen Dank im Vorraus!_


----------



## eRaaaa (6. Mrz 2010)

Du musst das auf jedenfall in einem seperaten Thread machen ! Schaue dir mal How to Use Progress Bars (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) an sowie die Beispiele dort.
Ein Beispiel: http://java.sun.com/docs/books/tuto...moProject/src/components/ProgressBarDemo.java 

Das Beispiel ist überschaubar, bei konkreten Fragen kannste dich ja nochmal melden ;D


----------



## agentone (6. Mrz 2010)

> prozentBar.paint(prozentBar.getGraphics());



Das ist sehr unschön, da sich die Swing-Komponenten selber zeichnen, mit selber definiertem Graphics-Objekt. Also entweder prozentBar.repaint() oder darauf hoffen, dass sich das Ding bei Aufruf von setValue() selber neu rendert.


----------

