Действительно ли возможно написать ваши собственные объекты, которые выделяют ActionEvents?

Я посмотрел на явские обучающие программы онлайн, и они все кажутся заинтересованными ловлей ActionEvents, выделенного другими компонентами, которые уже написаны. Действительно ли возможно написать ваши собственные объекты, у которых есть там собственный набор критериев, которые вызывают actionEvents, который может тогда быть пойман другими классами, которые зарегистрировались как слушатели?

Так, например: Если я хотел объект, который считал овца, чтобы отослать actionEvent, когда 100 овец были посчитаны ко всем объектам спального вагона, которые зарегистрировались как слушатели.

Есть ли способ сделать, это - там какие-либо обучающие программы онлайн?

Любая помощь значительно ценится.

1
nl ja de

2 ответы

Да, это довольно прямо, как только кто-то показывает вам, как создать ваших собственных слушателей.

Во-первых, вы создаете свой собственный EventObject. Вот пример из одного из моих проектов.

import gov.bop.rabid.datahandler.bean.InmateDataBean;

import java.util.EventObject;

public class InmatePhotoEventObject extends EventObject {

    private static final long serialVersionUID = 1L;

    protected InmateDataBean inmate;

    public InmatePhotoEventObject(Object source) {
        super(source);
    }

    public InmateDataBean getInmate() {
        return inmate;
    }

    public void setInmate(InmateDataBean inmate) {
        this.inmate = inmate;
    }

}

Нет ничего специального об этом классе, кроме него расширяет EventObject. Ваш конструктор определяется EventObject, но можно создать любые методы, которые вы хотите.

Во-вторых, вы определяете интерфейс EventListener.

public interface EventListener {

    public void handleEvent(InmatePhotoEventObject eo);

}

Вы использовали бы EventObject, который вы создали. Можно использовать любое имя метода или имена, которые вы хотите. Это - интерфейс для кода, который будет написан как ответ слушателю.

В-третьих, вы пишете ListenerHandler. Здесь мое из того же самого проекта.

import gov.bop.rabid.datahandler.bean.InmateDataBean;
import gov.bop.rabid.datahandler.main.EventListener;
import gov.bop.rabid.datahandler.main.InmatePhotoEventListener;
import gov.bop.rabid.datahandler.main.InmatePhotoEventObject;

import java.util.ArrayList;
import java.util.List;

public class InmatePhotoListenerHandler {

    protected List listeners;

    public InmatePhotoListenerHandler() {
        listeners = new ArrayList();
    }

    public void addListener(EventListener listener) {
        listeners.add(listener);
    }

    public void removeListener(EventListener listener) {
        for (int i = listeners.size() - 1; i >= 0; i--) {
            EventListener instance = listeners.get(i);
            if (instance.equals(listener)) {
                listeners.remove(i);
            }
        }
    }

    public void fireEvent(final InmatePhotoEventObject eo, 
            final InmateDataBean inmate) {
        for (int i = 0; i < listeners.size(); i++) {
            final EventListener instance = listeners.get(i);
            Runnable runnable = new Runnable() {
                public void run() {
                    eo.setInmate(inmate);
                    instance.handleEvent(eo);
                }

            };
            new Thread(runnable).start();
        }
    }

    public static void main(String[] args) {
        System.out.println("This line goes in your DataHandlerMain class "
                + "constructor.");
        InmatePhotoListenerHandler handler = new InmatePhotoListenerHandler();
        System.out.println("I need you to put the commented method in "
                + "DataHandlerMain so I can use the handler instance.");

       //public InmatePhotoListenerHandler getInmatePhotoListenerHandler() {
       //     return handler;
       //}

        System.out.println("This line goes in the GUI code.");
        handler.addListener(new InmatePhotoEventListener());

        System.out.println("Later, when you've received the response from "
                + "the web service...");
        InmateDataBean inmate = new InmateDataBean();
        inmate.setIntKey(23);
        handler.fireEvent(new InmatePhotoEventObject(handler), inmate);
    }
}

Основной метод в этом классе показывает вам, как вы используете ListenerHandler. Остальная часть методов в классе стандартная. Вы использовали бы свой собственный EventObject и EventListener.

2
добавлено

Да.

Я предлагаю, чтобы вы посмотрели на явскую документацию API для ActionEvent и EventListenerList.

Я также предполагаю, что вы читаете о Слушателе (также названный Наблюдателем) образец.

0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async