2009-11-20

“Must have”-Tools

Die Wahrscheinlichkeit ist sehr hoch, dass ich der Einzige bin, der ZoomIt nicht gekannt hat. :-)
Tatsächlich genießt die Sysinternals-Website seit vielen Jahren einen ausgezeichneten Ruf. Sie wurde 1996 von Mark Russinovich und Bryce Cogswell ins Leben gerufen, um die Systemwerkzeuge der beiden sowie technische Dokumentation der Allgemeinheit zur Verfügung stellen zu können. In meinem Buch Java für Windows habe ich übrigens schon 2005 auf eines ihrer Tools, Junction, hingewiesen. Microsoft hat Sysinternals Juli 2006 erworben.
Der Einstellungsdialog von ZoomIt
ZoomIt ist eine sehr schlanke, aber extrem schön zu bedienende Bildschirmlupe (mit einigen spannenden zusätzlichen Funktionen). Beispielsweise kann man auf dem Bildschirm malen. Gerade bei Präsentationen kann das sehr angenehm sein. Durch Druck auf die Tasten r, y, g oder b wählt man die Farben rot, gelb, grün oder blau. Tippt man t, kann man Text eingeben. Dass der Vergrößerungsfaktor bequem einstellbar ist, versteht sich von selbst. Ich möchte dieses kleine Tool nicht mehr missen.

2009-11-05

TKBirthdayReminder 1.2.5

Screenshot von TKBirthdayReminder Seit Kurzem ist TKBirthdayReminder 1.2.5 im Android Market zu finden. Ich habe das Layout der Geburtstagsliste verbessert; so ist das Geburtsdatum an den rechten Rand gewandert und damit besser ablesbar. Außerdem zeigt das Programm nun das Sternzeichen des Kontakts an.
Haben Sie Ideen für weitere Funktionen? Schreiben Sie mir…

2009-10-25

Dialoge mit Android

Android macht dem Entwickler das Anzeigen von Dialogen sehr einfach. Es genügt nämlich, die beiden Methoden protected Dialog onCreateDialog(int id); und protected void onPrepareDialog(int id, Dialog dialog); einer Activity zu überschreiben. Angezeigt wird der Dialog mit einem simplen showDialog(DIALOG_NEW_EVENT);

Dialoge werden mittels IDs unterschieden; diese kann der Entwickler selbst festlegen. Auf diese Weise erzeugte und angezeigte Dialoge werden vom System verwaltet. Wird ein Dialog zum ersten Mal angezeigt, wird zunächst onCreateDialog() aufgerufen, danach onPrepareDialog(). Jedes weitere Anzeigen führt nur noch zu einem onPrepareDialog(). Leider gibt es aber – und deshalb schreibe ich diesen Blog-Eintrag :-) - in diesem Zusammenhang einen Bug, der bei Orientierungswechseln (beim G1 etwa durch Aufschieben der Tastatur) zuschlägt. In diesem Fall unterbleibt nämlich der Aufruf von onPrepareDialog().

2009-09-25

Neues für den Androiden

Ich hatte ja schon einmal über mein Programm TKWeek berichtet. Da mir das Schrauben am Androiden großen Spaß macht, hat der Funktionsumfang des Progrämmchens seitdem deutlich zugenommen. Seit heute Abend steht die Version 1.0.4 im Android Market zum Download bereit.

Die Funktionsauswahl von TKWeek

Der Screenshot zeigt die Funktionsauswahl. Zur Zeit kann man aus folgenden Funktionen auswählen:

  • Zwischen Datum und Wochennummer umrechnen
  • Informationen zu einem Datum anzeigen
  • Zahl der Tage zwischen zwei Daten berechnen
  • Datumsrechner

Der Datumsrechner sieht so aus:

Datumsrechner von TKWeek

Die Bedienung ist einfach:

  1. Datum auswählen
  2. Zahl der Tage, Wochen, Monate und/oder Jahre eingeben
  3. Addieren oder Subtrahieren anklicken

Haben Sie Ideen oder Vorschläge, was in meinen Datums- und Kalenderwerkzeugkasten noch rein könnte? …schreiben Sie mir.

2009-08-22

Am Androiden schrauben

TKWeek-Programm-Icon Neulich sagte ein Kollege zu mir: Es wäre schön, wenn der Termin in der 37. Kalenderwoche stattfinden könnte. Wissen Sie aus dem Stand heraus, wann KW 37 beginnt und wann sie endet? Eben. Den guten alten papiernen Planer, in dem so etwas selbstverständlich drin steht, habe ich, wie langjährige Leser meines Blogs wissen – schon sehr früh gegen elektronische Organizer ausgetauscht. Bedauerlicherweise enthält der Kalender meines G1 diese Info nicht. Aus diesem Grund habe ich mich an meinen Computer gesetzt und ein kleines Programm für meinen Lieblingsandroiden gezimmert.
Screenshot von TKWeek
Seit heute Abend können Sie das Programm TKWeek (ich gebe es ja zu, in punkto Namensgebung bin ich ein Einfallspinsel :-)) aus dem Android Market laden.
Die Anwendung kennt zwei “Betriebsarten”:
  1. Woche zu einem Datum herausfinden
  2. Woche auswählen und ersten/letzten Tag ablesen
Das Datum wird mit der großen, dreiteiligen Komponente im oberen Bereich des Bildschirms ausgewählt. Die Werte weiter unten werden laufend aktualisiert. Die Woche lässt sich mit der gelben SeekBar sowie den beiden Plus-/Minus-Schaltfläche eingeben. …mehr kann die anwendung nicht, aber mehr ist ja auch nicht nötig. :-)

2009-08-18

Adobe AIR und Java Web Start

Im zweiten Teil meiner kleinen Serie über Adobe AIR hatte ich versprochen, noch ein paar Zeilen über AIR unter Linux zu schreiben. Die Installation verlief ebenso glatt wie unter Mac OS X und Windows.
Erfolgreiche Installation unter Ubuntu
Auch das Aussehen der Installationsdialoge entspricht (abgesehen natürlich vom Fensterrahmen) den anderen beiden Plattformen. Das Einrichten und der Start der eigentlichen Anwendungen funktioniert – wie erwartet - ebenfalls wie unter Windows und Mac OS X:
Rückfrage, was mit der herunter geladenen Datei geschehen soll
Rückfrage vor der Installation
Installationsort festlegen
Fassen wir die bisherigen Erkenntnisse zusammen. AIR-Anwendungen werden offenbar in Installationsdateien gepackt und so verteilt. Diese enden auf .air. Da dieser Dateityp (sowie ein äquivalenter MIME-Typ) mit der AIR-Laufzeitumgebung verknüpft ist, führt ein Doppelklick auf eine solche Datei bzw. der Download aus dem Internet zum Start der AIR-Runtime. Diese bietet an, die Anwendung zu installieren oder ggf. wieder vom System zu entfernen. .air-Dateien können also auf normalem Weg kopiert bzw. weitergegeben werden. Ein direkter Download wird aber (wie bereits geschrieben) ebenfalls unterstützt.
Ohne Frage macht das AIR-Laufzeitsystem das Herunterladen, Installieren und ggf. Entfernen von AIR-Anwendungen sehr einfach. Der Anwender wird mit grafisch schön aufbereiteten, leicht verständlichen Dialogen durch die jeweils nötigen Schritte geführt. Einmal auf dem Client angekommen, verhalten sich AIR-Anwendungen bzgl. Start und Deinstallation wie ihre nativen Kollegen. Das Look and Feel weicht von nativen Anwendungen ab, ist über Plattformgrenzen hinweg aber identisch.
Java macht vieles ähnlich, verfolgt im Detail aber doch andere Strategien. Diese möchte ich im Folgenden ins Gedächtnis rufen. Das Java Network Launching Protocol (JNLP) legt, vereinfacht ausgedrückt, fest, wie Java-Anwendungen von einem Web Server heruntergeladen und auf einem Client installiert werden. Die Grundidee ist, ein Programm durch einfaches Anklicken eines Links im Webbrowser starten zu können. JNLP ist eine Spezifikation; eine Implementierung mit Namen Java Web Start ist Bestandteil jeder halbwegs aktuellen Java-Laufzeitumgebung. Ihr Verhalten möchte ich am Beispiel meines kleinen Progrämmchens TKPlayIt anhand von einigen Screenshots zeigen.
Startseite meines Programms TKPlayIt
Die orangefarbene Schaltfläche Launch (eine ganz normale Grafik) ist ein Link auf die Datei TKPlayIt.jnlp. Wird sie angeklickt, lädt der Webbrowser die Datei herunter. Da Dateien des Typs .jnlp (bzw. ein äquivalenter MIME-Typ) in der Regel mit der Java-Laufzeitumgebung verknüpft sind, wird diese gestartet.
Java-Splashscreen
Die Laufzeitumgebung zeigt beim ersten Aufruf der zu startenden Anwendung den oben abgebildeten Splashscreen. Bei erneuten Starts wird stattdessen eine anwendungsspezifische Grafik angezeigt, sofern diese in die .jnlp-Datei eingetragen wurde.
Herunterladen der Anwendung
Anschließend wird die Anwendung heruntergeladen. Dies geschieht aber nur beim ersten Aufruf, oder wenn auf dem Web-Server eine neuere Version als die bereits auf dem Client vorhandene abgelegt wurde.
ein Sicherheitshinweis
Nach dem Laden erfolgt unter Umständen ein Sicherheitshinweis. Gestattet der Anwender die Ausführung, wird die Anwendung gestartet.
.jnlp-Dateien sind keine Installationsarchive. Sie definieren vielmehr die Bestandteile eines Programms. Eine .jnlp-Datei legt also (unter anderem) fest, welche Dateien von einem Web-Server heruntergeladen werden müssen. Um eine Web Start-Anwendung weiterzugeben, reicht es demzufolge nicht aus, die zugehörige .jnlp-Datei zu kopieren. Auch die “Installation” des Programms verläuft anders. Seine Bestandteile landen nämlich nicht in plattformüblichen Programme-Verzeichnissen, sondern in einem Web Start-eigenen Cache. Dennoch sind Web Start-Anwendungen recht gut in das System integriert. Sie lassen sich beispielsweise durch Verknüpfungen auf dem Desktop starten.
Unter Windows können Web Start-Anwendungen wie gewohnt aus der Systemsteuerung heraus entfernt werden. Auf anderen Plattformen muss hierzu der Java Cache Viewer geöffnet werden.
Java Cache Viewer
Damit möchte ich meine Mini-Serie über Adobe AIR aus Anwendersicht beenden. Haben Sie Fragen oder Anregungen? Dann schreiben Sie mir doch einfach…

2009-08-02

…ein bischen frische Luft…

Alle Screenshots sind gemacht. Die Texte sind fertig getippt. Das Manuskript ist beim Verlag. Der eigentliche Schreibvorgang für die dritte Auflage des Eclipse-Buches ist also abgeschlossen. Für mich heißt dies, wieder Zeit fürs Bloggen zu haben.
In diesem Beitrag möchte ich einen Blick über den Zaun werfen. Konkret geht es heute um Adobe AIR, genauer gesagt um die Frage, wie sich diese Plattform dem Endanwender präsentiert. Wie Java basiert AIR auf einer Laufzeitumgebung, die einmalig herunter geladen und installiert werden muss. Diese virtuelle Maschine ist plattformabhängig, die eigentlichen Anwendungen hingegen funktionieren überall, wo es eine entsprechende Ablaufumgebung gibt.
Zunächst also der Installationsvorgang unter Windows (das Archiv ist übrigens etwa 15 MB groß):
Installation Schritt 1
Installation Schritt 2
Installation Schritt 3
Das Ganze ist in wenigen Minuten erledigt. Nach der Installation wollte ich mir ansehen, was da so alles auf der Platte gelandet ist. Das erwartete Unterverzeichnis AIR unter C:\Programme\Adobe gab es nicht. Einträge im Startmenü waren auch nicht auszumachen. Die erweiterte Suche förderte dann aber C:\Programe\Common Files\Adobe AIR als Basisverzeichnis der Installation zutage. Für den Endanwender tritt die Laufzeitumgebung nach der Installation also zunächst nicht in Erscheinung.
Die AIR-Downloadseite hatte auf einen Adobe AIR Marketplace hingewiesen, der aktuelle Anwendungen zum Herunter laden anbietet. Das sieht dann so aus:
Adobe AIR Marketplace
Da ich keine Lust auf das 30. Wetter-Widget hatte, habe ich mich für das Spiel Desktop Blaster entschieden. Die Hersteller-Site hält das Programm zum Download bereit. Nach einem Fortschrittsbalken während des Herunterladens  (den ich Ihnen nicht zeige) wird folgende Meldung ausgegeben:
image
Mit Speichern kann man die herunter geladene Datei für eine spätere Verwendung “parken”. Unter Windows wird .air als Dokumenttyp der AIR Laufzeitumgebung registriert. Ein Doppelklick auf solche Dateien führt aber nicht zum Start der Anwendung, sondern startet einen Installationsvorgang:
Informationen zur Anwendung
Zweite Seite des Installationsassistenten
.air-Dateien sind also Installationsarchive. Ein erneutes Öffnen einer solchen Datei zeigt folgenden Dialog:
Auswahl, was mit bereits installierten Anwendungen geschehen soll
AIR-Anwendungen haben unter Windows jeweils eigene Einträge in der Liste installierte Software, können also auf dem üblichen Weg gelöscht werden. Auch der Start geschieht analog zu nativen Programmen. Wie das auf anderen Plattformen gelöst ist, werde ich noch überprüfen.

2009-06-19

Noch mehr Minimalismus

Vor einiger Zeit hatte ich in meinem Eintrag Reduzierung auf das Wesentliche auf die beiden Programme WriteRoom und Dark Room hingewiesen. Die Idee dieser Anwendungen ist, sich beim Schreiben von Texten auf nichts als den Text zu konzentrieren.
Auf sehr lustige Weise auf die Spitze wird das Ganze durch das Programm Typewriter getrieben, eine Schreibmaschinensimulation in Java. Lesen Sie sich doch einfach das folgende Posting durch...

2009-06-11

Hacking JavaFX Binding

Nach einer etwas längeren Pause habe ich mal wieder einen (englischsprachigen) Artikel auf java.net veröffentlicht. In Hacking JavaFX Binding beschäftige ich mit der Frage, inwieweit auch Swing-Entwickler von JavaFX profitieren können.

JavaFX Script enthält den bind()-Operator, mit dem sich auf extrem einfache und bequeme Weise Bindungen zwischen Variablen und Objekten herstellen lassen. Die JavaFX-Runtime beinhaltet ein kleines Framework, das die notwendige Infrastruktur bereit stellt. Mein Artikel stellt die wichtigsten Klassen dieses Frameworks vor und verwendet es, um in einer kleinen Swing-Anwendung data binding zu realisieren. Insofern ist dieser neue Artikel die konsequente Fortsetzung meines Artikels Binding Beans, der vor einem Jahr erschienen ist.

In dem Artikel hatte ich anhand einer kleinen Lautstärkeregelung zwei Binding-Frameworks für Swing miteinander verglichen. Der neue Artikel greift nicht nur die Anwendung auf, sondern auch deren Struktur. Auf diese Weise lässt sich das JavaFX Binding Framework sehr schön mit den beiden anderen vergleichen. Es ist erstaunlich, wie gut es hier mithalten kann, obwohl die Klassen doch nie für eine öffentliche Nutzung vorgesehen oder freigegeben sind.

2009-06-09

Quelltext zu TKDatePicker online

Ich habe die Arbeiten an meiner Kalenderkomponente TKDatePicker soweit abgeschlossen, dass ich glaube, den Quelltext dieser Version herausgeben zu können.
Screenshot von TKDatePicker
TKDatePicker realisiert eine moderne Datumsauswahl, die mit sehr geringen Aufwand in eigene Swing-Anwendungen integriert werden kann. Sie wird unter der GNU Lesser General Licence v3 zur Verfügung gestellt. Um die Komponente in Aktion zu sehen, klicken Sie bitte auf den folgenden Link:
Demo von TKDatePicker starten
TKDatePicker realisiert insgesamt vier Ansichten: Tage, Monate, Jahre und Jahrzehnte. Zwischen diesen kann durch Anklicken von Elementen der Kopfleiste gewechselt werden.
Für die Folgeversionen steht auf dem Programm:
  • umfangreichere Dokumentation
  • stärkere Java-“Beanifizierung”
Wenn Sie Anregungen, Fragen oder Probleme haben, scheuen Sie sich bitte nicht, mit mir Kontakt aufzunehmen. Selbstverständlich freue ich mich auch über Hinweise auf Programme, die TKDatePicker verwenden.

2009-06-05

Einem Datumscontrol auf die Eigenschaften geschaut

Microsoft liefert mit seinen Common Controls seit langer Zeit eine Datumsauswahl (Date/Time Picker) aus. Früher sah die so aus:
Date / Time Picker v5
Dieser Screenshot zeigt die Komponente unter Vista mit den Common Controls V5. Ab Version 6 können die Common Controls mit Themes versehen werden. Dann präsentiert sich die Datumsauswahl so (ebenfalls unter Vista):
Date / Time Picker v6
Es gibt von Microsoft übrigens ein sehr schönes Programm, mit dem man sich die Komponenten der Common Controls entspannt ansehen kann. Den Control Spy können Sie hier herunter laden. Der Download enthält zwei Versionen des Werkzeugs, die auf die beiden bereits angesprochenen Versionen der Common Controls zugreifen. Das kann man nutzen, um sich Unterschiede in der Implementierung anzusehen. Dies möchte ich im Folgenden tun.
Zunächst zwei Screenshots der alten Version:
Monatsauswahl mittels Popup-Menü
Hier ist sehr schön zu sehen, wie man zu einem bestimmten Monat innerhalb eines Kalenderjahres springt: mit Hilfe eines Popup-Menüs.
Jahresauswahl mittels Up/Down
Dieser Screenshot zeigt, wie man zu einem bestimmten Jahr navigiert. Der Control Spy nennt dieses Element Up/Down. In Swing entspricht dies einem JSpinner.
Jetzt zu der neueren Implementierung. Sie unterscheidet nicht zwischen Klicks auf den Monatsnamen und das Jahr. Stattdessen sieht die Komponente nach dem ersten Klick so aus:
Monatsauswahl
Anstelle der Tages eines Monats sind die Monate eines Jahres zu sehen. Klickt man ein Monat an, landet man wieder in der bekannten Monatsansicht. Ein erneuter Klick in den Kopfbereich (auf das Jahr) schaltet auf die folgende Ansicht um:
Jahresauswahl
Auch hier gilt: ein Klick auf ein Jahr springt wieder eine Ebene nach oben, also in die Monatsauswahl. Ein Klick in den Kopfbereich bringt uns in die letzte Ansicht:
Auswahl von Dekaden
Die Dekadenauswahl funktioniert wie die Jahresauswahl. Ein Klick auf eine Dekade zeigt eine entsprechende Jahresauswahl. In allen Ansichten kann man mit den beiden Scrollpfeilen blättern, also monats-, jahres-, dekaden- und jahrhundertweise.
Die Auswahl eines Monats ist ohne Frage äußerst elegant. Die Bedienung der Komponente wird nicht durch ein Popup-Menü gestört. Ob hingegen der Tausch eines Textfeldes durch drei zusätzliche Ansichten zu einer schnelleren und angenehmeren Bedienung führt, ist Geschmackssache. Ich vermute, die Bedienung wird flüssiger. Kurzum: mir gefällt die neue Variante sehr gut.
Ein letzter Hinweis: Neben der hier gezeigten Date/Time Picker-Komponente gibt es auch eine reine Kalenderkomponente ohne Textfeld: Month Calendar.

2009-06-04

Zurück in die Zukunft

Die im letzten Eintrag vorgestellte Datumsauswahl muss leider noch bis zum Wochenende warten. Zwischenzeitlich möchte ich Ihnen mit einem Schmunzeln eine Reise in die Vergangenheit und wieder zurück präsentieren. Bei der Arbeit am Rechner bot sich mir nämlich folgendes Bild:
Guru Meditation
Die Guru Meditation ist wohl jedem, der sich in den 80ern für Homecomputer interessierte, ein Begriff. Wer mehr darüber wissen will, sollte sich den folgenden Wikipedia-Artikel zu Gemüte führen. …eine schöne Erinnerung, die die VirtualBox-Entwickler uns hier präsentieren.

2009-05-31

Noch eine Datepicker-Komponente (diesmal von mir)

In einem Kommentar auf meinen letzten Eintrag wurde ja auf eine sehr schöne Datepicker-Komponente hingewiesen, die sich zum Beispiel in Vista findet. Ich bin schon vor geraumer Zeit über sie gestolpert und war von ihr recht angetan. Deshalb hatte ich beschlossen, sie sozusagen nach Java zu portieren. Auch wenn ich noch nicht ganz fertig bin, möchte ich doch – schon, um etwas Appetit zu machen – einen ersten Screenshot zeigen.
Screenshot von TKDatePicker
Das Ganze wird TKDatePicker heißen und selbstverständlich als open source veröffentlicht. Die Komponente wird unter der GNU Lesser General Public Licence version 3 zu haben sein. Demnächst mehr in diesem Theater… :-)

2009-05-30

Gestaltung für Smartphones und den Desktop (4)

In dieser Folge werfen wir einen Blick auf zwei ungewöhnliche oder experimentelle Kalenderanzeigen. Es geht also nicht in erster Linie um “Datepicker”, sondern ganz allgemein um Datumsein- und –ausgaben.
Die (leider schon sehr lange nicht mehr aktualisierten) Seiten User Interface Design Patterns von Sari A. Laakso stellen unter anderem den Calendar Strip vor.
Calendar Strip von Sari A. Laakso
Im Gegensatz zu den üblichen Kalendern, in denen aufeinander folgende Monate als abgesetzte Blöcke erkennbar sind, “kleben” sie im Kalenderstreifen aneinander. Die Zeit wird, vergeben Sie mir meinen pathetischen Ton, als Kontinuum greifbar. Allerdings ist der Streifen vergleichsweise ausladend. Auch bin ich nicht sicher, ob man sich nicht zu leicht im Wust der Zahlen verliert. Wie der Screenshot zeigt, gibt es aber Monatsabgrenzungen, die beim Lesen unterstützen.
Fibonacci Calendar UI ist ein weiterer Vorschlag für eine Kalenderansicht. Die ihr zugrunde liegende Idee ist, Informationen zu vier Tagen anzuzeigen. Der aktuelle Tag nimmt den größten Raum ein, jeder darauf folgende Tag erhält etwas weniger Platz.
Fibonacci Calendar UI
Auch diese Kalenderansicht braucht relativ viel Platz.Sie stellt den aktuellen Tag in den Mittelpunkt, erlaubt aber dennoch einen Blick in die nähere Zukunft.
Dieser Post hat uns ziemlich weit weg von mobilen Geräten geführt. Wir werden aber sehr schnell den weg zurück finden. :-) Bleiben Sie also dran. Zum Schluss noch ein Link: Im Calendar and Date Picker Design Showcase stellt Webentwickler Christian Watson eine ganzer Reihe Web-basierter Kalender vor. Die Sammlung ist in jedem Fall einen Blick wert.

2009-05-26

Gestaltung für Smartphones und den Desktop (3)

Willkommen zum dritten Teil meiner losen Serie über die Gestaltung von Benutzeroberflächen für mobile Geräte sowie dem Desktop. Wie versprochen geht es diesmal um die Datumsauswahl. Werfen wir zunächst einen Blick auf ein paar gängige Realisierungsformen.
Screenshot: Widget der Windows Sidebar
Das erste Beispiel ist ein Widget der Windows Sidebar.
Screenshot: Dashboard-Widget unter Mac OS X2
Und hier das Pendant unter Mac OS X, also ein Dashboard-Widget.
Von gestalterischen Unterschieden abgesehen, ist der Aufbau gleich: eine Kopfzeile zeigt Monat und Jahr. Zwei Pfeile gestatten das monatsweise Blättern. Der eigentliche Datumsbereich zeigt 6 Wochen. Der aktuelle Tag ist hervorgehoben.
Nun ein kurzer Blick auf mobile Geräte. Der folgende Screenshot zeigt den Kalender des Palm Pre.
Kalender des Palm Pre
Das große Display des Geräts wird vollständig genutzt. Die Datumsauswahl wirkt elegant und ergonomisch. Ihre Realisierung orientiert sich eindeutig am Desktop.
Schließlich die Datumsauswahl der Android-Plattform:
Screenshot: Datumsauswahl der Android-Plattform 
Sie wirkt auf den ersten Blick spartanisch. Die Funktionsweise ist aber mit der Walzen-Metapher des iPhone, die wir bereits kennen gelernt haben, vergleichbar. Die drei Zahlen sind editierbar, das heißt, auch große Zeitsprünge sind schnell erledigt.
Fassen wir zusammen. Bisher sind wir zwei Ausprägungen der Datumseingabe begegnet. Zum einen die Auswahl durch Anklicken oder Antippen eines Datums aus einem Monatsbereich. Zum anderen die Eingabe durch drei unabhängige Felder. Werte dieser Felder werden durch Gesten (Blättern, Tippen) verändert. Nahe Termine lassen sich sicher mit beiden Varianten schnell und komfortabel selektieren. Wie aber sieht es mit länger zurück liegenden Jahren aus?
Nehmen Sie als Beispiel ein Programm, das Geburtstage verwaltet. Aus Rückmeldungen von Anwendern meines Programms TKBirthdayReminder schließe ich, dass hier die Android-Variante nicht optimal ist. Fairerweise muss man aber sagen, dass dies für alle Drei-Feld-Varianten zutreffen dürfte. Heißt dies im Umkehrschluss, dass die Desktop-übliche Darstellung besser geeignet ist?
Screenshot: Geburtstagseingabe in Apples Addressbuch
Dieser Screenshot zeigt, wie man in Apples Addressbuch Geburtstage einträgt. Erstaunlicherweise finden wir hier eine Variante der Drei-Felder-Eingabe. Ein weiteres Beispiel:
Screenshot: Auswählen eines Datums in iCal
Dieser Screenshot zeigt, wie man unter Mac OS X im Programm iCal zu einem Datum springt.
Was schließen wir daraus? Natürlich ist es nicht weiter verwunderlich, dass die Eingabe von Zahlen der schnellste Weg ist, um zu weit entfernten Datumswerten zu gelangen. Die eigentliche Erkenntnis ist die Bestätigung einer These aus der letzten Folge. Nämlich dass gute Bedienelemente die vorhandenen Ressourcen einer Plattform optimal nutzen. Auf dem Desktop ist eine Tastatur eben immer vorhanden. Auf dem Smartphone hingegen nicht.
Auch in der nächsten Folge bleib ich bei der Datumseingabe. Dann möchte ich Ihnen einige spannende Varianten vorstellen. Bleiben Sie dran. Und wie immer freue ich mich natürlich über Ihre Kommentare.

2009-05-24

Der Griff nach den Sternen

Das Spielzeugmuseum Nürnberg zeigt in der Sonderschau Der Griff nach den Sternen Weltraum- und Roboterspielzeug. Ich habe mir die kleine aber feine Ausstellung heute angesehen und kann sie jedem, der absichtlich oder zufällig nach Nürnberg kommt, nur ans Herz legen.
Homepage des Spielzeugmuseum Nürnbergs

2009-05-23

Gestaltung für Smartphones und den Desktop (2)

Im ersten Teil dieser kleinen, losen Folge von Einträgen habe ich darauf hingewiesen, dass unterschiedliche Geräteklassen Bedienelemente in der Regel unterschiedlich implementieren. Diese Aussage mag auf den ersten Blick banal klingen. “Natürlich muss eine Datumsauswahl auf dem Handy anders aussehen und anders funktionieren, als auf dem PC” werden Sie jetzt sehr wahrscheinlich denken. Aber ist dem wirklich so? Wer – wie ich – lange mit Windows Mobile gearbeitet hat, weiß, wie stark dieses System in seinen Metaphern und Mechanismen vom großen Bruder geprägt ist. Jeder neue Termin gerät da zu einem filigranen Stift-Getippe und Geschiebe. Nicht umsonst gibt es so viele Aufsätze, die den kleinen “Fenster”-Geräten etwas mehr Touch-Feeling beibringen.
Also: Hinter jedem Bedienelement (Schaltfläche, Tabelle, Datumsauswahl, …) steht eine abstrakte Idee oder Funktion. Bei Schaltflächen ist diese Funktion allgemeiner (ich möchte irgend eine Aktion auslösen) als bei einer Datumsauswahl. Beiden ist aber gemein, dass sie in unterschiedlichen Situationen wiederverwendet werden können. Mit Hilfe einer Datumsauswahl kann man beispielsweise den Geburtstag eines Kontakts festlegen, aber auch den Beginn des Urlaubs. Dasselbe gilt für die Schaltfläche. Sie kann Speichervorgänge auslösen oder den Abspielvorgang eines Musikstücks starten.
Die bisher beschriebene abstrakte Idee ist geräteunabhängig. Was ich gesagt habe, trifft auf mobile Geräte ebenso zu wie auf den heimischen Rechner. Anders die konkrete Implementierung: sie ist geräte- und systemabhängig. Jedes Bedienelement einer Plattform realisiert einen bestimmten Look und legt ein bestimmtes Feel an den Tag. Anders, weniger holprig formuliert: jede Oberflächenkomponente hat eine genau festgelegte visuelle Repräsentation und legt ein wohldefiniertes Verhalten an den Tag.
So, als Java-Programmierer werden Sie jetzt siegesgewiss sagen “klar, er meint Swing und sein pluggable Look and Feel”. Nein, liebe Leserin, nein, lieber Leser, nix isses mit dem Hauptgewinn. Auch das Konzept des Look und Feels findet auf mehreren Ebenen statt. Die eine, wenn Sie so wollen sehr konkrete Ebene ist tatsächlich diejenige, die auf der Ebene der Farben und Effekte (das visuelle Reindrücken der Schaltfläche) operiert. Die zweite Ebene beantwortet die Frage, wie die weiter oben angesprochenen abstrakten Ideen bzw. Funktionen umgesetzt werden. Ob also eine Datumsauswahl als Monatskalender oder Walze mit drei Scheiben implementiert wird. Erst wenn dieser Punkt geklärt ist, kann definiert werden, wie das “Ding” dann tatsächlich gerendert wird.
Wie stark die Plattform Einfluss auf die Ausgestaltung von Bedienelementen nimmt, zeigen die Kommentare zum ersten Teil, für die ich mich übrigens herzlich bedanke. Es ist selbstverständlich richtig, dass das Rollen von stilisierten Walzen mit der Maus am PC keinen Spaß macht. Insofern würde eine genaue Übertragung der iPhone-Implementierung höchstens “for fun” sinnvoll sein. Was wir noch sehen werden, ist, ob es aber vielleicht Adaptionen oder Variationen gibt, die der Plattform “PC” mehr gerecht werden. Eine letzte Anmerkung, ebenfalls zu einem Kommentar: der klassische “Datepicker” hat tatsächlich kein Texteingabefeld sondern verlässt sich auf Mausaktionen. Das auf dem Screenshot zu sehende Feld gehört nicht zur Komponente.
Im nächsten Teil werden wir uns etwas ausführlicher dem Thema Datumsauswahl widmen. Wir werden uns einige Konzepte gängiger Implementierungen ansehen. Ich hoffe, Sie bleiben dran…

2009-05-22

Gestaltung für Smartphones und den Desktop

Beim Gestalten von Anwendungen bedienen wir uns aus einem Pool von Komponenten und kombinieren diese mehr oder weniger geschickt zur Benutzeroberfläche.Was uns an Bauelementen zur Verfügung steht, wird durch die verwendete Klassenbibliothek bestimmt.
Auch wenn ich kein iPhone, sondern ein G1 besitze, stöbere ich gerne durch die Weiten von Apples App-Laden. Dabei ist mir Woche Anwendung von Olivier Bernal aufgefallen, ein nützliches kleines Kalenderberechnungsprogramm.
image
Dessen Benutzeroberfläche sehen Sie im obigen Screenshot. Ein kurzer Blick genügt, um die Funktionsweise der Anwendung zu erfassen. Aber warum ist das so? Zum einen bildet der begrenzte Platz auf dem Bildschirm eine natürliche Obergrenze, was die Anzahl an Bedienelementen betrifft, zumal die einzelnen Komponenten eher groß gestaltet werden, um auf den kleinen Displays trotzdem gut erkenn- und bedienbar zu bleiben. Zum anderen sind natürlich die Bedienelemente selbst optimal auf das Gerät abgestimmt:
image
…ganz ehrlich… Haben Sie auf dem Desktop oder im Web schon einmal eine ähnlich elegante Datumsauswahl gesehen? Lassen Sie uns hierzu ein Blick auf einen alten Bekannten werfen:
image
Dieser Screenshot zeigt eine Datumsauswahl in Outlook 2007. Ohne Zweifel ist die Kalender-Metapher in diesem Zusammenhang naheliegend. Aber wollen wir wetten, mit welchem Ansatz Sie früher das Datum 24. Februar 1582 erreichen?
Wie würden Sie denn die Benutzeroberfläche der iPhone-Anwendung möglichst optimal in ein typisches Desktop-Programm umsetzen? Glauben Sie, die vorhanden Komponenten sind hierfür gut geeignet? Schreiben Sie mir, oder spekulieren Sie mit – in nächster Zeit möchte ich Ihnen ein solches Programm als Web Start-Anwendung vorstellen…

2009-05-21

Ein Laden für Java-Anwendungen?

Es scheint schon fast selbstverständlich, dass einige Kommentatoren die Ankündigung eines Ladens für Java-Anwendungen durch Jonathan Schwartz als bloße Kopie von Apples virtuellen Läden abstempeln. Aber ist dem wirklich so?
Freilich bleibt abzuwarten, was die Java-Erfinder in wenigen Tagen tatsächlich der Öffentlichkeit präsentieren werden. Dennoch: wenn die Zahlen, die genannt werden, tatsächlich realistisch sind (und es gibt keinen Grund, das zu bezwiefeln) ergäbe sich ein riesiges Potential - ein solcher Laden würde eine Zielgruppe erschließen, die weit größer ist als die, die Apple derzeit beispielsweise mit dem iPhone-AppStore anspricht. Schließlich geht es nicht nur um einen Gerätetyp oder eine Geräteklasse, sondern um alles, was Java an Bord hat.
Ein paar Fragen bleiben aber zunächst offen:
  1. Auf welchen Plattformen steht der Laden zur Verfügung?
  2. Welche Anwendungen oder Anwendungstypen sind für Nutzer so interessant, dass die sich tatsächlich für den Laden interessieren?
  3. Wie kommt der Laden zum Kunden?
  4. Sind die Kosten für Entwickler bzw. Anbieter akzeptabel?
Sun muss es vor allem aber gelingen, den Shop so zu gestalten, dass er optisch und technisch mit ähnlichen Angeboten konkurrieren kann. Anders formuliert: er muss letztlich so hipp aussehen wie iTunes. Ganz klar wurde mit JavaFX eine Technologie für RIAs geschaffen, insofern wird wohl auch der Laden auf JavaFX basieren.
Spannend wird aber vor allem sein, welche Angebote wir in dem Laden finden werden...

2009-05-03

Linktipp: Automatisch als Benutzer unter Vista anmelden

Heute möchte ich nur kurz einen Linktipp weitergeben... Automatisches Anmelden an Vista mit Autologon zeigt, wie man Vista gleich mi einem angemeldeten Benutzer starten kann. Das ist nichts Spektakuläres aber sehr nützlich, vor allem wenn man Windows virtualisiert betreibt. Immerhin habe ich mich an meinem Mac schon einmal angemeldet. :-)

2009-03-22

Textinformationen anzeigen

In diesem Eintrag geht es mal wieder um Swing. Wie Sie wissen, schreibe ich sehr gerne über Themen, die man in oder mit Swing besonders leicht oder elegant lösen kann. Heute geht es darum, Informationen zu einem eingegebenen Text zu präsentieren. Konkret soll dem Anwender mitgeteilt werden, wie viel Text er schon eingetippt hat und wie viel er noch darf. …Sie kennen das sicher aus diversen Webformularen.

Das eigentlich Anspruchsvolle an dieser Aufgabe ist, sie so zu erledigen, dass das Ergebnis keinerlei Auswirkung auf bestehende Layouts hat. Denn natürlich ist es easy, irgendwo ein Label zu setzen, dass dann beliebige Infos anzeigt. Ein solches Vorgehen hätte aber großen Einfluss auf bereits bestehende Komponenten. Außerdem möchte man nicht in jeden Dialog oder jede Maske solche zusätzliche Infolabels “reinfrickeln”.


Das Ergebnis

Wie man sich solche Textinfos vorstellen kann, zeigt obiger Screenshot. Wie aber ist das Problem gelöst worden?

Wie Sie wissen, lassen sich Swing-Komponenten mit einem beliebigen Rahmen versehen. Ein solcher Rahmen ist Teil der Komponente, tritt also nicht als eigenständiges GUI-Element in Erscheinung und hat somit keinen Einfluss auf die Zahl der Elemente in einem Container. Meine Klasse TextInfoBorder realisiert einen Rahmen, der oben, links und rechts nicht sichtbar ist, wohl aber unten rechts zwei Werte ausgibt, nämlich die aktuelle Länge eines Textes sowie die maximale Anzahl an Zeichen.

Texte lassen sich in Swing sehr leicht in ihrer Größe beschränken. Wie das geht, zeigt die Klasse LimitLengthDocument. TextInfoBorderDemo schließlich fügt die Puzzleteile zusammen.

2009-03-08

Meine erste Anwendung für den Androiden

Das Schöne an der Handy-Plattform Android ist ja, dass man Programme in Java schreiben kann. Da mich die APIs dieses Systems interessieren, habe ich ein kleines Programm erstellt, das ein fehlendes Feature nachrüstet: eine Geburtstagsliste. Die Website zu disem Programm ist seit heute online, das Programm selbst möchte ich in naher Zukunft über den Android Market anbieten.

Update 27.12.14: Das Programm ist nach wie vor über Google Play verfügbar.

2009-02-22

Erste Eindrücke von einem "Open Source"-Handy

Ich habe in diesem Weblog ja schon den einen oder anderen Eintrag zur Handy-Plattform Android veröffentlicht. Bisher habe ich mich stets auf die frei zugängliche Entwicklungsumgebung und dem darin enthaltenen Emulator bezogen. Seit gestern halte ich nun echte Hardware in Händen, in Gestalt des seit Anfang Februar erhältlichen G1.
Für das iPhone hat Apple ja ein sorgsam behütetes und gehegtes Ökosystem geschaffen, mit - zumindest unter Mac OS X - exzellenter Anbindung an den Desktop (bei Einsatz der Standardanwendungen Adressbuch und iCal), Cloud-Integration mittels MobileMe und unzähligen Anwendungen im hauseigenen AppStore. Windows Mobile hat ähnliches zu bieten, die Kommunikation mit dem Desktop läuft - zumindest unter Windows - ebenfalls reibungslos. Ein Zeitpunkt für die Integration in die Cloud freilich steht (Sie gestatten das Wortspiel) indes in den Wolken, noch ist der entsprechende Dienst nicht für jedermann zugänglich. Android hat es derzeit schwer, da mitzuhalten. Ein Hauptgrund ist die bestenfalls rudimentäre Anbindung an gängige Desktop-PIMs. Durchgängige "Two-Way-Sync"-Lösungen sind beispielsweise nur von unabhängigen Entwicklern bzw. Firmen zu haben. Hier wird Google noch viel investieren müssen. Natürlich bedeutet dies nicht, dass das G1 damit automatisch zu einer schlechten Wahl wird. Es heisst nur, dass man sich vollständig auf Googles Anwendungen einlassen muss. Ich habe beispielsweise alle Kontakte und Kalendereinträge in die entsprechenden Weblösungen importiert. Ab diesem Zeitpunkt läuft alles wie am Schnürchen. Und dann macht die Arbeit mit dem Telefon auch Riesen-Spass. Im übrigen trifft das "sich auf Vorhandenes einlassen müssen" ja auch auf die anderen Plattformen zu. Und was den AppStore betrifft: sicher ist Apple meilenweit voraus, aber Android hat wesentlich mehr zu bieten als Windows Mobile.
In der nächsten Zeit werden Sie sicher noch den einen oder anderen Eintrag zu diesem Thema lesen können, und irgendwann werde ich sicher auch eine Anwendung ankündigen.

2009-02-07

Schöner aufzählen

Als Swing-Entwickler hadert man gelegentlich mit seiner Klassenbibliothek, wenn sie einem das Leben schwerer macht als nötig. Und dann gibt es wieder Momente, in denen Dinge ganz einfach sind. Von so einem Fall möchte ich in diesem Eintrag berichten.

Aufgabe war, eine Komponente zu bauen, die abgearbeitete Punkte auflistet, also eine bullet list, wie man so schön sagt. Wie üblich nehme ich das Ergebnis vorweg:

eine bullet list mit Swing
eine bullet list mit Swing

Um bullet lists in Swing zu realisieren, muss man keine neue Komponente erschaffen, sondern greift auf javax.swing.JList zurück. Das gewünschte Aussehen erhält die Liste durch einen eigenen ListCellRenderer. Wie dieser realisiert werden kann, zeigt die Klasse AufzaehlungListCellRenderer, die ich wie üblich unter der GNU General Public Licence version 2 veröffentliche. Der hier vorgeschlagene Weg ist selbstverständlich nur einer von vielen. Anstatt das Icon selbst zu zeichnen, kann man auch mit fertigen Bitmaps arbeiten. Allerdings hat meine Variante den Vorteil, dass sich die Farbe des Aufzählungselements an der Textfarbe (oder jeder beliebigen anderen) orientieren kann.