Witam, korzystając z SWT chciałem zrobić płynne przejście tła widgetu, gdy użytkownika najedzie na niego (mouseenter), a gdy użytkownik opuści element (mouseexit) powrót do braku tła. Tak wygląda mój kod:
public class Hover {
Label lab;
Listener mouseEnter = new Listener() {
public void handleEvent(Event arg0) {
for (int i=0;i<255;i++) {
final int a=i;
Display.getDefault().asyncExec(new Runnable() {
public void run() {
Image img = new Image(Display.getDefault(), 50, 50);
GC gc = new GC(img);
gc.setAlpha(a);
gc.drawImage(SWTResourceManager.getImage(Hover.class,"/hover.png"), 0,0,50,50,0,0,50,50);
gc.dispose();
lab.setBackgroundImage(img);
}
});
}
}
};
Listener mouseExit = new Listener() {
public void handleEvent(Event arg0) {
lab.setBackgroundImage(null);
}
};
public static void main(String[] args) {
Hover h = new Hover();
h.go();
}
public void go() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Test");
shell.setSize(300, 200);
shell.setBackgroundMode(SWT.INHERIT_DEFAULT);
shell.setBackground(SWTResourceManager.getColor(255, 255, 255));
lab = new Label(shell,0);
lab.setBounds(10, 10, 50, 50);
lab.setText("Test");
lab.addListener(SWT.MouseEnter, mouseEnter);
lab.addListener(SWT.MouseExit, mouseExit);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Problem w tym, że to wszystko nie działa tak jak powinno.
a) tekst miga podczas płynnego przejścia
b) gdy kursorem opuścimy widget zanim pętla dojdzie do końca - tło nie jest zmieniane na puste
c) gdy jest więcej widgetów akcje nie dzieją się równolegle, tylko najpierw pierwszy najechany element zmieni swoje tło, potem dopiero drugi, etc. widać to najlepiej w praktyce.
Można cos z tym zrobić? A może to ograniczenia SWT?