Java 刷新swt按钮侦听器中的gui
我有以下课程Java 刷新swt按钮侦听器中的gui,java,button,swt,redraw,styledtext,Java,Button,Swt,Redraw,Styledtext,我有以下课程 为什么总是启用btnDecorate?我想在循环正在处理时禁用该按钮 为什么text.redraw()只在循环结束时起作用?我想在每个角色上依次看到方框 import org.eclipse.swt.swt; 导入org.eclipse.swt.custom.*; 导入org.eclipse.swt.events.SelectionEvent; 导入org.eclipse.swt.events.SelectionListener; 导入org.eclipse.swt.layout
btnDecorate
?我想在循环正在处理时禁用该按钮text.redraw()
只在循环结束时起作用?我想在每个角色上依次看到方框import org.eclipse.swt.swt;
导入org.eclipse.swt.custom.*;
导入org.eclipse.swt.events.SelectionEvent;
导入org.eclipse.swt.events.SelectionListener;
导入org.eclipse.swt.layout.*;
导入org.eclipse.swt.widgets.*;
公共类采样器EFreshStyledText{
公共静态void main(字符串[]args){
最终显示=新显示();
外壳=新外壳(显示);
shell.setLayout(新填充布局(SWT.VERTICAL));
最终按钮BTN装饰=新按钮(外壳,SWT.无);
btnDecorate.setText(“装饰”);
final StyledText text=新StyledText(shell,SWT.NONE);
setText(“ABCDEFGHIJKLMNOPRQ\n1234567890”);
btnDecorate.addSelectionListener(新建SelectionListener(){
@凌驾
公共无效widgetSelected(SelectionEvent事件){
btnDecorate.setEnabled(false);
for(int i=0;i
您不能用SWT编写这样的循环
所有UI操作都发生在单个UI线程上。调用Thread.sleep
会使UI线程处于睡眠状态,而不会发生任何事情
redraw
调用仅请求重新绘制文本,直到下一次运行display.readAndDispatch()
时才会实际发生,因此在循环中重复这样做是行不通的
你要做的是运行循环的第一步一次。然后必须安排在500毫秒后运行下一步,而不阻塞线程。您可以使用Display.timerExec
方法来请求在以后运行代码:
display.timerExec(500, runnable);
其中
runnable
是实现执行下一步的runnable
的类。在代码结束时,您再次调用timerExec
,直到完成所有步骤。您不能用SWT编写这样的循环
所有UI操作都发生在单个UI线程上。调用Thread.sleep
会使UI线程处于睡眠状态,而不会发生任何事情
redraw
调用仅请求重新绘制文本,直到下一次运行display.readAndDispatch()
时才会实际发生,因此在循环中重复这样做是行不通的
你要做的是运行循环的第一步一次。然后必须安排在500毫秒后运行下一步,而不阻塞线程。您可以使用Display.timerExec
方法来请求在以后运行代码:
display.timerExec(500, runnable);
其中runnable
是实现执行下一步的runnable
的类。在代码结束时,再次调用timerExec
,直到完成所有步骤