Busy-Indicator
Wenn es mal wieder etwas länger dauert, nimm den BusyIndicator. Der BusyIndicator ist dazu da, um dem Anwender zu zeigen, dass eine Anwendung beschäftigt ist. Das könnte eine Sanduhr sein oder bei Win7 der seltsame Ring. Normalerweise benutzt man das für kleine Pausen z.B. 1-2 Sekunden.
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class BusyIndicatorApp {
Shell shell;
Display display;
public BusyIndicatorApp(Display display) {
this.display = display;
shell = new Shell(display);
shell.setText("BusyIndicator");
}
private void createGui() {
shell.setLayout(new FillLayout(SWT.VERTICAL));
final Text text = new Text(shell, SWT.BORDER);
text.setText("Standby");
button.setText("run");
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
System.
out.
println("Button pressed"); BusyIndicator.
showWhile(shell.
getDisplay(),
new Runnable() {
@Override
public void run() {
try {
// Irgend eine lang laufende Operation innerhalb des UI Threads
Thread.
sleep(50000
); //<= Zu lang für Busy Indicator // Der ist maximal für 1-2 Sekunden geeignet, sonst friert
// die Anwendung ein.
text.setText("Operation abgeschlossen");
}
});
super.widgetSelected(e);
}
});
shell.pack();
}
public void run() {
createGui();
shell.open();
while(!shell.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static void main
(String[] args
) { new BusyIndicatorApp(Display.getDefault()).run();
}
}
// Irgend eine lang laufende Operation innerhalb des UI Threads
for(int i = 0; i <= 100; i++) {
if(!display.isDisposed()) {
display.readAndDispatch(); //<Führe aus
}
}
//Ist Widget überhaupt noch da?
if(!text.isDisposed()) {
text.setText("Operation abgeschlossen");
}
Pages: 1 2 3 4 5 6 7