JXStatusBar é um componente para mostrar mensagens aos usuários. Geralmente, é localizado na parte mais em baixo de uma interface gráfica.
Há dois modos para JXStatusBar relatar informações: atualização manual, ou através de listener API.
JXStatusBar possui o seu próprio gerenciador de layout para organizar os componentes que lhe são adicionados.
JXStatusBar in Action (1)
O meio mais simples e direto de relatar informações na barra de estado JXStatusBar é manualmente, com os métodos setText(String messageText), setLeadingMessage(String messageText) e setTrailingMessage(String messageText).
A diferença entre eles é que setText coloca uma mensagem não transiente no lado direito da barra de estado (status bar), setLeadingMessage coloca a mensagem no canto direito da barra e setTrailingMessage coloca o texto no canto esquerdo.
A figura logo abaixo mostra um cliente de web service modificado do pulicado em NetBeans, Matisse e Web Services - ao invés de um JProgressBar, conta com um JXStatusBar.
JXStatusBar statusBar = new JXStatusBar();
statusBar.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color(0, 0, 153)));
. . .
statusBar.setLeadingMessage("Concluído");
statusBar.setTrailingMessage("");
. . .
statusBar.setLeadingMessage("Erro");
statusBar.setTrailingMessage("RemoteException");
JXStatusBar in Action (2)
A outra forma de publicar informações num JXStatusBar é através de listeners API.
As interfaces envolvidas são MessageListener, MessageSource, ProgressListener e ProgressSource. JXStatusBar implementa MessageListener e MessageSource; classes interessadas em publicar informações num JXStatusBar devem implementar MessageSource, ProgressSource, ou ambas.
MessageSource é fonte de MessageEvent's, e ProgressSource é fonte de ProgressEvent's. A classe auxiliar (helper) MessageSourceSupport é conveniente, pois implementa toda a lógica necessária para utilizar listeners API's, como adicionar/remover ouvintes (listeners) e disparar (fire) eventos.
A classe TableInputModel, do projeto ModelMat, implementa MessageSource e ProgressSource através de MessageSourceSupport.
public class TableInputModel implements TableModel, Serializable, MessageSource, ProgressSource {
...... . .
.....private final MessageSourceSupport messenger = new MessageSourceSupport(this);
.....public void addMessageListener(final MessageListener messageListener) {
..........messenger.addMessageListener(messageListener);
.....}
.....public void removeMessageListener(final MessageListener messageListener) {
..........messenger.removeMessageListener(messageListener);
.....}
.....public MessageListener[] getMessageListeners() {
..........return messenger.getMessageListeners();
.....}
.....public void addProgressListener(final ProgressListener progressListener) {
..........messenger.addProgressListener(progressListener);
.....}
.....public void removeProgressListener(final ProgressListener progressListener) {
..........messenger.removeProgressListener(progressListener);
.....}
.....public ProgressListener[] getProgressListeners() {
..........return messenger.getProgressListeners();
.....}
.....// Executa regressão linear.
.....public void linearRegression() throws CoordinatedNumException, InsufficientDataException {
..........// Manda a mensagem para a barra de estado.
..........messenger.fireMessage("Running...");
..........final LinearRegressionCommand command = new LinearRegressionCommand(matriz);
..........commandManager.setCommand(command);
..........commandManager.execRegression();
..........messenger.fireProgressEnded();
..........messenger.fireMessage("Done.");
.....}
.....// Executa regressão não-linear.
.....public void nonLinearRegression() throws CoordinatedNumException, InsufficientDataException {
..........// Avisa ao ouvinte que uma longa operação teve início.
..........messenger.fireProgressStarted(0, 9);
..........final LinearRegressionCommand command = new LinearRegressionCommand(matriz);
..........// Avisa que houve um incremento no progresso do método.
..........messenger.fireProgressIncremented(2);
..........commandManager.setCommand(command);
..........messenger.fireProgressIncremented(2);
..........commandManager.execRegression();
..........messenger.fireProgressIncremented(6);
..........// Notifica ao ouvinte que a operação terminou.
..........messenger.fireProgressEnded();
.....}
}
A implementação completa da classe TableInputModel está disponível no repositório do projeto ModelMat.
Veja outros componentes SwingX em:
Referências:
Segunda-feira, Janeiro 29, 2007
SwingX - JXStatusBar
Assinar:
Postar comentários (Atom)

0 comentários:
Postar um comentário