2020

Use custom fonts in JTextArea
9th Nov 2020

Through the years I have created tons of small examples, which illustrate a very specific task or use case. I decided to publish them as a series of small posts. Some topics may be rather old stuff, hopefully interesting nonetheless.

2018

Minor bugfix in one of my samples
31st Mar 2018

One reader of my book Android 7 pointed out that one of the samples was showing duplicate contacts. It turns out that this small glitch is present in the latest edition, too. In the just released Android 8 edition the bug is in Listing 5.13, MiniContacts.java, on page 198:

2016

On analyzing Android class and package dependencies
12th Jul 2016

Recently I had to analyze the class and package dependencies of an Android app. Jens Schauder maintains an awesome tool called Degraph. Its purpose is to test, visualize and manage dependencies of classes and packages in JVM byte code. So, I asked myself, why not use it? Well, although the Google toolchain used to rely on standard Java byte code as an intermediate step, this may no longer be the case in the future. But its final artifact (the end of the toolchain if you like) consists of one or more Dalvik executables. If you take a look at an Android application package (.apk), you will find a file named classes.dex. Depending on the size of the app, there may be other, similarly named ones, too.

Just a handful lines of code
19th Mar 2016

Allow me to introduce you to… Image Snatcher….

Welcome Android N preview, welcome Java 8
9th Mar 2016

Today, Google announced a very early Android N preview. During my talk at TopConf Linz in February I speculated that we would be seeing Java 8 language features through the Jack compiler. Well, it’ll be exactly that way.

Thoughts on the mobile enterprise (9)
21st Feb 2016

In a series of posts I will elaborate on how enterprise applications can embrace mobile devices.

Thoughts on the mobile enterprise (8)
7th Feb 2016

In a series of posts I will elaborate on how enterprise applications can embrace mobile devices.

Logging in Gradle build scripts
24th Jan 2016

Did you know that it is really easy to log something in your Gradle build files? As the Gradle documentation explains, Gradle adds two log levels: QUIET is used for important information messages, whereas LIFECYCLE should be used to log progress information messages.

Thoughts on the mobile enterprise (7)
17th Jan 2016

In a series of posts I will elaborate on how enterprise applications can embrace mobile devices.

Thoughts on the mobile enterprise (6)
16th Jan 2016

In a series of posts I will elaborate on how enterprise applications can embrace mobile devices.

Thoughts on the mobile enterprise (5)
10th Jan 2016

In a series of posts I will elaborate on how enterprise applications can embrace mobile devices.

Thoughts on the mobile enterprise (4)
9th Jan 2016

In a series of posts I will elaborate on how enterprise applications can embrace mobile devices.

A look in the crystal ball
4th Jan 2016

There has been quite a buzz around Android N (supposedly to be released some time this year) switching to OpenJDK. But what exactly could that mean? What parts or components might be affected?

2015

Thoughts on the mobile enterprise (3)
27th Dec 2015

In a series of posts I will elaborate on how enterprise applications can embrace mobile devices.

Thoughts on the mobile enterprise (2)
25th Dec 2015

Welcome to the second installment of my series about the mobile enterprise.

Android to reach out for desktops?
22nd Dec 2015

You won’t need a crystal ball to see the future of Android. Android is reaching out for the desktop. As ars technica points out in a superb article there is quite some way ahead. But there is already a lot there. Yes, right now there is no real window support (available to end users). But earlier reports made it clear that Google is working on supporting split screen windows, which we can see in Windows 10 and on the iPad Pro, and more. So, to take an educated guess, we will see this in Android 7. Once rolled out, it’ll be up to Google and third party vendors alike to adapt their apps as fast as possible.

Thoughts on the mobile enterprise (1)
19th Dec 2015

In a series of posts I will elaborate on how enterprise applications can embrace mobile devices.

Reflections on a suggested coding convention
17th Dec 2015

Today I read an interesting post by Sam Atkinson about a few new Java coding conventions. One of his suggestions is to use zero comments. While I am not saying the idea per se is wrong I am suggesting to stay open for exceptions. Consider this:

Ausgemauert
17th Dec 2015

In Android gibt es viele skurrile Dinge. Mancher Leser dieses Blogs mag sich an meinen Talk Android Puzzlers erinnern. Nicht hinein geschafft hatte es die Stringkonstante BRICK. Über sie ist viel geschrieben und spekuliert worden, echten Schaden angerichtet hat sie wohl nie. Und mit Android 6 ist sie nun Geschichte. R.I.P.

Clip4Moni unter Linux
15th Sep 2015

Heute wollte ich meine kleine Textschnipselverwaltung Clip4Moni in mein virtuelles Ubuntu 14.04 integrieren. Die .jar-Datei als automatisch startende Anwendung zu hinterlegen, sollte doch eigentlich ein Kinderspiel sein. Oder? Nicht ganz. Clip4Moni wollte nämlich einfach nicht starten… Pfade? Korrekt. Java? Vorhanden und im Suchpfad.

Sonntägliches Kaffeesatzlesen
13th Sep 2015

Heute schiebe ich mal einen zweiten Post nach… Bei einer schönen Tasse Kaffee philosophiert es sich so gut… :-)

Marshmallows mögen keine analogen Uhren
13th Sep 2015

Ab API-Level 23 gilt die View AnalogClock als veraltet. Ich verneige mich vor der Komponente mit einer Abbildung aus meinem Android-Buch.

ArraySet (neu in Marshmallow)
7th Sep 2015

Es sind nicht immer die großen Neuerungen, die Entwicklern das Leben leichter machen. Auch die kleinen Dinge können helfen. Ob dies für die neue Klasse android.util.ArraySet zutrifft, sollte jeder für sich selbst entscheiden. Sie soll, so die Doku, effizienter mit dem Speicher umgehen als ein traditionelles HashSet. Ich zitiere:

DatePicker Dilemma
22nd Aug 2015

Ich habe kürzlich mein Nexus 5 mit der aktuellen Android 6-Preview bespielt. Nach der Installation von TKWeek war ich irritiert, dass ein altes Problem wieder da zu sein schien: die App zeigt eine Kalenderblatt-Ansicht anstelle einer eigentlich gewünschten Tag-Monat-Jahr-Auswahl:

Es will einfach nicht klappen, Ausgabe 20150712
12th Jul 2015

Seit vielen Versionen ist es out of the box möglich, aus Java heraus Scriptsprachen aufzurufen. Der JSR 223 (Scripting for the Java Platform) hat nämlich schon mit Java SE 6 Einzug in die Plattform gehalten.

Schöne neue Welt, Teil 3
3rd Jul 2015

In meinem vorherigen Post hatte ich eine Lösung für das nicht so ganz einfache Speichern von Fenstergröße und -position in JavaFX angedeutet. Wer sich meine Implementierung ansehen möchte, sollte einen Blick auf folgendes Bitbucket Snippet werfen.

Hätten Sie’s gewusst? Project ThreeTen
20th Jun 2015

Das Java-Ökosystem ist so riesig, dass man eigentlich gar nicht alles kennen kann… Zumindest ging mir das so mit ThreeTen. Ziel dieses Projekts war die Implementierung von JSR 310 Date and Time API in das JDK 8. Dies ist seit geraumer Zeit abgeschlossen; das Projekt wurde beendet. Die Weiterentwicklung findet in den bewährten OpenJDK-Prozessen statt. Spannend ist aber, dass es einen Backport für Java SE 6 und 7 gibt. Dieser lässt sich dank Maven leicht in eigene Projekte integrieren:

Living in the past (Teil 2)
9th May 2015

In einem vorherigen Post habe ich angedeutet, dass man unter neueren Android-Versionen Live Folder noch nutzen kann, obwohl Google die korrespondierenden Klassen mit API-Level 14 für veraltet erklärt und den Zugriff über den Home Screen ausgebaut hat. Das Installieren einer App, die Live Folder bereitstellt, klappt selbst unter Android 5.1 noch reibungslos. Die beteiligten Frameworksklassen sind also (zum Glück) noch vorhanden. Eigentlich ist das auch logisch, denn das harte Entfernen hielte ich schon für einen ziemlich signifikanten Einschnitt. Über den Home Screen ist das Hinzufügen von Live Foldern aber nicht mehr möglich. Die Frage ist also, wie man Zugriff erhält. Hierzu muss man wissen, dass Live Folder keine Benutzeroberfläche bereitstellen, sondern nur die Daten, und zwar in Gestalt eines (auf eine ganz bestimmte Weise konfektionierten) Content Providers. Die Idee ist deshalb, selbst für die UI zu sorgen, und den Content Provider einfach nach seinen Daten zu fragen. Die folgende Activity zeigt einen entsprechenden Proof of Concept, den ich Tin Opener genannt habe. Ich werde die App in den nächsten Tagen auf Bitbucket bereitstellen. Wenn das erledigt ist, füge ich diesem Post einfach einen Kommentar hinzu.

Seifenkisten auf Abwegen
14th Apr 2015

Der Zugriff auf (üblicherweise) leichtgewichtige REST-Webservices ist unter Android kein Problem – sein Java-Erbe verhilft dem kleinen grünen Roboter zu einem ansehnlichen (Netz)Werk(zeug)-Koffer. Nur mit den (meist) etwas schwergewichtigeren SOAP-Webservices will es “out of the box” nicht so recht klappen. Zwar hat Java mit JAX-WS ab Java SE 6 entsprechende Klassenbibliotheken an Board, aber Androids Harmony-Spin-off ist irgendwie bei Java 1.5 stehen geblieben (naja, skurrile Erweiterungen und Portierungen mal außen vor gelassen). Glücklicherweise gibt es zu jedem Java Specification Request eine Referenzimplementierung. Bis einschließlich JAX-WS RI 2.2.6 ist “nur” Java SE 5 erforderlich. Warum also nicht einfach die Runtime-Bibliotheken mit einer Android-App ausliefern, und auf diese Weise auf SOAP-Services zugreifen können? Der Abschnitt Jar dependency der Release Notes listet auf, welche Bibliotheken der App hinzugefügt werden müssen. Eigentlich könnte man das Unterfangen an dieser Stelle abbrechen, denn die 18 Jars bringen üppige 4,8 MB auf die Waage. Wer möchte das schon als zusätzlichen Ballast mitgeben, “nur” um einen Webservice aufzurufen? Aber falls der Forscherdrang siegt, und man die Jars in das libs-Verzeichnis des Android-Projekts kopiert, wartet die nächste unangenehme Überraschung.

2014

Projekt aus Android Studio Recent Projects entfernen
29th Dec 2014

Auf dem Willkommensbildschirm von Android Studio gibt es eine Liste der kürzlich geöffneten Projekte. Wenn man die leeren muss, um z. B. Screenshots für ein Buch anzufertigen , kann man mit den Cursortasten das gewünschte Projekt ansteuern oder mit der Maus darüber fahren und dann die Taste Entf drücken.

Android-Log-Tags kurz halten
27th Dec 2014

Es gilt unter Android als common practice, eine Konstante TAG zu definieren, die den Namen einer Klasse enthält, und bei Log-Ausgaben übergeben wird. Google macht das in seinen Beispielen oft so:

Navigationsproblem in der Android-Kontakte-App lösen
14th Dec 2014

Meine App TKBirthdayReminder delegiert das Anlegen von Kontakten an die dafür zuständige App. Das – immer noch geniale - Intent-System macht dies möglich. Nachdem der Anwender einen neuen Kontakt hinzu gefügt hat, erscheint in der App ein Dialog, der das Geburtsdatum abfragt. So zumindest die Theorie. Ganz offenkundig hat das schon seit geraumer Zeit nicht mehr funktioniert. Da ich das Programm etwas fitter für Lollipop machen wollte, habe ich mal wieder damit gespielt, und bin prompt in das Problem gelaufen. Die Doku weiß hierzu folgendes zu berichten:

Benachrichtigungen auf Wearables
11th Oct 2014

In einem vorherigen Post hatte ich Ihnen berichtet, dass Min Time nun Benachrichtigungen zum zeitlichen Verlauf eines Talks ausgibt, und dass diese auch auf Android Wear-Geräten erscheinen. Letzteres ist grundsätzlich unspektakulär, weil es – eigentlich – von Haus aus geschieht. Natürlich wäre dies nicht bloggenswert, wenn es nicht ein entscheidendes Caveat gäbe. Hierzu ein Beispiel:

Nachhaltig programmieren
25th Jan 2014

Im Teil 29 von Ultimate Swing hatte ich Ihnen gezeigt, wie leicht man mittels Drag and Drop in Notes and Tasks Aufgaben hinzufügen kann. In diesem Zusammenhang gab es eine kleine Hausaufgabe:

Wie geht es weiter mit Windows?
18th Jan 2014

In seinem Artikel Windows 9 in 2015: Desperation isn’t pretty beschäftigt sich Steven J. Vaughan Nichols mit der Frage, wie es mit Microsoft und Windows weiter geht. Die These: Windows 8 war ein Reinfall und mit dem schon 2015 kommenden Nachfolger wird es nicht besser. Sein Vorschlag: Windows 8 vergessen und mit einem generalüberholten Windows 7 einen Neustart machen. Denn: die Leute hassen den neuen Look und lieben Aero.

Leaking this in constructor
10th Jan 2014

Manche Dinge lassen sich sehr schnell beheben. Träge, wie man nun mal ist, schiebt man scheinbare Kleinigkeiten aber oft zu lange vor sich her. Hier also ein Appell an das schnellere Beseitigen von Unzulänglichkeiten. Im Quelltext von Notes and Tasks finden sich diverse Stellen, an denen in NetBeans ein Leaking this in constructor moniert wird. Hier ein Beispiel:

Ultimate Swing, Teil 30
6th Jan 2014

Willkommen zurück zu einer neuen Folge meiner unendlichen Geschichte über Swing. Heute begeben wir uns in die Tiefen der privaten Teile der Klassenbibliothek. Und zwar, um dort ein wenig zu spicken… Notes and Tasks hat eine Eingabezeile, die mit dem Shortcut Alt-I aktiviert wird.

2013

Frohe Weihnachten und alles Gute für das Jahr 2014
26th Dec 2013

Ich wünsche den Besucherinnen und Besuchern meines Weblogs frohe Weihnachten und alles Gute für das neue Jahr 2014. Das nun zu Ende gehende 2013 hat Zeit für den einen oder anderen Post gelassen, gerne hätte ich mehr geschrieben. Für alle Kommentare bedanke ich mich herzlich. Ich freue mich auch weiterhin über Anregungen, Lob und Tadel.

Auf Telefonie prüfen (Android-Tipp)
17th Oct 2013

Manchmal kann es nützlich sein, auf das Vorhandensein oder Fehlen einer bestimmten Funktion zu prüfen. Der folgende Zweizeiler liefert true, wenn Telefoniefunktionen verfügbar sind.

Kenne Dein API – die praktische Hilfsklasse Pair
13th Oct 2013

Die Klassenbibliothek von Android ist im Laufe der Jahre ziemlich umfangreich geworden. Viele praktische Helfer könnten den Programmieralltag erleichtern. Aber nicht jede Klasse wird oft genug eingesetzt. Ein Beispiel ist Pair. Sie gibt es schon seit der ersten Ausgabe von Eclair (API Level 5). Das war Ende 2009. Grund genug, sie mit ein paar Sätzen zu würdigen.

Ultimate Swing, Teil 29
24th Aug 2013

Ich habe in letzter Zeit ein paar Verbesserungen an Notes and Tasks und der Schuhschachtel (Sie erinnern sich vielleicht: ich fasse potenziell wiederverwendbare Teile zu diesem Mini-Framework”chen” zusammen) vorgenommen. Neu ist beispielsweise das Interface IController. Es enthält die Methoden setup(), getModel() und getView(). Die beiden letztgenannten sind praktisch, weil übergeordnete Controller nicht für jedes Modell und jede Sicht untergeordneter Controller eigene Referenzen halten müssen. Die Klasse MainController von Notes and Tasks nutzt dies. Sie ist übrigens kein IController, da sie ja schon das Interface ApplicationCallback implementiert und damit den Lebenszyklus der Anwendung steuert. Natürlich ist auch das eine Art Controller. Die Methode setup() von IController-Implementierungen wird auf dem EDT aufgerufen. Hier können Bedienelemente mit Werten aus dem Modell befüllt oder Einstellungen aus den Preferences übernommen werden.

Ultimate Swing, Teil 27
4th Aug 2013

Heute möchte ich nicht viel über Programmierung erzählen, sondern ein paar Worte zum Thema Ergonomie sagen. Bitte sehen Sie sich den folgenden Screenshot etwas genauer an:

Ultimate Swing, Teil 26
20th Jul 2013

Wenn Sie Notes and Tasks schon einmal selbst ausprobiert haben, ist Ihnen sicherlich aufgefallen, dass Größen- und Positionsänderungen des Anwendungsfensters verloren gehen, wenn Sie das Programm beenden und neu starten. Ich habe kürzlich eine aktualisierte Version in das Repository eingecheckt, die zeigt, wie leicht Java und Swing Ihnen die Speicherung (und Abfrage) von solchen Einstellungen machen.

Ultimate Swing, Teil 25
24th Jun 2013

Erinnern Sie sich noch an meine lose Folge von Posts zu Swing? Nach einer längeren Pause möchte ich den Faden wieder aufnehmen und in den folgenden Monaten den einen oder anderen Kniff zum Besten geben. Außerdem gibt es ja noch das im Rahmen der Serie begonnene Notes and Tasks, das schon in seinem frühen Stadium zu schön ist, um es nicht zu vollenden. Die Quelltexte habe ich in ein Subversion-Repository gepackt, auf das Sie über die Projekthomepage von Notes and Tasks zugreifen können. Sie erinnern sich vielleicht, dass sich die letzten Folgen um Look and Feels gedreht haben. Ich habe auf Basis von Synth einige Komponenten so gestaltet, dass sie an den (schon länger nicht mehr so genannten) Metro-Look von Microsoft erinnern. Mir ging und geht es dabei nicht darum, eine möglichst genaue Kopie anzufertigen. Eher ist es eine Verneigung vor dem Mut Redmonds, diesen radikalen Neubeginn zu wagen. Sicher gibt es an Windows 8 noch das eine oder andere zu drehen, aber die UI ist wegweisend. In diesem Post möchte ich mein Look and Feel, das ich übrigens UTLAF (raten Sie doch einmal, wofür UT steht) getauft habe, um die Fähigkeit erweitern, Radio buttons zu rendern. Auch Windows Store apps kennen Radio buttons. Sie sind wie eh und je rund. Diese Seite gibt einen schönen Überblick über die so genannten selection controls, die Windows Store apps zur Verfügung stehen. UTLAF wird mit der langen Tradition runder Radio buttons brechen. Wie die korrespondierenden Grafiken aussehen, ist im folgenden Screenshot dargestellt. Ich greife dabei das von mir schon mehrfach verwendete Orange (ffa000) wieder auf.

Kaffeesatz lesen Ausgabe 03/2013
5th Mar 2013

Das Jahr ist noch jung, doch wir haben schon zwei medienwirksame Ereignisse hinter uns gebracht. Da war die Consumer Electronics Show in Las Vegas, und natürlich der Mobile World Congress in Barcelona.Beide Ereignisse waren voll von Android, Windows (Phone) 8 und Blackberry 10.

2012

Ultimate Swing, Teil 24
17th Sep 2012

Lassen Sie uns noch ein bisschen an unserem Look and Feel basteln… In diesem Post zeige ich Ihnen, wie wir Checkboxen wieder mit ihren Kästchen und Häkchen versehen – zur Zeit fehlen diese ja noch. Der folgende Screenshot zeigt 6 Grafiken, die wir hierfür verwenden werden.

Ultimate Swing, Teil 23
16th Sep 2012

Ist Ihnen aufgefallen, dass ich im XML-File meines Look and Feels den Link auf den zugehörigen Artikel in den Java Tutorials versteckt habe? Das Dateiformat hat eine eigene Beschreibung. Mein Tipp: übernehmen Sie diesen Pfad in Ihre XML-Datei, dann müssen Sie nie lange suchen. Wenn Sie sich meine Beispiel-Datei aus dem letzten Post ansehen, stellen Sie fest, dass die meiste Arbeit innerhalb von -Elementen gemacht wird. Dann gibt es noch das Element . Beide sind in eingebettet. Wie Sie bereits wissen, unterteilt Synth Komponenten in Regionen. Das Aussehen wird auf Java-Ebene durch SynthStyles festgelegt. Diese finden ihre Entsprechung in im Element der XML-Datei. Mit sagen Sie dem Look and Feel, auf welche Region sich eine Stildefinition beziehen soll. Fehlt eine solche Bindung, wird die entsprechende Region nicht dargestellt. Deshalb ist es bewährte Praxis, einen Basis-Stil an JEDE Region zu binden. Hier zur Erinnerung ein Ausschnitt aus meiner Beispiel-Datei:

Ultimate Swing, Teil 22
15th Sep 2012

Sie wissen ja schon, wie das bei mir ist – wenn mich das Thema Mobilty allzu zu sehr nervt, kommt ein Post zu Swing. Über austauschbare Look and Feels habe ich schon mehrfach gebloggt, zuletzt ging es um TKPLAFUtility. Heute (und sehr wahrscheinlich weiteren Folgen) beschäftige ich mich mit Synth, Swings Look and Feel-Baukasten. Ich möchte Synth nutzen, um ein Windows Phone und Windows 8 nachempfundenes Look and Feel zu realisieren.

TKWeek ist heute Amazons Free App of the day
10th May 2012

Heute konnten Amazon-Kunden in den Vereinigten Staaten TKWeek kostenlos herunterladen. Ich hatte schon darüber berichtet, dass die Verkäufe im Amazon Appstore for Android recht gut laufen, vor allem wenn man sich ansieht, wie viele Länder Google Play abdeckt.

Ultimate Swing, Teil 21
31st Mar 2012

Nach einer etwas längeren Pause mal wieder mein anderes Steckenpferd - Ultimate Swing. Wie Sie aus Folge 20 wissen, kennt Swing austauschbare Look and Feels. Diese können, wie Sie später noch sehen werden, recht einfach in eigenen Programmen verwendet werden. Setzt eine Anwendung das Look and Feel jedoch nicht explizit, bestimmt Swing, welches verwendet wird. Diese Regeln sind zumindest in Teilen plattformabhängig und haben sich im Laufe der Zeit auch leicht geändert. Schon immer hat es aber die Möglichkeit gegeben, das Standard-Look and Feel in eine Datei einzutragen, die dann von Swing ausgewertet wird (wenn das Programm das Look and Feel nicht setzt). Vor vielen Jahren habe ich ein Programm geschrieben, das diese Datei anlegt und editiert. TKPLAFUtility tut noch immer seinen Dienst:

Ultimate Swing, Teil 19
1st Feb 2012

Auch in diesem Teil sehen wir uns ein Entwurfsmuster an, dass seine Wurzeln in den verteilten Anwendungen hat. Mit dem Data Transfer Object werden Daten zum Beispiel von der Geschäftslogikschicht zur Präsentationsschicht gesendet.In welchen Szenarien man das nutzt, wurde viel und kontrovers diskutiert. Wie üblich werde ich mich nicht daran beteiligen. Sehen wir uns stattdessen eine Implementierung an.

```java public class Category implements Serializable { private static final long serialVersionUID = -634769734481963428L; private String descr; private String id; private transient int tasks;

Ultimate Swing, Teil 18
22nd Jan 2012

Im vorangehenden Beitrag hatte ich Ihnen das Business Delegate Muster nahegelegt und eine Beispiel-Implementierung gezeigt. Es gibt Ihnen die Möglichkeit, die Präsentationsschicht fachlich anders zu strukturieren, als es die Geschäftslogik (das Backend) vielleicht vorsieht. Dies ist unter anderem der Fall, wenn Ihre Anwendung eine Art Mashup realisiert, also die Ergebnisse verschiedener Serviceaufrufe kombiniert. __Achtung: Es ist natürlich nicht originäre Aufgabe der Präsentationsschicht, Services zu orchestrieren. In einer Enterpriseanwendung würde selbstverständlich das Backend dies übernehmen. Mein Szenario geht davon aus, dass Sie keine klassische verteilte Anwendung bauen möchten, sondern “nur” externe Dienste nutzen (also eigentlich einen Fat Client coden).

Ultimate Swing, Teil 17
19th Jan 2012

Kaum ist der Urlaub beendet, werden die Abstände zwischen zwei Posts wieder länger… Immerhin hatten Sie auf diese Weise Gelegenheit, wieder etwas aufzuholen. Haben Sie noch Spaß an der Serie? Zu erzählen gibt es noch sehr viel. Zum Beispiel über Schnittstellen. Wie Sie wissen, greift Notes und Tasks derzeit auf das lokale Dateisystem zu und liest und schreibt XML-Dateien. Später werden wir das aber gegen einen Zugriff auf Google Konten austauschen. Damit dies keinen Einfluss auf die Implementierung hat, orientieren wir uns an bewährten Mustern aus der Java EE-Programmierung. Bei mehrschichtigen Anwendungen erfolgen die Methodenaufrufe zum Speichern und Auslesen von Daten über mehrere Schichten hinweg. Um die Präsentationsschicht von der Geschäftslogik zu entkoppeln, wird gerne das Business Delegate Muster verwendet. Eine zu starke Kopplung zwischen den beiden Schichten kann nämlich zu verschiedenen Problemen führen. Beispielsweise erschwert sie die Wartung oder Weiterentwicklung der verschiedenen Schichten. Außerdem sind einzelne Komponenten schwerer austauschbar. Schließlich ist die Präsentationsschicht labil gegenüber größeren Veränderungen in der Geschäftslogikschicht: diese führen oft zu ungewollten Anpassungen in der Präsentationsschicht.

Unnötige Fehler
8th Jan 2012

Was ist an folgendem Quelltextfragment falsch?

Gadgets, Gadgets, Gadgets
3rd Jan 2012

Noch ist die Berichterstattung über neue Gadgets, die wir dieses Jahr erwarten dürfen, verhalten. Das wird aber nicht mehr lange so bleiben. Denn vom 10. bis 13. Januar findet die CES statt. Gespannt sein darf man auf die Beta von Windows 8. Neugierig bin ich auch, ob der Tablet-Boom weiter anhält.

Ultimate Swing, Teil 13
2nd Jan 2012

Im 10. Teil habe ich das Thema fachliche Transaktionen gestreift. Wie man technisch damit umgeht, hatte ich seinerzeit offen gelassen. In diesem Post wollen wir darauf zurückkommen. Sehen Sie sich als Einstieg bitte das folgende Codefragment an:

Ultimate Swing, Teil 12
1st Jan 2012

Ich hoffe, Sie sind gut in das Jahr 2012 gestartet und haben weiterhin Lust auf Swing. Wie an anderer Stelle bereits gesagt wird es natürlich auch weiterhin andere Themen, zum Beispiel rund um Android und Mobile Computing geben. Das Speichern von (neu eingegebenen) Kategorien ist bisher recht schlampig implementiert:

2011

Ultimate Swing, Teil 11
30th Dec 2011

In meinem vergangenen Post habe Sie mit ziemlich viel Theorie versorgt. Diesmal werden wir uns ansehen, wie das ganze in Notes and Tasks realisiert wird. Zunächst die Schleife, die beim Löschen von Kategorien durchlaufen wird:

Ultimate Swing, Teil 10
29th Dec 2011

Das folgende Quelltextfragment taucht so oder in ähnlicher Form an mehreren Stellen von Notes and Tasks auf:

Ultimate Swing, Teil 7
15th Dec 2011

Beim Schreiben einer Swing-Anwendung müssen Sie prüfen, welche Operationen Sie auf dem EDT ausführen lassen, und welche besser in einem eigenen Thread abgearbeitet werden. Die bisherigen Schlüsselerkenntnisse nochmals kurz zusammengefasst:

Ultimate Swing, Teil 6
9th Dec 2011

Wie Sie aus dem letzten Post wissen, ist es keine gute Idee, länger andauernde Aufgaben auf dem EDT auszuführen. Um Ihre Anwendung nicht zu blockieren, lagern Sie entsprechende Codeteile stattdessen in einen eigenen Thread aus. Wie so etwas aussehen kann, demonstriert Better. Hierbei handelt es sich praktisch um einen Klon von Bad. Nur die Implementierung der Methode actionPerformed() habe ich ausgetauscht.

Ultimate Swing, Teil 5
4th Dec 2011

Wenn jemand einen Blogpost mit einer scheinbar leicht zu beantwortenden Frage beendet, ist es fast schon offensichtlich, dass die Antwort nicht wie erwartet ausfällt. Natürlich ist es keine gute Idee, Swing-Anwendungen ausschließlich auf dem EDT ablaufen zu lassen. Sehen Sie sich hierzu das folgende Programm an:

Ultimate Swing, Teil 3
28th Nov 2011

Ich habe die Anwendung ein kleines bisschen erweitert. Auf einer dritten Registerkarte können nun Kategorien angezeigt und (später) bearbeitet werden.

Ultimate Swing, Teil 2
25th Nov 2011

Zu Beginn möchte ich mich bei allen, die einen Kommentar hinterlassen haben, herzlich bedanken. Ich freue mich, dass mein Projekt Zuspruch findet und Interesse weckt.

Tschüs Harmony, und vielen Dank...
4th Nov 2011

…ich bin gespannt, ob und wenn ja welche Auswirkungen das auf den Rechtsstreit zwischen Google und Oracle hat…

Heiter bis wolkig
6th Sep 2011

Irgendwann im September oder Oktober wird Apple das iPhone 5 vorstellen. Dabei geht es nur vordergründig um Hardware oder iOS 5. Das eigentlich Neue ist iCloud. Nicht, weil es so etwas vorher noch nie gegeben hat. Die Speicherung von Daten in den nicht greifbaren Weiten des Internets ist streng genommen ein alter Hut. Nein, Apple wird das zugrunde liegende Konzept massentauglich machen. Das von Vielen misstrauisch beäugte iTunes Match wird das Vehikel des Erfolgs werden. Lassen Sie mich das erklären.

Aus eins mach zwei - Widgets gekonnt geklont
3rd Feb 2011

Widgets geben in ihren Konfigurationsdateien an, wie viel Platz auf dem Home Screen sie gerne einnehmen möchten. Da diese Datei in das apk gepackt wird, ist es nicht ohne weiteres möglich, die Größe zur Laufzeit (zum Beispiel in einem Konfigurationsdialog) zu ändern. Man behilft sich damit, einfach mehrere Widgets anzubieten.

2010

Wichtiger Hinweis
30th Dec 2010

Zum 31. Januar 2011 endet meine Domain Thomas-Kuenneth.com (man beachte den Bindestrich). Ab 1. Februar bin ich nicht mehr für den Inhalt der oben genannten Domain verantwortlich. Bitte löschen Sie ggf. etwaige Lesezeichen.

Hands on - iPad
8th Aug 2010

Dieses Weblog dreht sich vor allem um Java und Android. Gelegentlich müssen Sie, liebe Leserin, lieber Leser, aber auch mit Posts zu anderen mobilen Geräten rechnen. Heute ist so ein Tag. :-)

An der Oberfläche gekratzt
18th Jun 2010

Vor ein paar Tagen hatte TechCrunch berichtet, das Android-Team werde sich für das Ende 2010 erwartete Gingerbread vor allem die Benutzeroberfläche vornehmen. Ziel sei, Hersteller-seitige Aufsätze und Erweiterungen so unnötig wie möglich zu machen. In der Tat haben HTCs Sense, Motorolas Motoblur/Ninjablur, TouchWiz von Samsung und Sonys schöne Zugaben zum Xperia X10 bislang immer zu langen Wartereien auf neue Firmwareversionen geführt. Dem gegenüber steht aber der zum Teil erhebliche Mehrwert, den die genannten Aufsätze bieten.

Mobiles Multitasking, Teil 2
14th May 2010

In diesem zweiten Teil meiner Betrachtungen zum Thema Multitasking auf mobilen Geräten möchte ich die erste der beiden Fragen, die ich in diesem Zusammenhang formuliert hatte, aufgreifen und (hoffentlich) beantworten: Wie stellt sich Multitasking gegenüber dem Benutzer dar?

Mobiles Multitasking
13th May 2010

Am 8. April hatte Steve Jobs eine Auswahl von neuen Funktionen des für den Sommer erwarteten iPhone OS 4 vorgestellt. Eine davon ist Multitasking, vereinfacht ausgedrückt also die Fähigkeit, mehrere Programme gleichzeitig auszuführen. Bislang schließen - von ganz wenigen Ausnahmen abgesehen - iPhone und iPod Touch nämlich das aktuell laufende Programm, wenn der Nutzer zum Home-Bildschirm wechselt. Nun kann man sich natürlich fragen, warum das so schlimm sein soll. Schon im Hinblick auf die im Vergleich zu “richtigen” Computern geringe Anzeigefläche wird niemand ernsthaft mit zwei Anwendungen parallel arbeiten wollen. Insofern wird immer nur die Oberfläche eines Programms zu sehen sein. Warum sollte also das zweite im Hintergrund unbemerkt vor sich hin werkeln und Rechenzeit und damit Strom verbraten? Die Antwort auf diese Frage wird schnell klar, wenn man sich ansieht, was die Benutzer mit Smartphones tun. Musik, Hörbücher oder Podcasts anhören, Bilder und Videos betrachten, Internet-Streaming-Dienste nutzen, E-Mails lesen oder schreiben, surfen, Termine organisieren. Und - gelegentlich - telefonieren. Viele dieser Tätigkeiten lassen sich kombinieren. Und dann braucht das System Multitasking.

James Gosling verlässt Oracle
11th Apr 2010

Der Erfinder von Java, James Gosling, hat Oracle verlassen. Auch wenn Gosling schon lange nicht mehr (zumindest nach außen hin sichtbar) die Entwicklung von Java bestimmt hat, so scheint mir das Fehlen DER Galionsfigur doch ein Problem zu sein, dem sich der neue Java-Eigentümer stellen muss. Die Community braucht Köpfe, mit denen sie sich identifizieren kann, die die Rolle einer, hm, Vaterfigur oder Mentor übernehmen.

Texte in Swing unterstreichen
14th Jan 2010

Um in Swing einen Text auf bestimmte Weise auszuzeichnen, also zum Beispiel halbfett oder kursiv erscheinen zu lassen, reicht ganz wenig Code (stamp ist ein JLabel, font eine Instanz von Font):

2009

Noch eine Datepicker-Komponente (diesmal von mir)
31st May 2009

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.

Gestaltung für Smartphones und den Desktop (4)
30th May 2009

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.

Gestaltung für Smartphones und den Desktop (3)
26th May 2009

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.

Gestaltung für Smartphones und den Desktop (2)
23rd May 2009

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.

Gestaltung für Smartphones und den Desktop
22nd May 2009

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.

Ein Laden für Java-Anwendungen?
21st May 2009

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?

Meine erste Anwendung für den Androiden
8th Mar 2009

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, d Das Programm selbst möchte ich in naher Zukunft über den Android Market Google Play anbieten.

Erste Eindrücke von einem "Open Source"-Handy
22nd Feb 2009

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.

2008

Be-Swing-t den Fokus wechseln
26th Nov 2008

Traditionell wechselt man mit Tab den Fokus. Der Anwender ist dieses Verhalten gewohnt, und deshalb sollte man sich sehr genau überlegen, ob man davon abweicht. Wenn es hierfür zwingende Gründe gibt, ist einem Swing zumindest bei der Realisierung sehr behilflich:

Kein Schwung mehr?
8th Nov 2008

Offen gesagt hat es mich gewundert, wie lange es gedauert hat, bis die Nachricht von Jeanette Winzenburg bzgl. Suns “Ausstieg” aus dem SwingX-Projekt so richtig Wellen schlug. Die Swing-Szene hat eben nur wenige prominente Köpfe. Einer davon ist Kirill Grouchnikov, der mit seinem Weblog-Eintrag den “global panic”-Knopf gedrückt hat. Logisch, dass Chris Adamson sogar im Editor’s Daily Blog auf java.net darauf Bezug nimmt.

Konstanten in Java
15th May 2008

In diesem Post möchte ich mich mit einem nur scheinbar banalen Thema befassen. Auf die Frage, wie man in Java Konstanten definiert, wird mancher schnell mit

Was wird aus dem Swing Application Framework?
8th May 2008

Hans Muller hat in einem Posting in der users-Mailingliste des Swing Application Frameworks seinen Wechsel von Sun zu Adobe bekannt gegeben. Welche Auswirkungen dies auf den JSR 296 hat, bleibt abzuwarten. Hans hat zwar angekündigt, bei der Suche nach einem neuen Fackelträger zu helfen. Wann jedoch eine neue Version des Prototyps erscheint, steht derzeit in den Sternen.

2007

Defensives Programmieren
18th Dec 2007

In meinem heutigen Eintrag möchte ich mich mit dem Thema Defensives Programmieren beschäftigen. Wenn Sie den Begriff (oder seine englische Entsprechung defensive programming) in das Eingabefeld der Suchmaschine Ihres Vertrauens eintragen, werden Sie sehr schnell entsprechende Wikipedia-Seiten finden. Die momentan aktuelle (nachgeschlagen am 18.12.2007) deutsche Fassung enthält eine aus meiner Sicht leider nur eingeschränkt tragfähige (weil unvollständige) Definition. Der Eintrag beschreibt nämlich (völlig zu Recht), was aus fachlicher Sicht zu tun ist, um angemessen auf Fehleingaben oder unvorhergesehene Ereignisse zu reagieren. Er lässt technische Belange aber nahezu vollständig außen vor.

Java Beans Teil 1
29th Nov 2007

Mit diesem Eintrag möchte ich eine lose Serie von Artikeln über JavaBeans beginnen. JavaBeans, oder kurz: Beans, sind (mit dem Ziel der Wiederverwendung entwickelte) Softwarekomponenten. Die Idee ist, kleine Einheiten (Komponenten) mit einem geeigneten Werkzeug zu einem größeren Ganzen (Applets und Anwendungen) zu kombinieren. Natürlich sind Komponenten keine Java-Erfindung.

Vereinfachte Verteilung mit One-JAR
28th Nov 2007

Es ist allgemein bekannt, dass man auf sehr vielen Plattformen eine Java-Anwendung durch Doppelklick auf die zugehörige .jar-Datei starten kann. Das Pendant für die Kommandozeile lautet java -jar archiv.jar. Damit dies funktioniert, muss das Archiv die Textdatei /META-INF/MANIFEST.MF enthalten. Eine ihrer Zeilen lautet