【问题标题】:How I can recognise button from button group in single listener?如何从单个侦听器中的按钮组中识别按钮?
【发布时间】:2020-12-14 07:11:29
【问题描述】:

我有这样的组:

leftPanel = new Group(subParentContainer, SWT.NONE);
leftPanel.setLayout(new RowLayout(SWT.VERTICAL));
leftPanel.setText("Group title");

Button firstTypeBtn = new Button(leftPanel, SWT.RADIO);
Button secondTypeBtn = new Button(leftPanel, SWT.RADIO);
Button thirdTypeBtn = new Button(leftPanel, SWT.RADIO);

firstTypeBtn.setText("Text 1");
firstTypeBtn.setData(myEnum.ONE);
firstTypeBtn.addListener(SWT.Selection, lst);

secondTypeBtn.setText("Text 2");
secondTypeBtn.addListener(SWT.Selection, new Listener() {
    @Override
        public void handleEvent(Event event) {
            fetchData(1);
        }
});

thirdTypeBtn.setText("Text 3");
thirdTypeBtn.addListener(SWT.Selection, new Listener() {
    @Override
    public void handleEvent(Event event) {
        fetchData(2);
    }
});

leftPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

如您所见,我的按钮具有类似的点击处理代码。我想创建一个处理点击事件的通用变量。但我不知道这个单一的侦听器将如何识别单击了哪个按钮。正如我看到的按钮小部件有这样的方法.setDate(Object object) 这是我认为可以帮助我的唯一一种方法。所以我做了一个监听器:

Listener lst = new Listener() {
    @Override
    public void handleEvent(Event event) {
        System.out.println((Button) event.data);
    }
};

还有一个有助于按钮识别的枚举:

public enum myEnum {
    ONE, TWO, THREE;
}

我想我会用这些代码做什么 - 我将枚举分配给每个按钮,然后在一个侦听器中识别它们。正如您在上面的代码范围中看到的那样,我尝试将此类解决方案添加到第一个按钮。但是当我按下它时,我只在控制台中看到:null。为什么我的解决方案不起作用,我有两个变体:我做错了,或者我的想法完全不可能。也许这个网站上有人做过类似的事情并且能够帮助我?

【问题讨论】:

    标签: java eclipse-plugin swt jface


    【解决方案1】:

    Eventdata 字段不包含来自按钮的数据。它的内容取决于确切的事件,但它不是为按钮选择设置的。

    Eventwidget 字段包含生成事件的控件(或小部件)。因此,您可以通过以下方式获取数据:

    event.widget.getData();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2018-09-25
      • 2015-07-31
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 2011-12-02
      相关资源
      最近更新 更多