这是我的第一个问题,但我真的被卡住了。也许这只是我过去几天的极度疲劳,但我现在看了几个小时谷歌并且找不到好的答案。
我知道SWT是事件驱动的,就像我能想到的所有GUI一样,在创建小部件时我应该记住,他们需要能够达到他们应该修改/交互的那些。但我需要知道的是,如果我的想法是正确的,如果不是,我应该改进什么。
让我们说我从eclipse + windowbuilder + swt / jface java项目开始。然后我为按钮(SelectionListener)添加了button和clabel + click listener,所以生成的代码看起来或多或少(只有main方法,上面只有Main类和import)
public static void main(String[] args) {
Display display = Display.getDefault();
Shell shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
Button btnNewButton = new Button(shell, SWT.NONE);
btnNewButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
}
});
btnNewButton.setBounds(51, 31, 75, 25);
btnNewButton.setText("New Button");
CLabel lblOneTwo = new CLabel(shell, SWT.NONE);
lblOneTwo.setBounds(180, 119, 61, 21);
lblOneTwo.setText("one two");
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
据我所知,对大多数人来说,这可能是显而易见的,我只能去添加
btnNewButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
}
});
代码如lblOneTwo.setText("three")
以及我所知道和使用的有时我只是事先声明所有内容,如static widget widgetName
然后我可以从基本上到处都访问它们,所以像
static Button btnNewButton;
static CLabel lblOneTwo;
public static void main(String[] args) {
Display display = Display.getDefault();
Shell shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
btnNewButton = new Button(shell, SWT.NONE);
btnNewButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
lblOneTwo.setText("three");
}
});
(...)
工作得很好。但我想并认为这不是最好的做法和做法,不是吗?所以,请帮助我,指出正确的方向,这样我就可以停止犯罪了。提前致谢!带有文章/教程链接的间接答案会很棒,但我喜欢人们放在这里的例子,因为他们有清晰的展示方式。
答案 0 :(得分:1)
有多种方法可以做到这一点。
制作班级的小部件字段。除非必要,否则不要让他们static
。
private Label l;
private Button b;
public static void main(String[] args)
{
...
b.addListener(...);
首先定义所有小部件(如果要在final
中使用它们,必须为Listener
),然后再添加Listener
。
final Label l = ...;
final Button b = ....;
b.addListener(...);
如果您想在Listener
中更改小部件本身,可以使用Event#widget
来获取活动的来源。
b.addListener(SWT.Selection, new Listener()
{
public void handleEvent(Event e)
{
Button button = (Button) e.widget;
}
});