Criar uma barra de status

12 respostas
Y

Olá galera.

Estou precisando criar uma barra de status em um sistema, alguém já manipulou algo aparecido ?
Tentei fazer com o JPanel, mais não achei legal, se alguém tiver uma idéia, obrigado.

Até mais.
Abraço.

12 Respostas

F

faz com JDialog.

procura aqui no forum por “JProgressBar”

K

Barra de status ? JProgressBar ? :roll:

Y

keller:
Barra de status ? JProgressBar ? :roll:

É barra de status mesmo, tipo onde fica o nome do usuário que está logado no sistema, a hora e data.

F

ela nao vai ser modal?

hummm… vc quer no próprio painel né? bom… eu faria assim:

colocaria uma JProgressBar… com a propriedade setIndeterminate( true ), pra vc noa te q ficar incrementando o valor dela - a barrinha vai ficar de um lado pro outro.

entao, qdo vc iniciasse um processo onde vc precisa visualizar a jprogress, vc inicia uma thread separada ( pq se for na mesma thread, a animação nao ocorre ), constrói ela e poe setVisible( true ), e no final da thread poe de novo pra setVisible(false) e seta pra null…

é apenas uma idéia :stuck_out_tongue: claro que se vc tiver isso em varios paineis, vc vai fazer um esquema de herança ai…

F

sorry… viajei… nao era isso que vc perguntou…

mas vc pode incrementar sua barra de status, com a ideia acima =D

D

YuriSilva:
keller:
Barra de status ? JProgressBar ? :roll:

É barra de status mesmo, tipo onde fica o nome do usuário que está logado no sistema, a hora e data.

eu uso JToolBar pra fazer esse tipo de barra de status… coloco ela no rodapé do JFrame…

R

O Swing Application Framework (JSR-296) vem com um exemplo de StatusBar bacana que pode ao menos te inspirar a desenvolver uma própria. Se quiser utilizá-la, você pode, pois é disponibilizada sob LGPL. Mas lembre-se que não há suporte e que terá fazer uso da 296. Você a encontra no pacote example

Veja nessa figura um exemplo de uma StatusBar totalmente baseada na do AppFramework que adaptei à minha situação.

_

Eu mesmo fiz uma, porque isso não existe nativo do Java. Eu apenas instancio ela e quando vou adicionar ela no Jframe\JPanel que contenha, por exemplo, BorderLayout, é só fazer “JFrame.add(new StatusBar, BorderLayout.SOUTH);”

O código do StatusBar esta abaixo:

package view.util;

import java.awt.BorderLayout;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

/**
 * <p>StatusBar é um componente para trabalhar com barra de status. Muito similar a barra de estatus
 * de navegadores de internet (browsers). É composto basicamente por um <b>String</b> status, que 
 * indica uma mensagem de processamento e uma barra de progressão (<b>JProgressBar</b>).</p>
 * 
 * <p>Seu principal método é o {@link #setStatus(String, int, boolean)}. Para mais informações veja 
 * a documentação do método.</p>
 * 
 * @author Filipe Luchini
 * */

@SuppressWarnings("serial")
public class StatusBar extends JPanel {
	
	private JProgressBar progressBar;
	private int progress, loader, delay;
	private JLabel statusText;
	private String defaulStatusText;
	
	
	/**
	 * Construtor padrão.
	 * */
	public StatusBar(){
		this.defaulStatusText = "Concluído!";
		this.initStatusBar(false);
	}
	
	
	/**
	 * Construtor no qual pode ser definido o texto de estado padrão da barra de status.
	 * @param defaultStatusText : texto de estado padrão.
	 * */
	public StatusBar(String defaultStatusText){
		this.defaulStatusText = defaultStatusText;
		this.initStatusBar(false);
	}
	
	
	/**
	 * Construtor no qual pode ser definido o texto de estado padrão da barra de status e se, quando
	 * carregar, vai ser contínua ou não.
	 * @param defaultStatusText : texto de estado padrão.
	 * @param indeterminate : deve ser passado <code>true</code> caso você queira que a barra de 
	 * progresso seja contínua.
	 * */
	public StatusBar(String defaultStatusText, boolean indeterminate){
		this.defaulStatusText = defaultStatusText;
		this.initStatusBar(indeterminate);
	}
		
	
	private void initStatusBar(boolean indeterminate){
		this.delay = 7;
		this.progress = 0;
		this.statusText = new JLabel(defaulStatusText);
		this.progressBar = new JProgressBar();
		if(indeterminate){
			this.progressBar.setIndeterminate(true);
		}	
		this.progressBar.setValue(progress);
		this.progressBar.setVisible(false);
		
		this.setLayout(new BorderLayout());
		this.add(statusText, BorderLayout.WEST);
		this.add(progressBar, BorderLayout.EAST);		
	}
	
	
	/**
	 * <p>Informa qual é o status atual do StatusBar</p>
	 * 
	 * @param status = texto que indica o status corrente de processo.
	 * @param load = valor em % (percentual de 0% a 100%) que equivale o processo.
	 * @param loading = caso seja true então será gerado a aminação de x% a y% da barra de progresso.
	 * Onde x% é o ultimo estado da barra de procresso e y% (<b>load</b>) é até onde a barra de progresso deve ser
	 * carregada. Caso seja informado 100% no argumento <b>load</b> então a barra de progresso será
	 * carregada até o fim e finalizada com o status padrão.   
	 * */
	public void setStatus(String status, int load, boolean loading){
		if(load < 0 || load > 100){
			Exception e = new Exception("O valor de procresso (load) deve estar entre 0% e 100%");
			e.printStackTrace();
		}else{
			
			if(load == 100){
				finalizeLoad();
			}else{
				statusText.setText(status);
				progressBar.setValue(progress);
				progressBar.setVisible(true);
				
				if(loading){			
					load(load);
				}else{
					progress = loader;
					progressBar.setValue(progress);
				}				
			}
		}		
	}
	
	
	private void load(int load){
		
		loader = load;
		
		Thread progressive = new Thread(new Runnable() {
			
			@Override
			public void run() {
				for (int i = progress; i < loader; i++) {
					
					progressBar.setValue(i);
					
					try {
						Thread.sleep(delay);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
				}
				progress = loader;
				progressBar.setValue(progress);				
			}
		});
		progressive.start();
	}
	
	/**
	 * <p>Finaliza a prograssão de barra de progresso e posiciona o status de processo no status
	 * padão do {@link StatusBar}.</p>
	 * */
	public void finalizeLoad(){
		
		Thread progressive = new Thread(new Runnable() {
			
			@Override
			public void run() {
				for (int i = progress; i < 100; i++) {
					
					progressBar.setValue(i);
					
					try {
						Thread.sleep(delay);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
				}
				progress = 0;
				progressBar.setValue(progress);
				progressBar.setVisible(false);
				statusText.setText(defaulStatusText);
			}
		});
			
		progressive.start();
	}

	
	public int getProgress() {
		return progress;
	}

	public void setProgress(int progress) {
		if(progress < 0 || progress > 100){
			Exception e = new Exception("O valor de procresso (load) deve estar entre 0% e 100%");
			e.printStackTrace();
		}else{
			this.progress = progress;
			if(progress == 100){
				finalizeLoad();
			}
		}
	}

	
	/**
	 * <p>
	 * Define o tempo de carregamento da barra de progresso.
	 * </p>
	 * @param delay : tempo de atraso (em ms).
	 * */
	public void setDelay(int ms){
		delay = ms;
	}
	
	
	public String getStatusText() {
		return statusText.getText();
	}

	public void setStatusText(String statusText) {
		this.statusText.setText(statusText);
	}

	public String getDefaulStatusText() {
		return defaulStatusText;
	}

	public void setDefaulStatusText(String defaulStatusText) {
		this.defaulStatusText = defaulStatusText;
		this.finalizeLoad();
	}
}
D

Ola boa noite,

Pessoal alguem pode me dar um dica de como usar essa classe StatusBar em meu jFrame do projeto Swing?
Não estou sabendo utilizar, agradeço desde ja.

_

Olá Deciojunior.

Abaixo eu fiz um exemplo de como utilizar a barra de status em um JFrame.

public class Exemplo {
	
	public static void main(String[] args) {
		
		//Cria o Frame.
		JFrame frame = new JFrame("Exemplo");
		
		frame.setSize(500, 500);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//Cria a barra de status.
		StatusBar statusBar = new StatusBar ();
		
		//Adiciona a barra de status no frame.
		frame.add(statusBar, BorderLayout.SOUTH);
		
		//Define um determinado status para a barra de status.
		statusBar.setStatus("Carregando...", 30, true);
		
		
		frame.setVisible(true);
	}

}

Para saber como utilizar os demais métodos da classe StatusBar basta você olhar o JavaDoc dos métodos.

Espero ter ajudado, qualquer coisa da um toque o/

D

Zell;

Obrigado pela ajuda vou seguir sua instrução e informo posteriormente o resultado. Ja queria aproveita para agradecer também a distribuição de conhecimento que o forum permite, com certeza quando estiver apto a ajudar estarei postando.

_

É assim que se fala Deciojunor! o/

Abraço!

Criado 18 de julho de 2007
Ultima resposta 11 de jan. de 2011
Respostas 12
Participantes 7