hallo,
ich möchte eine animation machen (sowas wie die expandbar nur an der aussenseite der shell) in der sich die shell vergrößert.
mein problem ist aber dass die animation nicht aktualisiert wird.
das heisst, die ausgabe in die console stimmt, aber die aktualisierung der shell wird erst durchgeführt, wenn die animation fertig ist...
ich habe den code in einen display.sync runnable ausgelagert und änder die größe der shell per setsize
danach rufe ich redraw auf.
wie kann ich das korrekt lösen? (async passiert das selbe!)
im prinzip sieht das so aus:
ich möchte eine animation machen (sowas wie die expandbar nur an der aussenseite der shell) in der sich die shell vergrößert.
mein problem ist aber dass die animation nicht aktualisiert wird.
das heisst, die ausgabe in die console stimmt, aber die aktualisierung der shell wird erst durchgeführt, wenn die animation fertig ist...
ich habe den code in einen display.sync runnable ausgelagert und änder die größe der shell per setsize
danach rufe ich redraw auf.
wie kann ich das korrekt lösen? (async passiert das selbe!)
im prinzip sieht das so aus:
Java:
import java.util.Random;
public class FunnyShell extends Shell {
private static Random r = new Random(System.currentTimeMillis());
/**
* Launch the application.
*
* @param args
*/
public static void main(String args[]) {
try {
Display display = Display.getDefault();
FunnyShell shell = new FunnyShell(display);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the shell.
*
* @param display
*/
public FunnyShell(Display display) {
super(display, SWT.CLOSE | SWT.TITLE | SWT.BORDER);
createContents();
}
/**
* Create contents of the shell.
*/
protected void createContents() {
setText("SWT Application");
setSize(450, 300);
getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
while (!isDisposed()) {
try {
Thread.sleep(1000);
setSize(200 + r.nextInt(800), 200 + r.nextInt(600));
redraw();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}
Zuletzt bearbeitet: