我想問你幾個關於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類是什麼,但是如果你想改變它的文本,你將不得不將它添加爲一個監聽器,以便在事件發生時對其進行更改。 –