Usando jprogressbar?

8 respostas
J

tenho uma pequena aplicação que recebe um arquivo e envia por email o arquivo.
peguei o tamanho do arquivo, em bytes, pelo metodo length();

ai criei, pelo eclipse, o jprogressBar e setei assim...
private JProgressBar getProgressBar() {
		if (progressBar == null) {
			progressBar = new JProgressBar();
			progressBar.setBounds(new Rectangle(18, 459, 419, 25));
			progressBar.setStringPainted(true);
			progressBar.setMinimum(0);
			progressBar.setMaximum((int)tamanho);
			
		}
		return progressBar;
	}
onde tamanho é o tamanho em bytes do arquivo selecionado. mas o progress bar nao sai do canto...

vi alguns tutoriais na net e aqui no guj mas nao consegui adaptar ao meu problema...
alguem pode me ajudar???

8 Respostas

mchiareli

vc diz que a barra não vai aumentando?

para isso vc precisa chamar o metodo

progressBar.setValue(value)

com isso , levando em consideração o valor maximo que seu progressBar suporta ele vai preenchendo a barra.

se vc quiser exibir uma mensagem na barra basta fazer:

progressBar.setString(mensagem)

para esta mensagem funcionar antes vc precisar setar a propriedade

progressBar.setStringPainted(true)
J

mchiareli:
vc diz que a barra não vai aumentando?

para isso vc precisa chamar o metodo

progressBar.setValue(value)

com isso , levando em consideração o valor maximo que seu progressBar suporta ele vai preenchendo a barra.

se vc quiser exibir uma mensagem na barra basta fazer:

progressBar.setString(mensagem)

para esta mensagem funcionar antes vc precisar setar a propriedade

progressBar.setStringPainted(true)


obrigado pela resposta :slight_smile:
mas onde eu colocaria esse setValue??? e que valor é o value??? pq, como eu disse, meu progress é para envio de mensagem… logo esse progres vai aumentando de acordo com o anexo sendo sendo enviado…

Gobain

Aproveitando esta dúvida, eu não preciso usar uma thread pra conseguir preencher a barra com os valores do progresso?

ViniGodoy

Quem é que faz o envio do arquivo, é você?

Nesse caso, você deve estar mandando alguns bytes de cada vez, certo? Conte quantos bytes está enviando e chame o setValue com esse número de bytes.

Você vai precisar chamar o setValue numa thread separada, como descrito nesse tutorial:
http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html

J

ViniGodoy:
Quem é que faz o envio do arquivo, é você?

Nesse caso, você deve estar mandando alguns bytes de cada vez, certo? Conte quantos bytes está enviando e chame o setValue com esse número de bytes.

Você vai precisar chamar o setValue numa thread separada, como descrito nesse tutorial:
http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html


desculpa mas ainda nao entendi bem o que vc quer dizer…
como assim quem esta enviando?
incilamente usei as classes do java, mas vendo aqui no forum, vi gente falando do jakarta e resolvi usar… uso a classe MultiPartemail dela para enviar o anexo… clico no botao ENVIAR e ele envia para a pessoa… porem dependendo do tamanho do anexo, a aplicação fica um tempao parada, ai queria colocar o progressbar para a pessoa visualizar o andamento…
alguem poderia me ajudar?(o programa ja esta enviando normal o anexo e a mensagem) preciso apensas aprender a configurar o progressBar

T

O JavaMail (que é a biblioteca sobre a qual o Jakarta Commons Email se baseia) não tem nenhum evento que permita a você saber a porcentagem da mensagem que já foi enviada.

O que você pode fazer, para seu chefe não lhe encher o saco, é setar o JProgressBar (setIndeterminate (true)), para ele mostrar uma barra balançando de um lado para outro. Não se esqueça de alterar o cursor para a ampulheta ou relógio também.

R

thingol:
O JavaMail (que é a biblioteca sobre a qual o Jakarta Commons Email se baseia) não tem nenhum evento que permita a você saber a porcentagem da mensagem que já foi enviada.

O que você pode fazer, para seu chefe não lhe encher o saco, é setar o JProgressBar (setIndeterminate (true)), para ele mostrar uma barra balançando de um lado para outro. Não se esqueça de alterar o cursor para a ampulheta ou relógio também.


thingol.e eu setaria onde?? na função get que criou o progressBar ou no actionPerformed do botao enviar??? e esse setIndetermined pararia de ficar andando de um lado pro outro quando a mensagem terminasse???

um cara, no javafree, fez um programa que envia mensagem…ele criou o progressbar que anda direitinho conforme a mensagem foi enviada…tentei adaptar ao meu mas como ele nao usou ojakarta, ficou dificil pra mim(e ele tb nao responde as PMs :frowning: )… mas no caso dele, ele tambem nao precisou do javamail??

G

eu crei um progressbar tranquilo , com esse codigo

public class MeuProgressBar extends JPanel {

JProgressBar pbar;
 JFrame frame = new JFrame();

static final int MY_MINIMUM = 0;
static final int MY_MAXIMUM = 100;
public MeuProgressBar() {

pbar = new JProgressBar();

pbar.setMinimum(MY_MINIMUM);

pbar.setMaximum(MY_MAXIMUM);

pbar.setStringPainted(true);

pbar.setString(aqui);

this.add(pbar);

}//public…
public void atualizar(int novovalor) {

pbar.setValue(novovalor);

}

public void criarProgress(String msg){

final SwingProgressBarExample it = new SwingProgressBarExample();

JFrame frame = new JFrame(msg);
frame.setTitle(msg);
frame.setDefaultCloseOperation(frame.DISPOSE_ON_CLOSE);
frame.setAlwaysOnTop(true);
frame.setLocationRelativeTo(null);
frame.setSize(100,20);
frame.setContentPane(it);
frame.pack();
frame.setVisible(true);
//   JDialog dlg = new JDialog(frame, msg, true);

//   JDialog dlg = new JDialog();

//   dlg.setModal(true);

//   dlg.setTitle(msg);

//   dlg.setSize(100,20);

//   dlg.setContentPane(it);

//   dlg.pack();

//   dlg.setVisible(true);

//
for (int i = MY_MINIMUM; i <= MY_MAXIMUM; i++) {

  final int percent = i;

  System.out.println(i);

  try {
      
    it.updateBar(percent);

    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        it.updateBar(percent);
      }
    });

    Thread.sleep(10);

  } catch (InterruptedException e) {

  }

}

}//lkj

mas eu criei UM jframe com a intenção é q q quando eu clicar em SALVAR…
ele chama a classe MeuProgressBar e cria o JProgressBar, mas o problema que quando eu clico em salvar
ele chama o JpROGRESSBAR , mas NAO fica desenhando passo a passo na tela.
mas quando eu executo a classe MeuProgressBar separadamente, ele excecuta blz

podem me ajudar

Criado 3 de julho de 2007
Ultima resposta 27 de jul. de 2010
Respostas 8
Participantes 7