add generic progress indicator to status bar

This commit is contained in:
servertood
2008-10-20 01:52:56 +00:00
parent 3ad2bc3301
commit 01d514b82d

View File

@@ -0,0 +1,95 @@
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.border.*;
log.debug("task is long running!");
WindowContext context = argObj("windowContext");
Worker worker = argObj("worker");
String message = arg("waitOperation");
Panel statusBar = context.get("/statusBar");
JLabel text = statusBar.getProperty("text");
ProgressBar pbar = statusBar.getProperty("pbar");
Stack messages = statusBar.getProperty("messages");
synchronized (this.getClass())
{
if ( text == null )
{
text = (JLabel)statusBar.getComponent(0);
statusBar.setProperty("text", text);
}
if ( messages == null )
{
messages = new Stack();
statusBar.setProperty("messages", messages);
}
if ( pbar == null )
{
pbar = new ProgressBar();
pbar.setIndeterminate(true);
pbar.setPreferredSize(new java.awt.Dimension(75, 10));
pbar.setBorder(new BevelBorder(BevelBorder.LOWERED));
statusBar.setProperty("pbar", pbar);
}
messages.push(message);
text.setText("Waiting for " + (String)messages.pop());
try
{
statusBar.getComponent(1);
}
catch (Exception e)
{
statusBar.add(pbar, BorderLayout.EAST);
}
statusBar.updateUI();
}
while (!worker.isDone()) {};
synchronized(this.getClass())
{
if ( messages.size() > 0)
{
text.setText("Waiting for " + (String) messages.pop());
}
else
{
text.setText("Ready");
statusBar.remove(1);
statusBar.updateUI();
}
}