Atualizar JOption - [resolvido usando progressBar]

Como eu posso atualizar o MessageDialog para que nao precise ficar clicando todas as iterações?

import javax.swing.JOptionPane;

public class JOPtion {
	public static void main(String[] args) {
		for (int i = 0; i < 5; i++) {
			JOptionPane.showMessageDialog(null, i);
		}
	}
}

Olá amigo, acredito que não seja possível, precisei fazer isso também e usei um JPanel.

ok vou dar uma olhada

Não é só agendar um timer, fechar o JOptionPane atual e abrir outro com nova mensagem no for :?:

VEja o exemplo do staroski

:arrow: http://javafree.uol.com.br/topic-874110-JDialog-+-Temporizador.html

:thumbup:

no exemplo do staroski aquele código fecha o JOptionPane?? eu pensei em usar thread para atualizar depois de um tempo, mas nao rolou fechar o JOption.

Não cheguei a testar :wink: mas vendo por cima imaginei que sim.

:thumbup:

Tópico movido para o fórum de interface gráfica.

Por que não escrever tudo numa JDialog só?

[code]import javax.swing.JOptionPane;

public class JOption {
public static void main(String[] args) {
StringBuilder valores = new StringBuilder("<html><body>");
for (int i = 0; i < 5; i++) {
valores.append("

").append(i).append("

");
}
valores.append("</body></html>");
JOptionPane.showMessageDialog(null, valores.toString());
}
}
[/code]

eu quero colocar mensagens de um disparador de e-mails, se for 3.000 e-mails serao 3.000 mensagens diferentes imagina o tamanho o JDialog.
precisa atualizar como se fosse uma tela de install

Nesse caso, por que não escrever um Dialog próprio com uma ProgressBar?
Eu no máximo geraria um relatório dos disparos em texto.

3000 itens na tela vai deixar cheio mesmo que você inclua um JTextArea com uma barra de rolagem.

progressbar é dahora ein… mas como vou vincular ele em um for?
no caso nao é um for mas é um decremento de uma variavel.

Tem uma var chamada numeroDeEnvios. E eu decremento essa var em um while, enviando os e-mails e guardando no banco de dados para um relatorio.

achei um codigo legal pra treinar, mas nao consigo fazer ele atualizar, ele só mostra ja o valor pronto… tentei fazer um for e usar uma thread mas… sem sucesso kkk
edit: estava fechando chaves em local errado. VLW

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.border.Border;

public class ProgressSample {
	public static void main(String args[]) throws InterruptedException {
		JFrame f = new JFrame("JProgressBar Sample");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container content = f.getContentPane();
		JProgressBar progressBar = new JProgressBar();
		for (int i = 0; i < 100; i++) {
			progressBar.setValue(i);
			progressBar.setStringPainted(true);
			Thread.sleep(1000);

			Border border = BorderFactory.createTitledBorder("Reading...");
			progressBar.setBorder(border);
			content.add(progressBar, BorderLayout.NORTH);
			f.setSize(300, 100);
			f.setVisible(true);
		}
	}
}

só para compartilhar, é mais ou menos essa a ideia que eu queria.
Ele vai montar banco de dados, ver quantos tem para enviar os e-mails, depois vai mostrar se ele enviou, cadastrou, saiu, etc… vai mostrar o status do que ele esta fazendo só pra mostrar que nao travou.

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.border.Border;

public class ProgressSample {
	public static void main(String args[]) throws InterruptedException {
		JFrame f = new JFrame("JProgressBar Sample");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container content = f.getContentPane();
		JProgressBar progressBar = new JProgressBar();
		JLabel label = new JLabel();
		for (int i = 0; i < 100; i++) {
			label.setText("cadastrando "+i);
			progressBar.setValue(i);
			progressBar.setStringPainted(true);
			Thread.sleep(1000);
			Border border = BorderFactory.createTitledBorder("Reading...");
			progressBar.setBorder(border);
			content.add(progressBar, BorderLayout.NORTH);
			content.add(label,BorderLayout.SOUTH);
			f.setSize(300, 100);
			f.setVisible(true);
		}
	}
}