Atualizar JOption - [resolvido usando progressBar]

11 respostas
denisspitfire

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);
		}
	}
}

11 Respostas

D

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

denisspitfire

ok vou dar uma olhada

InicianteJavaHenriqu

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:

denisspitfire

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.

InicianteJavaHenriqu

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

:thumbup:

ViniGodoy

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

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

import javax.swing.JOptionPane;

public class JOption {
    public static void main(String[] args) {
        StringBuilder valores = new StringBuilder("&lt;html&gt;&lt;body&gt;&quot;);
        for (int i = 0; i &lt; 5; i++) {
            valores.append(&quot;<p>").append(i).append("</p>");
        }
        valores.append("&lt;/body&gt;&lt;/html&gt;");
        JOptionPane.showMessageDialog(null, valores.toString());
    }
}
denisspitfire

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

ViniGodoy

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.

denisspitfire

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.

denisspitfire

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);
		}
	}
}
denisspitfire

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);
		}
	}
}
Criado 7 de maio de 2012
Ultima resposta 7 de mai. de 2012
Respostas 11
Participantes 4