如何在单个侦听器中从按钮组中识别按钮?

ufj5ltwl  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(206)

我有这样一群人:

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;
}

我想我将如何处理这些代码-我将为每个按钮分配enum,然后在一个侦听器中识别它们。正如您在上面的代码范围中看到的,我尝试将这样的解决方案添加到第一个按钮中。但当我按下它时,我只在控制台里看到: null . 为什么我的解决方案不起作用,我有两种说法:我做得不对,或者我的想法完全不可能。也许有人在这个网站上做了类似的smth,将能够帮助我?

m3eecexj

m3eecexj1#

这个 data 磁场 Event 不包含来自按钮的数据。它的内容取决于具体的事件,但它不是为按钮选择而设置的。
这个 widget 领域 Event 包含生成事件的控件(或小部件)。因此,您可以通过以下方式获取数据:

event.widget.getData();

相关问题