Mein Ansatz zum Delegation Event Model

zer0

Erfahrenes Mitglied
Guten Abend,

ich versuche mich grade an einem Ansatz den auch Java verwendet für das Event-Handling nämlich Delegation Event Model.

Ich möchte ich grade mal mein Ansatz zeigen und fragen ob das so gut ist, ob ihr es auch so macht, was man ändern könnte oder was nicht gut ist.

Kurze Beschreibung:
Ich habe mir eine ToolBar Klasse geschrieben die von JToolBar erbt und Button hat mir Icons. Die ToolBar-Klasse hat eine Methode addToolBarEventListener(ToolBarEventListener l); um dort ein ToolBarEventListener zu registrieren. Kennt man ja von addActionListener(...);
Wenn ein Button von ToolBar gedrückt wurde werden die Methoden des ToolBarListeners aufgerufen die bei ToolBar registriert sind.

Ich hoffe das war verständlich, hier mein bisheriger Code:

ToolBar Klasse:
Java:
public class ToolBar extends JToolBar {

	private ArrayList<ToolBarEventListener> listener;
	
	private JButton newButton;
	private JButton openButton;

        private void initializeComponents() {
		ImageIcon newIcon = new ImageIcon("icons\\new.png");
		newButton = new JButton(newIcon);
		newButton.setToolTipText("Neu");
		newButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				ToolBarEvent event = new ToolBarEvent(e.getSource(), e.getID(), "new");
				fireEvent(event);
			}
		});

		ImageIcon openIcon = new ImageIcon("icons\\open.png");
		Action openAction = new AbstractAction("Open", openIcon) {
			@Override
			public void actionPerformed(ActionEvent e) {
				ToolBarEvent event = new ToolBarEvent(e.getSource(), e.getID(), "open");
				fireEvent(event);
			}
		};

        // [...]

	public void addToolBarEventListener(ToolBarEventListener l) {
		listener.add(l);
	}
	
	private void fireEvent(ToolBarEvent event) {
		for(ToolBarEventListener l : listener) {
			// jeweiligen Methoden im Listener aufrufen und event übergeben
		}
	}


ToolBarEvent Klasse:
Java:
public class ToolBarEvent extends ActionEvent {

	private static final long serialVersionUID = -1996014053352869816L;

	public ToolBarEvent(Object source, int id, String command) {
		super(source, id, command);
	}
}

ToolBarEventListener Interface:
Java:
public interface ToolBarEventListener {
    // Bisher noch keine Implementierung
}

Registierung des Listeners:
Java:
	private void initialize() {
		ToolBar toolBar = new ToolBar();
		toolBar.addToolBarEventListener(
				new ToolBarEventListener() {
					
		});
		setToolBar(toolBar);
	}

        // [..]

	private void setToolBar(ToolBar toolBar) {
		add(toolBar, BorderLayout.NORTH);
	}

Kennt ihr das so oder macht ihr es auch so? Was macht man anders oder ist das genau das richtige?

Denke schonmal im vorraus für eure Meinung

Schönen Abend noch!
 
Zurück