Moin,
ich wollte mal meine so gut wie nicht existierende "Code-Sammlung" erweitern und habe mal einen Listener geschrieben den ich in einem Programm mit GUI benutzt habe. Ich hatte in dem Programm das Problem das ich teilweise die gleichen Daten in verschiedenen JInternalFrames hatte, sich aber nach dem verändern nicht alle InternalFrames aktualisiert haben (die Daten kamen aus einer MySQL DB)... Deshalb ein (wenn ich das so nennen darf?) ein Klassen übergreifender EventListener.
Hier meine Klassen... (bin noch nicht so lange am programmieren)
Listener.java
ListenerInterface.java
TestCase1.java
TestCase2.java
Main.java
Ich habe in dem Interface zusätzlich eine add() und remove() Methode um die Klasse von extern oder direkt aus der Klasse heraus aus dem Listener Set zu entfernen. Macht das sinn? Eigentlich überflüssig da ich auch ohne die beiden Methoden zu implementieren die Klasse aus dem Listener entfernen kann (von extern sowie intern). Oder ist die Implementierung mit den Methoden ein besserer "Stil"?
Ich wollte mal ganz allgemein eure Meinungen zu dem Code einholen, ob der Listener zu gebrauchen oder noch zu verbessern etc. ist. Und vielleicht kann ja der eine oder andere den Code gebrauchen. Ich würde mich über euer Feedback sehr freuen.
Gruß
goodcat
ich wollte mal meine so gut wie nicht existierende "Code-Sammlung" erweitern und habe mal einen Listener geschrieben den ich in einem Programm mit GUI benutzt habe. Ich hatte in dem Programm das Problem das ich teilweise die gleichen Daten in verschiedenen JInternalFrames hatte, sich aber nach dem verändern nicht alle InternalFrames aktualisiert haben (die Daten kamen aus einer MySQL DB)... Deshalb ein (wenn ich das so nennen darf?) ein Klassen übergreifender EventListener.
Hier meine Klassen... (bin noch nicht so lange am programmieren)
Listener.java
Java:
import java.util.HashSet;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Set;
public class Listener {
private Set<ListenerInterface> listeners = null;
public Listener() {
this.listeners = new HashSet<ListenerInterface>();
}
/**
* @param listener - an object which implements the ListenerInterface
* @return true if this EventListener did not already contain the specified element
* @throws IllegalArgumentException if the specified element is null
*/
public boolean add(ListenerInterface listener) {
if (listener == null) {
throw new IllegalArgumentException("cannot add null to a nonNullSet!");
}
else {
if (!listeners.contains(listener)) { // <- die if Abfrage kann ich mir wahrscheinlich sparen da ein Hashset benutzt wird... aber aus unerfindlichen gründen hatte ich in dem ursprünglichen Programm ohne die Abfrage Probleme...
return this.listeners.add(listener);
}
}
return false;
}
/**
* @param listener - an object which implements the ListenerInterface
* @return true if this EventListener contained the specified element
* @throws IllegalArgumentException if the specified element is null
*/
public boolean remove(ListenerInterface listener) {
if (listener == null) {
throw new IllegalArgumentException("cannot remove null from a nonNullSet!");
}
else {
return this.listeners.remove(listener);
}
}
/**
* Iterates through the set with Listeners and runs the refresh method.
* @throws NoSuchElementException if the Listener set is empty
*/
public void start() {
try {
Iterator<ListenerInterface> it = this.listeners.iterator();
if (it.hasNext()) {
while (it.hasNext()) {
it.next().refresh();
}
}
else {
throw new NoSuchElementException("no elements in Listener Set");
}
}
catch(Exception e) {
e.printStackTrace();
}
}
}
ListenerInterface.java
Java:
public interface ListenerInterface {
public boolean add(Listener listener);
public boolean remove(Listener listener);
public void refresh();
}
TestCase1.java
Java:
import EventListener.Listener;
import EventListener.ListenerInterface;
public class TestCase1 implements ListenerInterface {
public TestCase1() {
}
public TestCase1(Listener listener) {
add(listener);
}
@Override
public void refresh() {
System.out.println("Run TestCase1 Class");
}
@Override
public boolean add(Listener listener) {
return listener.add(this);
}
@Override
public boolean remove(Listener listener) {
return listener.remove(this);
}
}
TestCase2.java
Java:
import EventListener.Listener;
import EventListener.ListenerInterface;
public class TestCase2 implements ListenerInterface {
public TestCase2() {
}
public TestCase2(Listener listener) {
add(listener);
}
@Override
public void refresh() {
System.out.println("Run TestCase2 Class");
}
@Override
public boolean add(Listener listener) {
return listener.add(this);
}
@Override
public boolean remove(Listener listener) {
return listener.remove(this);
}
}
Main.java
Java:
import EventListener.Listener;
public class Main {
public static void main(String[] args) {
Listener myEventListener = new Listener();
// TestCase1 testCase1 = new TestCase1(myEventListener);
// TestCase2 testCase2 = new TestCase2(myEventListener);
TestCase1 testCase1 = new TestCase1();
testCase1.add(myEventListener);
TestCase2 testCase2 = new TestCase2();
testCase2.add(myEventListener);
myEventListener.start();
}
}
Ich habe in dem Interface zusätzlich eine add() und remove() Methode um die Klasse von extern oder direkt aus der Klasse heraus aus dem Listener Set zu entfernen. Macht das sinn? Eigentlich überflüssig da ich auch ohne die beiden Methoden zu implementieren die Klasse aus dem Listener entfernen kann (von extern sowie intern). Oder ist die Implementierung mit den Methoden ein besserer "Stil"?
Ich wollte mal ganz allgemein eure Meinungen zu dem Code einholen, ob der Listener zu gebrauchen oder noch zu verbessern etc. ist. Und vielleicht kann ja der eine oder andere den Code gebrauchen. Ich würde mich über euer Feedback sehr freuen.
Gruß
goodcat