Как я могу распознать кнопку из группы кнопок в одном слушателе?

У меня есть такая группа:

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. У меня есть два варианта, почему мое решение не работает: я сделал это неправильно или моя идея совершенно невозможна. Может быть кто-то на этом сайте делал что-то подобное и сможет мне помочь?


person Andrew    schedule 14.12.2020    source источник


Ответы (1)


Поле data элемента Event не содержит данных с кнопки. Его содержимое зависит от конкретного события, но не устанавливается для выбора кнопки.

Поле widget элемента Event содержит элемент управления (или виджет), генерирующий событие. Таким образом, вы можете получить данные с помощью:

event.widget.getData();
person greg-449    schedule 14.12.2020