gpt4 book ai didi

java - 理解 Gui 和 Listeners

转载 作者:行者123 更新时间:2023-12-01 16:37:52 26 4
gpt4 key购买 nike

我想问你几个关于 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)- 当我按下按钮时会发生什么?这是什么 Activity ?事件是按钮本身的实例吗?

(iv)- Button b = (Button) e.getSource(); 为什么我需要对源进行转换?正如所写,事件只能来自 ok,它是按钮的实例。

(v)- 为什么原来的按钮会改变它的标题?我们改变B。

非常感谢!

最佳答案

  1. 当有人按下按钮时,按钮会调用 widgetSelected()因为这就是图书馆的设计方式;它需要调用一些方法,这样你就可以做某事,他们决定采用这种方法。这它调用您的 widgetSelected() 的原因是因为您给了它您的类供其调用。该按钮知道您的类(class)有widgetSelected() 方法,因为您实现了SelectionListener,这需要您实现widgetSelected() 方法。这就是接口(interface)的原因,我建议你仔细阅读它们。只需单击该按钮即可让按钮调用你的方法,因为按钮只知道当它被点击时。当点击屏幕时,只有需要了解它的小部件被告知。

  2. 正如我上面提到的,您将处理程序发送到按钮,以便它知道被插入时该怎么做。

  3. 当按钮被按下时,它必须告诉你的处理程序什么发生了,所以所有相关信息都作为选择事件。事件本身不是按钮,而是事件告诉您按下哪个按钮,以防您需要相同的处理程序处理多个按钮。

  4. 您需要强制转换,因为您的 widgetSelected() 方法可以是当各种 GUI 对象发生问题时调用,而不仅仅是纽扣。因此,源作为一些父类(super class)公共(public)给出到所有可以调用您的方法的小部件,并且您需要进行强制转换当您确定这是您的按钮时,它会返回到按钮。是的,在这个程序只能通过按钮调用,但这并不总是案例。

  5. 按钮的文本发生变化,因为 B 和您创建并显示的按钮是同一个对象。 Java 中的对象(和数组)是“指针”,它们告诉您对象在哪里。当您将一个对象分配给另一个变量时,您并没有复制该对象,而只是使用另一个变量指向同一个对象。

关于java - 理解 Gui 和 Listeners,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7325645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com