Problema num JDialog com JProgressBar() e JLabel() [RESOLVIDO]

10 respostas
G

ola a todos:

Fiz um jDialog pra processar uma regua.
Dae, outra classe utiliza essa pra processar. Ate ae tudo bem. Acontece porem q mando incrementar a regua, ate faz, nao nao atualiza, e se eu colocar um JOptionPane.showMessageDialog(…) no incremento, dae atualiza. segue as classes pra ver se esta faltando alguma coisa:

package SystLib;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JProgressBar;

public class SystPro extends JDialog implements ActionListener {
    private JLabel       oTxtPro;
    private JProgressBar oProgress;
    private int          nMaxPro;
    private JButton      oProCan;
    private ImageIcon    oBmpCan;

    public SystPro(){
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        setTitle("Aguarde.");
        setResizable(false);
        setModal(true);
        setSize(350,120);
        getContentPane().setLayout(null);

        oTxtPro = new JLabel("Processando...") ;
        oTxtPro.setFont( new Font("Tahoma", 0 , 12));
        oTxtPro.setBounds(10,5,310,25);
       
        oProgress = new JProgressBar() ;
        oProgress.setValue(0);
        oProgress.setStringPainted(true);
        oProgress.setBounds(10,30,320,20);

        oProCan = new JButton("Cancelar");
        oBmpCan = new ImageIcon(getClass().getResource("/SystRec/cross.png")) ;
        oProCan.setIcon(oBmpCan);
        oProCan.setBounds(115,60,110,30);

        /////////////////// Registra Obj q vao sofres Acao //////////////
        oProCan.addActionListener(this);
        /////////////////////////////////////////////////////////////////

        getContentPane().add(oTxtPro);
        getContentPane().add(oProgress);
        getContentPane().add(oProCan);

        Dimension oScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((oScreenSize.width - 350) / 2, (oScreenSize.height - 120) / 2, 350, 120);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == oProCan) {
            EndRegua();
        }
    }

    public void SetRegua(int Max, String Titulo, String Texto) {
        nMaxPro  = Max;
        oProgress.setMinimum(0);
        oProgress.setMaximum(Max);
        setTitle(Titulo);
        oTxtPro.setText(Texto);
    }

    public void IncRegua(String Texto) {
        oProgress.setValue( oProgress.getValue() +1 );
        oTxtPro.setText(Texto);

        //JOptionPane.showMessageDialog(null, Texto );  // com essa linha, atualiza ; sem ela, nao atualiza.

        if ( oProgress.getValue() >= nMaxPro)
            EndRegua();
    }

    public void TextRegua(String Texto) {
        oTxtPro.setText(Texto);
    }

    public void EndRegua() {
        this.dispose();
    }

}

essa classe chama pra ficar mostrando a regua, inquanto processa:

package SystLog;

import SystLib.SystLib;
import SystLib.SystMnu;
import SystLib.SystPro;
import SystRmt.SystRmt;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class SystLog extends SystPro {

    public SystLog() {
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowActivated( WindowEvent evt) {
                SystLogOnInit(evt);
            }
        });
    }

    public void SystLogOnInit( WindowEvent evt ) {

        SetRegua( 10 , "Aguarde", "fazendo chegagem..." );
        for ( int x=0 ; x < 10 ; x++ ) {
            IncRegua( ""+x );
        }
        EndRegua();
    }

}

desde ja agradeco: MUITO OBRIGADO !!!

10 Respostas

G

aaaaaaaaaaaa… esqueci de falar: qdo a segunda chama a primiera, essa eh executada duas veze, percebi isso na mensagem so incregua(), q mostra
1,
depois 1, 2, 3, 4, 5, 6, 7, 8, 9 e 10
dae, continua a anterior: 2, 3, 4, 5, 6, 7, 8, 9, e 10

pq sera executa duas vezes ? e, tambem, pq nao atualiza ? soh atuliza com o messag !

obrigado !

G

essa eh dificel, eh ? rs

G

alguem poderia ajudar ???

obrigado !!!

G

alguem q queira ajudar, com qquer dica ???

obrigado !!!

lina

Oi,

Então… na realidade a barra atualiza só que muito rapido!

você precisa fazer isso ó.:

Classe SystPro

1 - Criar uma variavel do tipo Rectangle

private Rectangle   io_rt_andamento_status;

2 - No seu método SetRegua inicializa ela.:

io_rt_andamento_status = oProgress.getBounds(); io_rt_andamento_status.x = 0; io_rt_andamento_status.y = 0;

3 - No seu método IncRegua, você utiliza ela.:

oProgress.setValue( oProgress.getValue() +1 ); oProgress.paintImmediately(io_rt_andamento_status); oTxtPro.setText(Texto);

Classe SystLog

No método SystLogOnInit abaixo do for, coloque.:

synchronized (this) { try { this.wait(500); } catch (InterruptedException e) { e.printStackTrace(); } }

Tchauzin!

G

muitissimo obrigado pela dica…
desculpe dizer, mas nao atuzaliza nao (rsss), nem rapido; soh atualiza qdo deixo o JOptionPane.showMessageDialog no IncRegua()… mas ta tudo otimo… vou fazer o q disse na sua dica, e depois posto o resultado !

nao sabe como estava esperando uma ajuda, ate desesperado ja…rss

outro “Tchauzin” pra vc tambem, e, novamente: MUITO OBRIGADO !

lina

giba_f:
muitissimo obrigado pela dica…
desculpe dizer, mas nao atuzaliza nao (rsss), nem rapido; soh atualiza qdo deixo o JOptionPane.showMessageDialog no IncRegua()… mas ta tudo otimo… vou fazer o q disse na sua dica, e depois posto o resultado !

nao sabe como estava esperando uma ajuda, ate desesperado ja…rss

outro “Tchauzin” pra vc tambem, e, novamente: MUITO OBRIGADO !

Oi,

Tudo bem! se funcionar coloca o resultado!

Tchauzin!

G

nossssssssssssssssssaaaaaaaaaaaaaaaaaaaa !!!

funcionou q foi uma maravinha !

bom di mais !!!

perfeito sua dica !!!

muitiiiiiiiiiiiiiiiiiiiiiiisssssssssssiiiiiiiiiiiiiimoooo obrigado !!!

“Tchauzin”…rs

lina

Oi,

Coloque [RESOLVIDO] no seu tópico, ok?

Tchauzin!

G

sim…sim…sim… desculpe…

ja coloquei…

e, mais uma vez, MUITO AGREDECIDO messsssmmoooo !!!

bye

Criado 10 de agosto de 2009
Ultima resposta 11 de ago. de 2009
Respostas 10
Participantes 2