我遇到了 SWT(标准小部件工具包)和重绘的问题。基本上我希望在单击按钮时发生一些事情,例如出现新元素。为简单起见,此处为文本。
但是,当我单击按钮时,没有任何反应,没有元素出现,也没有触发 PaintEvent。当我调整窗口大小时,突然所有元素都在那里(因为这会触发paintEvent/redrawing)。
文档和博客文章告诉我,每当需要重绘某些东西时都会触发一个绘制事件。我认为向应用程序添加新元素将属于该类别。
所以问题是:我在这里做错了吗?我应该手动调用 layout()/redraw() 来触发重绘吗?这对我来说似乎很乏味,据我了解,在大多数情况下,SWT 会为我处理这些。
哦,我正在使用 SWT 4.2.2 运行 Linux x64。但是我们几乎可以在任何平台上(以及旧的 SWT 3.7)上使用它。
这是我的小示例代码:
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
public class MainExample {
public static void createText(Shell shell) {
Text text = new Text(shell, SWT.SINGLE);
text.setText("here is some fancy text");
}
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new Shell (display);
Button button = new Button(shell, SWT.PUSH);
button.setText("I am a button");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
System.out.println("Button Clicked");
// Why do these texts not show up and not trigger a Paint Event?
createText(e.display.getActiveShell());
}
});
createText(shell);
shell.setLayout (new RowLayout());
shell.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
// just triggered in the beginning and with resizes
System.out.println("Hooray we got a Paint event");
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}
请记住,这不仅仅是为了使该示例正常工作。对于一个更大的项目来说,这是一个简单版本的问题:-)
非常感谢任何帮助!