![]() |
Java- ActionListener in eigene Klasse
Ich habe in der Schule mir einen kleinen Texteditor geschrieben, habe aber das Problem, das ich gerne die ActionEvents in eine eigene Klasse auslagern würde.
Wie macht man das so, das es funktioniert, irgendwie schaff ich es einfach nicht. Ps: Leider funzt auf meinem Pc zuhause das bluej nicht, und auch mit der Kommandozeile hauts nicht hin, deshalb habe ich das woran ich gerade arbeite als Kommentare gesetzt, hoffe das es so nicht behindert. (die restlichen Kommentare kommen übrigens erst wenn ich das Projekt fertig habe, es verwirrt nämlich laut meinen Kenntnissen nichts mehr als Kommentare die dastehen, wo aber die Funktionen dazu geändert wurden) Kann mir übrigens jemand sagen wieso ich das setVisible(true); erst nach dem adden machen soll, wenn ich es nicht mache zeigt er erst wieder die Objekte an, wenn ich die Größe geändert habe, er also nochmal update() durchführen muss, aber wenn ich etwas in ein Label einen neuen String reinschreibe aktualisiert er sich von selbst???? |
Du kannst das ganze mit anonymen Klassen machen, in der Art wie du es bei addWindowListener gemacht hast.
Code:
... Ausnahme: wenn du Inner-Classes verwendest, brauchst du das nicht. Was das setVisible betrifft: ich hab zwar die Sourcen vom JDK grad nicht bei der Hand, aber ich schätze mal daß Label.setText() ein validate() im Parent-Container bewirkt, das wiederum den Layout-Manager den Fenster-Inhalt neu aufbauen läßt. |
add innerClasses, damit meinst du, nehme ich zumindest an, lokale Klassen, aber ich will den ActionListener mit actionPerformed in einer eigenen klasse, und dann einfach zb. Dateieditor.closewindow(); aufrufen, und das Fenster soll sich schließen.
Kennt jemand außerdem eine gute Methode, wie ich rausfinden kann, (wenn das Textarea ein Event sendet), was der User verändert hat`??? Im Moment hau ich immer wenn ein event kommt, den ganzen Inhalt auf den Stack, was ich aber nicht sehr effizient finde |
so wiet ich weiss kannst du nur den vorigen inhalt merken, und mit dem geänderten inhalt vergleichen - was du warscheinlich eh schon machst ...
ich muss ehrlich sagen, die lösung mit anonymen inneren klassen find ich beschissen - wenn man mal ziemlich viel macht zb bei einem mouseevent wird das extrem unübersichtlich. zu der frage im ersten posting: das setvisible(true) darum am schluss, da sonst der frame nicht neu gezeichnet wird, nur weil du ein element addest. es läuft so ab, dass du den frame zeichnest, dann erst die buttons, ... hinzufügst aber den frame nie neu zeihcnen lässt - man sieht nichts von den buttons, erst bei einer grössenänderung (so weit ich weiss beim verschieben auch nicht) wird der frame dann neu gezeichnet und die elemente werden sichtbar. so was einfach angewöhnen, das erspart viel ärger (glaubs mir :-( ) |
Anonyme inner Klassen sind nur gut bei einzelnen kurzen Events.
Übersichtlich ist das MVC Pattern, dh. eigene Klassen für Model View Controller (bzw. auch aufgesplittete Controllerklassen für unterschiedliche Eventkategorien). |
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag