我想问你几个关于Gui的问题。了解Gui和听众
我看到了下面的例子:
public class ShellWithButton {
public static void main(String[] args) {
Display display = Display.getDefault();
Shell shell = newShell (display);
Button ok = newButton (shell, SWT.PUSH);
ok.setText ("Push Me!");
ok.addSelectionListener(new ButtonHandler());
ok.setLocation(0,0);
ok.setSize(100,30);
shell.pack();
shell.open();
while(!shell.isDisposed()) {
if(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
public class ButtonHandler
implements SelectionListener {
public void widgetSelected(SelectionEvent e) {
if(e.getSource() instanceofButton) {
Button b = (Button) e.getSource();
b.setText("Thanks!");
}
}
public voidwidgetDefaultSelected(SelectionEvent e){
// TODO Auto-generated method stub
}
}
(I) - 有人推按钮 - 程序如何知道要激活widgetSelected? 我可以看到按钮添加了ButtonHandler监听器本身,但为什么按下按钮而不是单击该框会将事件发送到ButtonHandler? 我看不到只有推送发送给这个监听者的地方。 (ii) - 为什么我要将一个ButtonHandler的实例发送给监听器?那是什么意思? (iii) - 当我按下按钮时发生了什么?这个事件是什么?事件是按钮本身的一个实例?
(iv) - Button b = (Button) e.getSource();
为什么我需要此源代码的投射?正如所写的那样,事件只能来自ok,这是按钮的实例。
(v) - 为什么原始按钮会改变它的标题?我们改变B.
非常感谢!
谢谢奥斯卡。这个听众是否总是与按钮本身相关?假设我想更改外壳上的文本。我是否仍然需要将此侦听器添加到按钮?或者我可以添加到一个shell吗? – Numerator
@Nir yes只要此按钮已注册此事件,此监听器就会将事件分派给按钮。我不知道你的Shell类是什么,但是如果你想改变它的文本,你将不得不将它添加为一个监听器,以便在事件发生时对其进行更改。 –