JProgressBar w nowym oknie

0

Cześć witam,

Mam mały problem, mianowicie kod:

package progressbar;

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JProgressBar;

/*
 * @author w.maciejewski
 */
public class Progressbar {
    private static JFrame framka;
    private static JProgressBar progressBar;
 
    public static void main(String[] args) {
         framka=new JFrame();
         framka.setSize(400, 80);
         framka.setVisible(true);
         Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
         framka.setLocation(dim.width/2-framka.getSize().width/2, dim.height/2-framka.getSize().height/2);
         progressBar=new JProgressBar(0,100);
         progressBar.setValue(0);
         progressBar.setStringPainted(true);
         framka.add(progressBar);
         
         for(int i=1;i<1000000000;i++){
             double x=44687*75344;
             System.out.print(x);
             progressBar.setValue((int)(i/100));
         }
         framka.dispose();
    }
}

Działa elegancko , progress bar się przesuwa (to wypisywanie jest żeby na pałę zwolnić żeby coś było widać).

Natomiast jeżeli identyczny kod wklejam do innego programu, który działa w innym oknie, to Frame z progressbarem pozostaje przeźroczysty i nic nie widać na nim.

Czego jest to przyczyna?

jak ktoś będzie bardzo chciał to wkleję cały kod ale to będzie z 1500 linijków :P

pozdrawiam

EDIT: Ustawienie funkcji z progress barem jako dziedziczącej po JDialog i ustawienie Modalności też nie pomaga.....

Jakieś inne może ktoś ma pomysły?

EDIT2: Po kilku poprawkach teraz wyświetla mi się na sam koniec jak już jest uzupełniony O_o

EDIT3. Doszedlem to tego że napisałem Progress Monitora, który też nic nie wyświetla, jest przeźroczysty.help!

1

Poczytaj, kolego, o SwingWorkerze. Jeśli każesz mu jednocześnie wyświetlać ProgressBar i robić obliczenia (choćby inkrementować zmienną), to najpierw on to sobie policzy, a później pokaże pasek. Ten pasek nie będzie mu już potrzebny, więc od razu zniknie.

0

Hmm no dzięki kolego.

Myślałem że można się obejść bez tworzenie klasy dziedziczącej po SwingWorker bo jakoś nie do końca to rozumiem.

No nic będę walczył :)

Dzięki za pomoc

0

Mam tylko jeszcze jedno pytanie. Wszystkie funkcje wykorzystujące SwingWorkera mają iterację progressbara wewnątrz funkcji dziedziczącej po Swing Worker. W takim razie moja klasa która wykonuje wszystko powinna dziedziczyć po SwingWorker?

kod wygląda mniej więcej tak


public JWykonaj(){
//cos tam tworze tworze tworze
     int klatka=0;
     int dlugosc=10000;
     while(klatka<dlugosc){

       //cos sie wykonuje 
       klatka++;
     }
}

to teraz cala ta klasa ma dziedziczyć po SwingWorker a propertychange Listner ma być w klasie która wywołuje tą metodę?

czyli np. tworzę sobie obiekt
jwyk=new JWykonaj(); i tam oprócz całego kodu wykonywania jeszcze nasłuchuje zmiennej klatka i na jej zmianie zmieniam wartość na ProgressBar która wykonuje się w nadpisanej metodzie doinBackground. dobrze to rozumiem?

EDIT:

Dobra udało się ;-)

Dla potomnych: Nie próbujcie słuchać innych zmiennych niż progress nie podziała. Nadpiszcie wewnętrzną zmienną SwingWorker progress i ją napisujcie i jej słuchajcie:-)

pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1