20.2.2001 |
Da die letzte Version schon viel zu lange her ist, ergibt
sich diesmal eine große Zahl von Änderungen. Neu ist auch
ein Demo
(Options.java) für das option
Package im demo Verzeichnis.
Neue Features:
-
Das Logging System wurde erweitert, um Filterung,
Formatierung und Behandlung von Meldungen in darauf
spezialisierte Klassen und Interfaces zu verlagern.
Diesmal sind die Änderungen voll kompatibel. Allerdings
sind einige Klassen und Methoden deprecated um die
Umstellung zu fördern. Vielen Dank an Oliver Brandt von ATecoM GmbH, der
den Hauptteil des neuen Codes beisteuerte. Basierend auf
diesen Änderungen lassen sich nun Logdateien mit
beschränkter Größe erzeugen, bei deren Überlauf neue
Dateien angelegt werden.
-
Die
LogSetup Klasse im util
Package dient dazu, die verschiedenen Aspekte des
Logging Systems mittels einer Vielzahl von
Kommandozeilen Argumenten zu initialisieren.
-
Das
option Package wurde komplett überholt:
-
Alles sieht besser aus und verhält sich
konsistenter.
-
TextOptionEdits haben ihre
eigene JScrollPane .
-
Die neue Klasse
EditorOptionEdit
unterstützt unter anderem das Anzeigen und
Bearbeiten von HTML.
-
RadioOptionGroups haben
jetzt einen eigenen Rahmen und Titel.
-
Die
TextOption Klasse hat jetzt
die statischen Methoden split und join um zwischen String Arrays und
mehrzeiligen Strings zu konvertieren.
-
Die
OptionGroup /OptionEdit Hierarchie
ist jetzt public und kann durchlaufen werden.
-
OptionDialogs basieren
jetzt auf der neuen ModalDialog Klasse.
Somit sind die Buttons eines
OptionDialogs frei wählbar.
-
Mnemonics für Tastaturkürzel können für Buttons und
OptionEdits
gesetzt werden..
-
Mit
gui/ModalDialog wird eine
neue gemeinsame Basisklasse für Meldungs- und
Optionendialoge eingeführt, die die Konfiguration der
Buttons wesentlich vereinfacht.
-
Die neue Klasse
MultiMap ist eine
Implementierung des Map Interfaces, die
mehrere Werte für einen Schlüssel speichert.
Zunächst primär als Ausgangspunkt für den
MRUCache (s.u.) gedacht, hat
sie sich bereits mehrfach selbst als nützlich erwiesen.
-
Basierend auf der
MultiMap speichert der neue
MRUCache nur eine begrenzte
Anzahl von Resourcen. Ist der Platz erschöpft, werden
die zuletzt benötigten Resourcen aufbewahrt und die
ältesten gelöscht. Es besteht eine gewisse Ähnlichkeit
zur WeakHashMap , der
MRUCache funktioniert aber auch mit JDK 1.1
und hat eine andere Ausrichtung.
-
ExtensionFileFilter ist ein
allgemeiner, auf der Dateiendung basierender Filter, der
mit AWT und Swing Dateiauswahldialogen ebenso
verwendet werden kann, wie mit File.list() .
-
Die
EventQueue verwendet nun einen
Trick, um auch im JDK 1.1 die Events innerhalb des AWT
Eventqueue Threads auswerten zu können. Damit
funktioniert ein ExceptionHandler auch mit
JDK 1.1, zusammen mit den anderen
EventQueue Hacks. Es gibt ausserdem einen
neuen Hack, der die Alt-... Tastenkombinationen für
manche Motif-basierte JDKs zurechtbiegt
(z.B. IBMs JDK für Linux). Damit funktionieren dann
z.B. die Menüshorcuts wieder. Ein weitere Hack biegt die
Delete Taste für das Blackdown JDK 1.3 zurecht.
-
Commands können nun festlegen,
ob sie einen Handler benötigen, oder nicht. Dadurch kann
der
CommandDistributor vermeiden,
UnhandledCommandExceptions
für Commands zu werfen, die eher
Nachrichtencharakter haben.
-
Der
ArgsParser hat neue Methoden
um Defaultwerte für Kommandozeilenargumente zu setzen
und um
das Auswerten der Ergebnisse zu vereinfachen. Ausserdem
wurde der Parameterindikator '=' hinzugefügt.
-
Zu Gunsten eines einheitlichen API mit
option/OptionSet und
util/ArgsParser ,
wurde
MapResourceBundle.getInteger
deprecated und durch
getInt ersetzt.
-
util/MessageCollector assoziiert Collectors
über einen instance Mechanismus mit dem laufenden Thread.
-
Mit Hilfe der Klasse gui/EventQueueMark können künstlich
erzeugte Events von echten (vom Anwender ausgelösten)
unterschieden werden.
-
Die neue Klasse config/RelativeDialogConfigWrapper
speichert die Position eines Dialogs relativ zu einem
anderen Fenster anstatt in absoluten Werten.
Beseitigte Bugs:
-
SwingUtil.withEvents hatte in
Kombination mit der qflib eigenen EventQueue Probleme unter
JDK 1.2. Dies führte in
qflog beim Laden von Logdateien zu einem Deadlock.
-
Der EventQueue Tabhack beschränkt sich jetzt
auf Events mit gesetzter
SHIFT Maske.
Andernfalls konnte ein Fenterwechsel mit
Alt-tab zu einem künstlichen Tab Event führen.
-
SortedTableHelper beendet
jetzt automatisch das Editieren, wenn die Sortierung
oder die Filtereinstellung verändert wird.
-
Das
LevelTreeSelectionModel hatte
einen Bug, der zu einer
NullPointerException führte, wenn die
Wurzel des Baums sichtbar war.
-
Ein Timing Problem in
gui/MultiPane konnte manchmal
das Wiederherstellen einer gespeicherten Einstellung
verhindern.
-
log/TreeFilter konnte nicht
ohne die JUnit Klassen kompiliert werden.
-
Die Konstante
FATAL_ERROR in util/MessageCollector is jetzt
3 (sie war fälschlicherweise als 0 definiert).
-
showPopup in gui/SwingUtil hatte
Probleme, wenn die parent Komponente selbst ein Fenster
war. Ausserdem funktionierte die Beschränkung auf das
Fenster nicht.
-
Die config/Configurator Klasse hatte einen Bug
in remove, der verhinderte, dass das
Configurable korrekt aus entfernt wird.
-
Beim Wiederherstellen des Zustands eines JToolBar,
berücksichtigt JToolBarConfigWrapper jetzt auch die
Orientierung.
|
22.8.2000 |
Version 0.97.1 dient hauptsächlich der Wartung.
Die Beispiel Seite hat jetzt
einen Abschnitt zum de.qfs.lib.gui Package. Zunächst
enthält dieser eine Beschreibung, wie man eine sortierte
Tabelle erstellt und verwaltet.
Um zusätzlich zu den Source Code Fragmenten lauffähige
Beispiele anzubieten, haben wir das demo
Verzeichnis angelegt und dort zunächst
SortedTable.java bereit gestellt,
ein kleines Demo für eine Tabelle mit Sortierung und
Filterung.
Neue Features:
-
Ein TextOptionEdit hat jetzt optional eine
Scrollpane.
-
Die Methode updateUI wurde zum
SortedTableHelper hinzugefügt. Sie muss
aufgerufen werden, wenn sich das UI der Tabelle ändert,
um einen korrekten Header Renderer für das neue UI zu
erhalten.
Beseitigte Bugs:
-
Das Erhalten der Selektion einer sortierten Tabelle
konnte in bestimmten Fällen eine Zeile verschlucken.
-
Die initialen Einstellungen des Trenners einer
MultiPane
oder eines JSplitPaneConfigWrappers funktionieren
jetzt zuverlässiger.
-
Der DynamicClassLoader hat offene
InputStreams nicht richtig geschlossen.
Danke an Florian
Rodler für den Hinweis.
-
Die Unterstützung von XEmacs Menüs in
qflib.el war zwar vorhanden, wurde aber
nicht aktiviert. Noch einmal danke an Oliver Brandt.
|
10.7.2000 |
Mit Version 0.97.0 wird das de.qfs.lib.transaction
Package eingeführt. Ausserdem werden in dieser Version
alle RMI-spezifischen Klassen aus dem de.qfs.lib.log Package entfernt
und in das de.qfs.lib.logrmi
Package ausgelagert. Diese Änderung war nötig, um Logging
in Applets zu ermöglichen, die in Internet Explorer
Versionen laufen sollen, in denen die RMI Klassen fehlen.
Erstmals ist ein Emacs lisp Paket enthalten, welches das
Logging und das Schreiben von Javadoc Kommentaren stark
vereinfacht.
Inkompatible Änderungen:
-
Von den Klassen, die in das
de.qfs.lib.logrmi Package
ausgelagert wurden sollte den Anwender nur RemoteLogFilter betreffen.
-
Stärker betroffen von dieser Änderung ist der Logserver
qflog, der
zeitgleich in einer neuen Version veröffentlicht wird.
-
Die Klasse
ValueEdit und davon abgeleitete
Klassen wurden aus dem de.qfs.lib.gui Package entfernt,
da sie eigentlich nicht zur qflib gehören und nur
durch einen Bug in der Konfiguration dorthin gelangt
sind. Sie sind immer noch in den alten qflib Versionen
verfügbar, sollten aber durch Optionen
aus dem de.qfs.lib.option
Package ersetzt werden.
Neue Features:
-
Das
de.qfs.lib.transaction Package unterstützt Transaktionen
auf der Clientseite. Einfache Aktionen können in einer
Transaction gesammelt und zu
einer komplexen Aktion zusammengefasst werden. Diese
werden dann gemeinsam beim Commit ausgeführt, oder beim
Rollback zurückgenommen.
-
Die Klasse
FocusFixer
im de.qfs.lib.gui Package ist ein Workaround für einen
lästigen Bug im JDK 1.1 mit dem Motif Toolkit. In dieser
Konstellation vergessen Fenster bei jeder De- und
Reaktivierung welche Komponente gerade den Fokus hat.
-
Verschachtelte
OptionSets
sind jetzt dank des direkten Zugriffs auf die Optionen
wesentlich besser nutzbar.
-
Der
ArgsParser für Argumente der
Kommandozeile wirft genauere Exceptions mit
Informationen über die fehlerhaften Optionen. Zu diesem
Zweck werden die Exceptions MissingParameterException ,
UnexpectedParameterException
und UnknownOptionException
eingeführt.
-
Ein einfacher Mechanismus zum Sammlen von Warn- und
Fehlermeldungen ist in der
MessageCollector Klasse
implementiert.
-
Ein Emacs lisp Paket namens
qflib.el
befindet sich im Verzeichnis misc . Es
vereinfacht die Verwendung des de.qfs.lib.log Packages
wesentlich und bietet einige nützliche Funktionen
darüber hinaus.
Beseitigte Bugs:
-
Die relative Angabe der Ausgangsposition des Dividers
einer
MultiPane funktioniert jetzt
auch mit JDK 1.3.
-
Die Pfeil Icons in den qflib Resourcen hatten einen
kleinen Fehler, der zu Anzeigeproblemen mit sortierten
Tabellen in JDK 1.3 geführt hat.
|
7.6.2000 |
Version 0.96.0 beseitigt einige Bugs und wurde um neue
Features bereichert.
Neue Features:
-
Die Klassen
InputStreamAdapter ,
CountingInputStream ,
CountEvent
und CountListener
sind neu zum de.qfs.lib.util Package hinzugekommen, um
Zugriff auf die Zahl der gelesenen Bytes eines
InputStreams zu bekommen. Darauf aufbauend
wurde StatusLine
um eine Fortschrittsanzeige erweitert.
-
Eine neue Methode in
DynamicClassLoader
erlaubt das bequeme Erzeugen von Objekten, deren
Konstruktor Argumente erwartet.
-
EventNames
bietet jetzt auch die umgekehrte Abbildung von
Eventnamen auf Ids und SwingUtil
erhielt eine Methode zum Zentrieren von Fenstern auf dem
Bildschirm.
Beseitigte Bugs:
|
4.5.2000 |
Version 0.95.0 ist die erste öffentlich freigegebene
Version.
|
|