Java display.async和平滑转换
我有一个自定义小部件,当鼠标悬停时可以更改背景。这是很好的工作,但我想有没有背景和悬停背景之间的平稳过渡。它将与Java display.async和平滑转换,java,multithreading,swt,Java,Multithreading,Swt,我有一个自定义小部件,当鼠标悬停时可以更改背景。这是很好的工作,但我想有没有背景和悬停背景之间的平稳过渡。它将与GC.setAlpha()一起使用,但是: Display.getDefault().asyncExec(new Runnable() { public void run() { for (int i=0;i<255;i++) { setBG(BGHelper(imgHover,i)); //i - alpha
GC.setAlpha()
一起使用,但是:
Display.getDefault().asyncExec(new Runnable() {
public void run() {
for (int i=0;i<255;i++) {
setBG(BGHelper(imgHover,i)); //i - alpha
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
Display.getDefault().asyncExec(新的Runnable()){
公开募捐{
对于(inti=0;i这不起作用,因为只要您在代码中,SWT就不会重新绘制或更改组件
您应该在单独的线程中完成这项工作,并为每次更改调用Display.asyncExec
for (int i = 0; i < 255; i++) {
final int x = i;
Display.getDefault().asyncExec(new Runnable() {
public void run() {
setBG(BGHelper(imgHover,x)); //x - alpha
}
});
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int i=0;i<255;i++){
最终整数x=i;
Display.getDefault().asyncExec(新的Runnable()){
公开募捐{
setBG(bgheloper(imgHover,x));//x-alpha
}
});
试一试{
睡眠(1);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
这无法工作,因为只要您在代码中,SWT就不会重新绘制或更改组件
您应该在单独的线程中完成这项工作,并为每次更改调用Display.asyncExec
for (int i = 0; i < 255; i++) {
final int x = i;
Display.getDefault().asyncExec(new Runnable() {
public void run() {
setBG(BGHelper(imgHover,x)); //x - alpha
}
});
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int i=0;i<255;i++){
最终整数x=i;
Display.getDefault().asyncExec(新的Runnable()){
公开募捐{
setBG(bgheloper(imgHover,x));//x-alpha
}
});
试一试{
睡眠(1);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
您能更详细地描述一下“它不显示平滑过渡”的含义吗?我希望看到从alpha 0到255的平滑过渡(不可见),但当我悬停我的小部件时,需要1*255毫秒,我可以看到完全可见的图像(无步骤)。可运行的
是(最终)由UI线程执行,您正在使用thread.sleep()
暂停该线程。请使用计时器来定期更新alpha。您能否更详细地描述一下“它不显示平滑过渡”的含义?我希望看到从alpha 0到255的平滑过渡(不可见到可见),但当我悬停我的小部件时,它需要1*255毫秒,我可以看到完全可见的图像(无步骤)。Runnable
最终由UI线程执行,您将使用thread.sleep()
。使用计时器来定期更新alpha。