Donnerstag, 30. April 2009

Weißheit des Tages

Wenn Menschen etwas geändert haben möchten, fällt es ihnen leicht zu erklären, was ihnen am aktuellen Zustand nicht gefällt, aber sind oft nicht in der Lage zu beschreiben, wie sie es denn konkret gern hätten.

Samstag, 25. April 2009

Swing GUI Builder

Für die Entwicklung von Swing Anwendungen finde ich einen GUI Builder eine recht angenehme Sache. Man erhält zu Beginn der GUI-Entwicklung recht flott ansehnliche Ergebnisse und später muß man sich für kleinere Änderungen nicht durch den oft ewig langen GUI Code wühlen. Vor allem, wenn eine vielfalt an Komponenten in einem GridBagLayout versammelt sind, ist nachträgliches Ändern mit einiger Lesearbeit verbunden. All das kann ein GUI Builder vereinfachen.

Letztes Jahr habe ich nach langem wieder einmal mit einem neuen Swing Projekt begonnen. Da stand also als erstes die Frage nach einem vernünftigen GUI Builder im Raum. Früher habe ich das mit dem Netbeans eignenen GUI Builder Matisse gemacht. Dieses malsollte die Entwicklung jedoch mit Eclipse vonstatten. Ein Rundumblick freier Swing GUI Builder Plugins ließ aber recht schnell Ernüchterung einkehren. Die Auswahl ernst zu nehmender Plugins ist recht übersichtlich.

Zunächst habe ich mich dem Eclipse VEP befasst. Nach dem ich den Abhängigkeitszoo endlich im Griff hatte und das gute Stück in Augenschein nehmen konnte, dominierte vor allem das Gefühl der Enttäuschung. Trägheit und Bugs an allen Ecken und Enden haben mich das Plugin schnell ins Jenseits befördern lassen.

Das Jigloo Plugin, das ich mir als nächste vorgenommen habe, konnte mich ebenfalls nicht so recht überzeugen. Als angenehm habe ich das Arbeiten damit jedenfalls nicht empfunden und auch hier eine Vielzahl von Unzulänglichkeiten entdeckt. Beide GUI Builder scheinen mir erheblich besser für SWT als für die Swing Entwicklung geeignet zu sein. Also ging die GUI Entwicklung doch wieder mit Netbeans/Matisse vonstatten. Matisse verwendet XML-Daten und generiert daraus den Javacode - hat also nicht den Anspruch mit Livecode zu arbeiten, wie VEP und Jigloo. Letztere verplempern mit dem Livecode während des Bearbeits einiges an Zeit. Manuelle Änderungen am Code haben dann auch gleich spührbare Wartezeiten zur Folge.

Einige Zeit später bin ich noch auf das Eclipse Plugin Matisse4Eclipse gestoßen. Das Plugin basiert auf Netbeans Matisse, wurde jedoch für Eclipse umgeschrieben. Matisse4Eclipse ist eigentlich Bestandteil der kommerziellen MyEclipse Enterprise Workbench, läßt sich jeodch auch einzeln installieren. Matisse4Eclipse ist sehr flott, bringt aber leider einige Features des Orginals nicht mit. Währen Netbeans/Matisse die eingegebene Texte und Images gleich lokalisiert ablegt, muß diese Arbeit bei Matisse4Eclipse von Hand gemacht werden, was auch gleich zur Folge hat, dass die Komponenten im Designer keine Texte/Bilder anzeigen, sondern nur auf "user code" hinweisen. Weiteres Manko sind die wenig unterstützden Refactoring Möglichkeiten. Das umbenennen der Javaklassen hat zwar auch gleich die passende Auswirkung auf die dazugehörige Form-XML Datei, damit ist dann aber auch schon schluß mit den Möglichkeiten. Packages umbenennen, in denen sich eine Form-XML befindet, schlägt grundsätzlich fehl. Beim Umbennen oder Verschieben von Klassen werden die Referenzen in den Form-XML Dateien nicht mitgezogen. Hat man sich daran gewöhnt, sind es eben immer ein paar Handgriffe mehr, die man ausführen muß, um zu refaktorisieren.

Ebenfalls unangenehm aufgefallen ist mir die fehlende Unterstützung des ApplicationFramework, dass Netbeans/Matisse einem automatisch aufdrängt. Ganz Rund ist die Sache also nicht - bestenfalls ein Kompromiss. Die Kombination aus Eclipse und Matisse4Eclipse finde ich trotz alledem noch halbwegs angenehm. Alles in allem drängt sich mir aber das Gefühl auf, dass in Saceh Swing Builder seit langem nicht mehr viel passiert ist.

Links:
http://www.myeclipseide.com/
http://www.cloudgarden.com/jigloo/
http://www.eclipse.org/vep/WebContent/main.php

Effekthascherei für Swing

Wer schon immer neidisch auf die OSX GUI geschielt und sich geärgert hat, dass es die superbunten Effekte nicht auch für Swing gibt, dem wird das Swing-Bug Projekt mit sicherheit gefallen. Sieht man davon ab allzuviele Elemente in der JCarousel Komponente (s. Abbildung) einzufügen, funktioniert das ganze auch sehr flüssig. Das Swing-Bug Projekt bringt übrigens noch einiges mehr an Komponenten zum spielen mit.

Link: https://swing-bug.dev.java.net/

Mittwoch, 22. April 2009

Ein ♥ für Blogs

ein-herz-fuer-blogsStylespion hat sich vorgenommen die Linkkultur in Blogs ein wenig zu fördern und die Aktion "Ein Herz für Blogs" ins Leben gerufen. Die Idee finde ich gut. Deshalb nun meine deutschsprachigen Lieblingsblogs:


Das Fischblog beschäftigt sich auf eingängige Weise mit Naturwissenschaftlichen Themen. Ich finde die Beiträge angenehm zu lesen und auch für mich als weniger bedarften dieses Themas, gut verständlich.


Meine regelmäßige Portion Wirtschaft entnehme ich dem Blog von Egghat, der sich schwerpunktmäßig auf die US Wirtschaft bezieht, aber eben nicht nur.


Das Blog von Peter Kröner befasst sich mit Webdesign und Technik. Interessant finde ich hier vorwiegend die Artikel zum Thema CSS.


Donnerstag, 16. April 2009

Dateien kopieren

geht Häufig ist es bisher nicht vorgekommen, dass ich von einer Anwendung aus Dateien kopieren wollte. Auf die Frage, wie man das macht, hätte ich spontan den üblich Algorithmus wiedergegeben und auf die apache FileUtils verwiesen.


  byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}

Es geht aber auch besser - nämlich via FileChannel. Die FileChannel setzen weiter unten an und bieten ein paar Möglichkeiten zum Dateihandling auf nativer Ebene an, was dann etwas performanter vonstatten geht. Ein Beispiel, was ich hierzu gefunden habe:


public static void copyFile(File sourceFile, File destFile) throws IOException {
if(!destFile.exists()) {
destFile.createNewFile();
}

FileChannel source = null;
FileChannel destination = null;
try {
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source, 0, source.size());
}
finally {
if(source != null) {
source.close();
}
if(destination != null) {
destination.close();
}
}

Quelle javalobby

Donnerstag, 2. April 2009

Swing API Links

Und wieder einmal ein paar Links für alle Swing Schrauber.

The DJ Project
Hat sich ähnlich dem JDict Projekt dem Einbau nativer Komponenten in Swingverschrieben. Mit der Version 0.9.8 gibt es die folgenden Komponenten: JWebBrowser, JFlashPlayer, JVLCPlayer, JHTMLEditor, JSyntaxHighlighter, JWMediaPlayer (win32). Außerdem kommen noch ein paar kleinigkeiten, wie Thumbnail Creation oder File type associations mit. (Link)

Rubber Band
Erweiter die Java Komponenten JList, JTable und JTree um ein Rubber Band, mit dem der Benutzer ziemlich bequem eine Mehrfachauswahl tätigen kann. Ich finde das immer noch eine der besseren Selektionsmöglichkeiten. Schade das sich das nie wirklich in der UI Programmierung etabliert hat. (Link)

TreeWrapper
Ein netter Wrapper, der die am häufigsten benötigten Drag and Drop Features implementiert. (Link)