2012-04-01 17 views
3

Ich frage mich, was die beste Methode ist, um eine Klasse zu erstellen, die Mausklicks und Tastendrücke verarbeiten muss. Offensichtlich ist es nicht möglich, mehrere Klassen in Java zu erben, daher verwende ich im Moment die MouseListener- und KeyListener-Schnittstellen, was bedeutet, dass ich viele leere Methoden in meiner Klasse haben muss, um die Schnittstellen zu erfüllen, wenn ich nur keyReleased und mouseReleased brauche.Sie müssen sowohl MouseAdapter als auch KeyAdapter erweitern

Wenn ich MouseAdapter und KeyAdapter verwenden könnte, könnte ich diese Methoden loswerden und saubereren Code haben. Also irgendwelche Vorschläge zu einem Weg, diese Klassen zu verwenden, die nicht unordentlicher sind als das, was ich bereits habe.

Antwort

4

MouseAdapter verlängern und Key Bindings bevorzugt gegen KeyListener oder KeyAdapter verwenden.

6

Sie können von einer der Klassen Adapter erben und dann die andere Schnittstelle implementieren. Auf diese Weise müssen Sie nur etwa die Hälfte der Arbeit erledigen.

Ich würde vorschlagen, die Adapter, die die meisten Methoden Abdeckung bietet, um Ihre Arbeit zu minimieren.

Wenn Sie bereits von etwas anderem erben, dann haben Sie offensichtlich keine andere Wahl, als die beiden Schnittstellen zu implementieren.

2

Sie können einen verlängern, dann die „ersetzen Vererbung durch Delegation“ verwenden Refactoring (in IntelliJ, nehme ich an Eklipse ein äquivalentes hat) sich dann die andere

+0

+1 für Zusammensetzung. – trashgod

4

Ich werde auf ein Bein und sagen, dass Sie nicht versuchen sollten, diese Funktionalität in einer einzigen Klasse zu kombinieren, dass der Versuch, dies zu tun ist wahrscheinlich eine schlechte Design-Entscheidung. Wenn Sie sagen, es ist, weil sie beide die gleichen Aktionen auslösen werden, dann haben beide Kontrollklassen auf alle Fälle das gleiche Modell, aber ansonsten separate Klassen erstellen - eine für die Mausinteraktion und eine für die Tastaturinteraktion (und so weiter) trashgod sagt, 1+ zu ihm, - mit Key Bindings, kein KeyListener).

+0

Dies ist vorzuziehen; Verwenden Sie "Action", um allgemeine Funktionen zu kapseln. – trashgod