我想问你几个有关桂的问题。

我看到了以下示例:

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。

非常感谢你!

最佳答案

当有人按下按钮时,该按钮会调用widgetSelected()
因为那是库的设计方式;它需要打电话给一些
方法,因此您可以做点什么,他们便决定使用该方法。的
之所以称呼您的widgetSelected()是因为您给了它
调用它的类。该按钮知道您的班级有一个
widgetSelected()方法,因为您已实现
SelectionListener,这需要您实施
widgetSelected()方法。那就是建立接口的原因
我建议您阅读它们。仅单击按钮将
获取按钮以调用您的方法,因为该按钮仅知道
单击时。在屏幕上单击时,只有
告知需要了解的小部件。
如上所述,您将处理程序发送给按钮,这样
知道推送时该怎么办。
按下按钮时,它必须告诉您的处理程序
发生了,因此所有相关信息都作为
SelectionEvent。事件本身不是按钮,而是事件
告诉您按下哪个按钮,以防您需要相同的处理程序
处理多个按钮。
您需要强制转换,因为您的widgetSelected()方法可以是
当各种GUI对象发生某种情况时调用,而不仅仅是
纽扣。因此,源是作为某些超类通用给出的
到可以调用您的方法的所有小部件,并且您需要进行强制转换
当您确定它是按钮时,将其返回到按钮。是的,在这
程序只能通过按钮调用,但这并不总是如此
案子。
按钮的文本更改,因为B与您创建和显示的按钮是同一对象。 Java中的对象(和数组)是“指针”,它们告诉您对象在哪里。当您将一个对象分配给另一个变量时,您并没有在复制该对象,而只是在使用另一个变量来指向同一对象。

07-24 20:17