我如何在单个侦听器中识别按钮组中的按钮?
How I can recognise button from button group in single listener?
我有这样的群:
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
。为什么我的解决方案不起作用,我有两种变体:我做错了,或者我的想法是完全不可能的。也许这个网站上有人做了类似的事情并且能够帮助我?
Event
的 data
字段不包含来自按钮的数据。它的内容取决于确切的事件,但它不是为按钮选择设置的。
Event
的 widget
字段包含生成事件的控件(或小部件)。所以你可以通过以下方式获取数据:
event.widget.getData();
我有这样的群:
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
。为什么我的解决方案不起作用,我有两种变体:我做错了,或者我的想法是完全不可能的。也许这个网站上有人做了类似的事情并且能够帮助我?
Event
的 data
字段不包含来自按钮的数据。它的内容取决于确切的事件,但它不是为按钮选择设置的。
Event
的 widget
字段包含生成事件的控件(或小部件)。所以你可以通过以下方式获取数据:
event.widget.getData();