<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns="http://purl.org/rss/1.0/">
  <channel rdf:about="http://www.planetnetbeans.org/de/">
    <title>Planet NetBeans</title>
    <link>http://www.planetnetbeans.org/de/</link>
    <description>Planet NetBeans - http://www.planetnetbeans.org/de/</description>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=1017" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=997" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=905" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=871" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=853" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=847" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=821" />
        <rdf:li rdf:resource="http://www.nautsch.net/?p=597" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=787" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=719" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=710" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=679" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=653" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=638" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=624" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=979" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=974" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=955" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=942" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=596" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=921" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=587" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=916" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=911" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=905" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=896" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=877" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=869" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=864" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=536" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=857" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=850" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=843" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=835" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=832" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=502" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=818" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=822" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=807" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=803" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=782" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=780" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=771" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=767" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=758" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=750" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=745" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=737" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=729" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=712" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=705" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=671" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=696" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=682" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=646" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=639" />
        <rdf:li rdf:resource="http://blog.nigjo.de/netbeans/?p=486" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=624" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=618" />
        <rdf:li rdf:resource="http://www.aljoscha-rittner.de/blog/?p=603" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=1017">
    <title>Java Getriebe » NetBeans: Eigene Einstellungen für die eigene RCP Anwendung</title>
    <link>http://blog.nigjo.de/netbeans/2011/12/eigene-einstellungen-fur-die-eigene-rcp-anwendung/</link>
    <content:encoded>Erstellt man eine eigene Anwendung auf Basis der NetBeans Platform erstellt kommt man irgendwann unweigerlich an den Punkt das Resultat auch an die Endanwender verteilen zu wollen. Im Kontextmenü des Suiteprojekt liefert der Eintrag “Package as” alles was man dafür benötigt. Ein Problem gibt es nur, wenn man während der Entwicklung der eigenen Anwendung individuelle [...]</content:encoded>
    <dc:date>2011-12-22T14:06:40+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=997">
    <title>Java Getriebe » NetBeans: “Organize Imports” in NetBeans 7.1</title>
    <link>http://blog.nigjo.de/netbeans/2011/12/organize-imports-in-netbeans-7-1/</link>
    <content:encoded>Die neue Version von NetBeans steht kurz vor der Veröffentlichung. Die passende Wiki-Seite mit den Neuerungen ist nun auch online. Am meisten freut mich, dass nun endlich eine “Organize Imports” Funktion direkt in NetBeans integriert sein wird. Mir gefällt das ziemlich gut und deswegen werde ich die Arbeiten an meiner eigenen Version wohl einstellen. Danke [...]</content:encoded>
    <dc:date>2011-12-12T08:12:08+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=905">
    <title>Java Getriebe » NetBeans: Wie debugge ich einen Processor in NetBeans</title>
    <link>http://blog.nigjo.de/netbeans/2011/12/wie-debugge-ich-einen-processor-in-netbeans/</link>
    <content:encoded>Es ist schon nicht einfach einen eigenen Processor für Annotations zu schreiben, wenn man etwas Fehlerbehandlung einbauen möchte. Aber noch “schwieriger” ist es diesen Processor im Debugger betrachten zu können. Das Problem ist, dass sich die IDE im Grunde genommen selber debuggen muss. Zur IDE hat man in den seltensten Fällen ein Projekt, zu dem [...]</content:encoded>
    <dc:date>2011-12-01T13:48:56+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=871">
    <title>Java Getriebe » NetBeans: @ServiceProvider in einem JavaSE Projekt</title>
    <link>http://blog.nigjo.de/netbeans/2011/11/serviceprovider-in-einem-javase-projekt/</link>
    <content:encoded>Ich bin im Moment auf einem Annotation-Trip. Die Dinger sind cool. Vor allem in Zusammenhang mit ihren Processor Implementierungen. NetBeans macht es in seinen neusten Versionen selbst vor. So cool die XML Layer Strukturen zur Laufzeit auch sind, so uncool sind sie in dem Quellen zu pflegen. Dank des LayerGeneratingProcessors ist es aber verdammt einfach [...]</content:encoded>
    <dc:date>2011-11-22T13:20:44+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=853">
    <title>Java Getriebe » NetBeans: Ein Wrappermodul für ein JavaSE Projekt</title>
    <link>http://blog.nigjo.de/netbeans/2011/11/ein-wrappermodul-fur-ein-javase-projekt/</link>
    <content:encoded>Für eine NetBeans Rich Client Platform Anwendung ist es ein leichtes eine bestehende .jar-Datei in ein Modul zu kapseln. Das so genannte “Library Wrapper Module” steht im “New Project Wizard” zu Verfügung und man muss nur noch eine (oder mehrere) Java Archive auswählen, fertig. Den Rest erledigt die NetBeans IDE für uns. Das klappt prima, [...]</content:encoded>
    <dc:date>2011-11-10T10:14:30+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=847">
    <title>Java Getriebe » NetBeans: Annotation Processor for Main Popup Menus (Geertjan’s Blog)</title>
    <link>http://blog.nigjo.de/netbeans/2011/11/annotation-processor-for-main-popup-menus-geertjans-blog/</link>
    <content:encoded>Ich hatte den Entwurf für einen eigenen Artikel schon begonnen. Aber Geertjan war diesmal schneller: Annotation Processor for Main Popup Menus (Geertjan’s Blog).</content:encoded>
    <dc:date>2011-11-10T09:06:07+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=821">
    <title>Java Getriebe » NetBeans: NetBeans Suite als OmegaT Projekt exportieren</title>
    <link>http://blog.nigjo.de/netbeans/2011/10/netbeans-suite-als-omegat-projekt-exportieren/</link>
    <content:encoded>Meine Version der Übersetzungshilfe geht in die nächste Runde. Ich habe meinen “NetBeans Suite Translator” aktualisiert und im NetBeans Plugin Center hoch geladen. Die wichtigste Neuerung dabei ist ein Export aller Bundle Properties als OmegaT Projekt. Der Export ist eine erste Version die stark auf meine eigenen Bedürfnisse zugeschnitten ist und hat dementsprechend im Moment [...]</content:encoded>
    <dc:date>2011-10-19T13:14:27+00:00</dc:date>
  </item>
  <item rdf:about="http://www.nautsch.net/?p=597">
    <title>OlliN's » netbeans: netbeans 7 update and the license agreement dialog</title>
    <link>http://www.nautsch.net/2011/08/09/netbeans-7-update-and-the-license-agreement-dialog/</link>
    <content:encoded>&lt;p&gt;I’ve just updated NetBeans. The following dialog appeared:&lt;/p&gt; &lt;div style="width: 243px;" id="attachment_598" class="wp-caption alignnone"&gt;&lt;a href="http://www.nautsch.net/wp-content/uploads/netbeans70update.-license.dialog.png"&gt;&lt;img src="http://www.nautsch.net/wp-content/uploads/netbeans70update.-license.dialog-233x300.png" title="" height="300" width="233" alt="" class="size-medium wp-image-598" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;License
    Agreement Dialog&lt;/p&gt;&lt;/div&gt; &lt;p&gt;How many people read those &lt;strong&gt;85 263&lt;/strong&gt; lines of text &lt;em&gt;carefully&lt;/em&gt;?&lt;/p&gt;</content:encoded>
    <dc:date>2011-08-09T12:19:56+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=787">
    <title>Java Getriebe » NetBeans: Der Eclipse Code Formatter in NetBeans</title>
    <link>http://blog.nigjo.de/netbeans/2011/08/der-eclipse-code-formatter-in-netbeans/</link>
    <content:encoded>Der Code Formatter in NetBeans ist ja ganz nett und stellt auch einen rudimentären Support dar um den Sourcecode nicht komplett “versauen” zu lassen. Aber so richtig viel kann der nicht. Andere Open Source Projekte wie Jalopy, jindent oder Jacobe sind entweder veraltet, nicht vollständig frei oder komplett auf kommerziell umgestellt. Ich vermisse in NetBeans [...]</content:encoded>
    <dc:date>2011-08-05T19:56:01+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=719">
    <title>Java Getriebe » NetBeans: Ant-basierte Suite Projekte mit Jenkins erstellen</title>
    <link>http://blog.nigjo.de/netbeans/2011/07/ant-basierte-suite-projekte-mit-jenkins-erstellen/</link>
    <content:encoded>Auf dem letzten NetBeans Training wurde ich von Geertjan gefragt wie wir bei uns den Continuous Integration Server Jenkins dazu nutzen um unsere WZL Gear Toolbox automatisch generieren zu lassen. Das großen Problem ist, dass Jenkins zwar sehr einfach Maven Builds einbinden kann und zusammen mit Maven auch Suiteprojekte sehr einfach einzufügen ist aber für [...]</content:encoded>
    <dc:date>2011-07-26T14:04:21+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=710">
    <title>Java Getriebe » NetBeans: NetBeans Training an der RWTH Aachen</title>
    <link>http://blog.nigjo.de/netbeans/2011/07/netbeans-training-rwth-aachen/</link>
    <content:encoded>Wir nutzen seit über drei Jahren die NetBeans Platform als Basis für unsere eigene Anwendung. Vor knapp zwei Jahren bin ich in Göttingen auf den Source Talk Tagen gewesen und durfte den Ausführungen von Geertjan Wielenga, Toni Epple und Aljoscha Rittner lauschen. Eine Offenbarung. Schnell kam mir die Idee das ganz auch in Aachen zu [...]</content:encoded>
    <dc:date>2011-07-20T12:14:19+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=679">
    <title>Java Getriebe » NetBeans: “Savable” wird das neue “SaveCookie”</title>
    <link>http://blog.nigjo.de/netbeans/2011/06/savable-wird-das-neue-savecookie/</link>
    <content:encoded>Bisher wurden in NetBeans alle geänderten Daten über eine Implementierung von SaveCookie im Lookup markiert. Wurden die Daten verändert, kam der Keks ins Lookup, nach dem Speichern wurde es dort wieder heraus geholt. Die Plattform sorgte dann dafür, dass die SaveAll Action aktiviert wurde und beim Programmende gab es einen netten Dialog, in dem noch [...]</content:encoded>
    <dc:date>2011-06-12T10:18:19+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=653">
    <title>Java Getriebe » NetBeans: Toni Epple: Vorbereitungen für JDK 7</title>
    <link>http://blog.nigjo.de/netbeans/2011/05/press_this_vorbereitungen-fur-jdk-7/</link>
    <content:encoded>Toni Epple hat für JAXenter einen (längeren) Artikel mit einer Zusammenfassung der Neuerungen in NetBeans 7.0 geschrieben. Sein Fazit: Insgesamt ist NetBeans 7.0 ein solides Update ohne spektakuläre Überraschungen. Das NetBeans-Team hat sich mit dem neuen Release auf die wesentlichen Eigenschaften einer Java-Entwicklungsumgebung konzentriert. Die IDE wurde erwartungsgemäß besser mit dem Oracle-Stack integriert und an [...]</content:encoded>
    <dc:date>2011-05-04T09:23:01+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=638">
    <title>Java Getriebe » NetBeans: Organize Imports für NetBeans 7</title>
    <link>http://blog.nigjo.de/netbeans/2011/04/organize-imports-fur-netbeans-7/</link>
    <content:encoded>Neues NetBeans, neuer Editor. Und damit war auch eine neue Version meines “Organize Imports” Plugin fällig. Die “Mayor Version” des NetBeans Editors hat sich auf “3″ erhöht und damit sind wieder alle Plugins, die etwas mit selbigem anstellen nicht mehr kompatibel mit NetBeans 7. Im Plugin Center ist die Version 1.2.1 zum Download bereit, die [...]</content:encoded>
    <dc:date>2011-04-25T13:05:39+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=624">
    <title>Java Getriebe » NetBeans: Bundletexte zurück in den Quelltext</title>
    <link>http://blog.nigjo.de/netbeans/2011/04/bundletexte-zuruck-in-den-quelltext/</link>
    <content:encoded>Mit erscheinen der Version 7 der NetBeans Plattform sind auch einige neue Annotations hinzugekommen. Es scheint als würden die NetBeans Entwickler so langsam das Potential dieses Programmierkonstruktes nutzen wollen. Mit allen Konsequenzen. Eine dieser Neuerungen ist die Annotation @Message. Geertjan hat in seinem Blog bereits einen Kommentar darüber abgegeben. Ziel dieser Annotation ist es (wohl) [...]</content:encoded>
    <dc:date>2011-04-23T11:46:02+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=979">
    <title>JNBB - Joschs NetBeans Blog: BeanDev: New DZone Refcard for NetBeans 7.0 Platform</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/04/04/beandev-new-dzone-refcard-for-netbeans-7-0-platform/</link>
    <content:encoded>&lt;p&gt;Hi!&lt;/p&gt; &lt;p&gt;The new updated Refcard #80 by Heiko Böck, Anton Epple, Miloš Šilhánek, Andreas Stefik, Geertjan Wielenga, and Tom Wheeler for the brand new NetBeans 7 Platform is published.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/04/refzcard-80.png"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/04/refzcard-80.png" title="refzcard-80" height="830" width="642" alt="" class="size-full
    wp-image-980 alignnone" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You can find many informations about the NetBeans Platform, a getting started intro, main features, NetBeans Platform modules,&#160; NetBeans Platform APIs, reusable GUI components and&#160; more.&lt;/p&gt; &lt;p&gt;In this Refcard, you are introduced to the key concerns of the NetBeans Platform so that you can save years of work when developing robust and extensible applications.&lt;/p&gt; &lt;p&gt;Six pages packed with many informations,
    &lt;a href="http://refcardz.dzone.com/refcardz/netbeans-platform-70?oid=hom37739"&gt;download this Refcard #80 now&lt;/a&gt;!&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-04-04T09:59:03+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=974">
    <title>JNBB - Joschs NetBeans Blog: IDEDev: Bundle-Key Hyperlinks im Editor Quelltext</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/04/01/idedev-bundle-key-hyperlinks-im-editor-quelltext/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Bin gerade mit 1001 Sachen beschäftigt und habe mein Blog etwas vernachlässigt. Aber einen kleinen Tipp habe ich gerade zur Hand. In einem &lt;a href="http://www.aljoscha-rittner.de/blog/archive/2010/12/21/idedev-bundle-texte-direkt-im-quelltext/"&gt;älteren Blogeintrag&lt;/a&gt; erwähnte ich die Fähigkeit, dass NetBeans in den 7′er Dev-Builds Bundle Einträge in ein Code-Fold bringen kann. Es wird dann der Wert des Standard-Bundle angezeigt.&lt;/p&gt;
    &lt;p style="text-align: left;"&gt;Es gibt aber noch ein nettes Feature. Man kann mit der Strg-Taste + Mausklick nun auch direkt zur Bundle-Datei zum Schlüssel springen. Es funktioniert genau so, wie man auch zu Klassen, Methoden und Variablen-Deklarationen springen kann.&lt;/p&gt; &lt;p style="text-align: left;"&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/04/BundleJump.jpg"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/04/BundleJump.jpg"
    title="BundleJump" height="80" width="600" alt="" class="alignleft size-full wp-image-975" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="text-align: left;"&gt; &lt;/p&gt;&lt;p style="text-align: left;"&gt; &lt;/p&gt;&lt;p style="text-align: left;"&gt;Mit dem Klick wird die Bundle-Datei geöffnet und der Cursor auf den Schlüssel gesetzt. Wenn man nun die Tastenkombination Strg+1 drückt, wird diese Bundle Datei auch im Project Explorer selektiert (soweit man nicht sowieso eine automatische Selektion aktiviert
    hat).&lt;/p&gt; &lt;p style="text-align: left;"&gt;Beste Grüße!&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-04-01T09:04:21+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=955">
    <title>JNBB - Joschs NetBeans Blog: JavaFXDev: Screen capture tool with 200 lines and 500ms startup time</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/03/09/javafxdev-screen-capture-tool-with-200-lines-and-500ms-startup-time/</link>
    <content:encoded>&lt;p&gt;Hi!&lt;/p&gt; &lt;p&gt;Here is my next test with the JavaFX 2.0 ea release. I’ve created a 200-liner to capture parts from the desktop. The “Snipper” detects mouse dragging and two different key strokes (Escape and the letter ‘A’). The captured picture is automatically stored in the user.home/snapshot path.&lt;/p&gt; &lt;p&gt;Before I start to explain the code, I show a small picture about the different scene graph nodes:&lt;/p&gt; &lt;p&gt;&lt;a
    href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/03/layeredSnipper.jpg"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/03/layeredSnipper.jpg" title="layeredSnipper" height="550" width="849" alt="" class="aligncenter size-full wp-image-958" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;At the bottom is the Desktop (I use only the primary screen, but it’s possible to detect all additional screens). The stage is created by the JavaFX Launcher class. I modify the stage to
    a transparent style and fullscreen mode. The scene (embedded in the stage) captures the mouse events (button pressed, released and dragging). The scene itself has a transparent fill color and contains one group with three different nodes. In the KeyPane-Node I capture the key events. The node is focusable and transparent to mouse events (any mouse event sinks down to the scene). GlassPane is a node with a Shape created by the screen bounds with a rectangular hole. This hole is calculated by the mouse
    gestures from the user. At last I’ve a visual representation for the user interaction: a red rectangular lasso node.&lt;/p&gt; &lt;p&gt;&lt;span id="more-955"&gt;&lt;/span&gt;Disclaimer: &lt;em&gt;The solution here is based on the early access release through the &lt;a href="http://javafx.com/partners/"&gt;JavaFX partner&lt;/a&gt; program. This “best practice” may change significantly between now and the final version. However, I’ll show only a concept, not compilable code.&lt;/em&gt;&lt;/p&gt;
    &lt;p&gt;Here the start up:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; @Override&lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; start&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt;
    Stage stage&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; primaryStage &lt;span style="color: #339933;"&gt;=&lt;/span&gt; stage&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;Group&lt;/span&gt; group &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color:
    #003399;"&gt;Group&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; Scene scene &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Scene&lt;span style="color: #009900;"&gt;(&lt;/span&gt;group&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; scene.&lt;span style="color: #006633;"&gt;setFill&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color: #006633;"&gt;TRANSPARENT&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;// default is white&lt;/span&gt;&lt;br /&gt; &#160; &#160;
    scene.&lt;span style="color: #006633;"&gt;setCursor&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Cursor&lt;/span&gt;.&lt;span style="color: #006633;"&gt;CROSSHAIR&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; stage.&lt;span style="color: #006633;"&gt;setStyle&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;StageStyle.&lt;span
    style="color: #006633;"&gt;TRANSPARENT&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; stage.&lt;span style="color: #006633;"&gt;setFullScreen&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160;
    stage.&lt;span style="color: #006633;"&gt;setScene&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;scene&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; stage.&lt;span style="color: #006633;"&gt;setVisible&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; screenBounds &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; Screen.&lt;span style="color: #006633;"&gt;getPrimary&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getBounds&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; Screen.&lt;span style="color: #006633;"&gt;getPrimary&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getBounds&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Nothing special. Only few notes: The Scene-fill must be transparent and the Screen class provides more than the primary screen. But this small example captures only from the primary screen.&lt;/p&gt; &lt;p&gt;I have a special helper class named Rebounder. This class creates and manipulates the lasso rectangle and calculates the shape with the hole for the GlassPane. The KeyPane needs the Rebounder for a fullscreen capture. The
    scene mouse handlers are call the rebounder with the current mouse points.&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; Rebounder &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt; lasso&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000066; font-weight: bold;"&gt;double&lt;/span&gt; px&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000066; font-weight: bold;"&gt;double&lt;/span&gt; py&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; Rebounder&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br
    /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setFill&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setSmooth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight:
    bold;"&gt;false&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setStroke&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color: #006633;"&gt;RED&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;
    &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setStrokeWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setStrokeType&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;StrokeType.&lt;span style="color:
    #006633;"&gt;OUTSIDE&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setMouseTransparent&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160;
    lasso.&lt;span style="color: #006633;"&gt;setVisible&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt; start&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;double&lt;/span&gt; x, &lt;span style="color: #000066; font-weight: bold;"&gt;double&lt;/span&gt; y&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setX&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;x&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setY&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;y&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; px &lt;span style="color: #339933;"&gt;=&lt;/span&gt; x&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; py &lt;span style="color: #339933;"&gt;=&lt;/span&gt; y&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setVisible&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;
    &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; lasso&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt; rebound&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;double&lt;/span&gt; x, &lt;span style="color: #000066; font-weight:
    bold;"&gt;double&lt;/span&gt; y&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Math&lt;/span&gt;.&lt;span style="color: #006633;"&gt;abs&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;x &lt;span style="color: #339933;"&gt;-&lt;/span&gt; px&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Math&lt;/span&gt;.&lt;span style="color: #006633;"&gt;abs&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;y &lt;span style="color: #339933;"&gt;-&lt;/span&gt;
    py&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setX&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Math&lt;/span&gt;.&lt;span style="color: #006633;"&gt;min&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;x, px&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color: #006633;"&gt;setY&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Math&lt;/span&gt;.&lt;span style="color: #006633;"&gt;min&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;y, py&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; lasso&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt; stop&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066;
    font-weight: bold;"&gt;double&lt;/span&gt; x, &lt;span style="color: #000066; font-weight: bold;"&gt;double&lt;/span&gt; y&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; rebound&lt;span style="color: #009900;"&gt;(&lt;/span&gt;x, y&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; lasso.&lt;span style="color:
    #006633;"&gt;setVisible&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; lasso&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br
    /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #000066; font-weight: bold;"&gt;boolean&lt;/span&gt; isStopped&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;lasso.&lt;span style="color: #006633;"&gt;isVisible&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; Node getLasso&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; lasso&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;Shape&lt;/span&gt; shapeBuilder&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt; r&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; r
    &lt;span style="color: #339933;"&gt;!=&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #339933;"&gt;?&lt;/span&gt; Path.&lt;span style="color: #006633;"&gt;subtract&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;screenBounds, r&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color:
    #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;screenBounds.&lt;span style="color: #006633;"&gt;getWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;, screenBounds.&lt;span style="color: #006633;"&gt;getHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;In the constructor I create the lasso node. The three methods start(x,y), rebound(x,y) and stop (x,y) are called by mousePressed, mouseDragged and mouseReleased. The shapeBuilder-method
    returns a shape for the GlassPane.&lt;/p&gt; &lt;p&gt;Here are my mouse handlers:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &#160; scene.&lt;span style="color: #006633;"&gt;setOnMousePressed&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; EventHandler&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; @Override &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; handle&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;MouseEvent&lt;/span&gt; me&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span
    style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; glassPane.&lt;span style="color: #006633;"&gt;setShape&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; rebounder.&lt;span style="color: #006633;"&gt;shapeBuilder&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;rebounder.&lt;span style="color: #006633;"&gt;start&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;me.&lt;span style="color:
    #006633;"&gt;getX&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;, me.&lt;span style="color: #006633;"&gt;getY&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;, &lt;span style="color: #000066; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; scene.&lt;span style="color: #006633;"&gt;setOnMouseDragged&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; EventHandler&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; @Override &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; handle&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;MouseEvent&lt;/span&gt; me&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; glassPane.&lt;span style="color: #006633;"&gt;setShape&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; rebounder.&lt;span style="color: #006633;"&gt;shapeBuilder&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;rebounder.&lt;span style="color: #006633;"&gt;rebound&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;me.&lt;span style="color: #006633;"&gt;getX&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, me.&lt;span style="color: #006633;"&gt;getY&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;, &lt;span style="color: #000066; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span
    style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; scene.&lt;span style="color: #006633;"&gt;setOnMouseReleased&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; EventHandler&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; @Override &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; handle&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;MouseEvent&lt;/span&gt; me&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span
    style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;rebounder.&lt;span style="color: #006633;"&gt;isStopped&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; capture&lt;span style="color: #009900;"&gt;(&lt;/span&gt;rebounder.&lt;span style="color: #006633;"&gt;stop&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;me.&lt;span style="color: #006633;"&gt;getX&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;,
    me.&lt;span style="color: #006633;"&gt;getY&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br
    /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;A very straight forward implementation.&lt;/p&gt; &lt;p&gt;Ok we miss the KeyPane and the GlassPane. The KeyPane is complete transparent, contains only a screen wide rectangle which is focusable and
    captures key events:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; KeyPane &lt;span style="color: #000000; font-weight: bold;"&gt;extends&lt;/span&gt; &lt;span style="color: #003399;"&gt;Group&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color:
    #000000; font-weight: bold;"&gt;public&lt;/span&gt; KeyPane&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; Stage stage, &lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; Rebounder rebounder&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; &lt;span
    style="color: #003399;"&gt;Rectangle&lt;/span&gt; keyEventPane &lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;screenBounds.&lt;span style="color: #006633;"&gt;getWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;,
    screenBounds.&lt;span style="color: #006633;"&gt;getHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; keyEventPane.&lt;span style="color: #006633;"&gt;setFill&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color:
    #006633;"&gt;TRANSPARENT&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; keyEventPane.&lt;span style="color: #006633;"&gt;setStroke&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160;
    keyEventPane.&lt;span style="color: #006633;"&gt;setMouseTransparent&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; keyEventPane.&lt;span style="color: #006633;"&gt;setFocusTraversable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066;
    font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;// for keyPressed events&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; keyEventPane.&lt;span style="color: #006633;"&gt;setOnKeyPressed&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; EventHandler&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; @Override &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; handle&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;KeyEvent&lt;/span&gt; key&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span
    style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;key.&lt;span style="color: #006633;"&gt;getCode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;==&lt;/span&gt; KeyCode.&lt;span style="color: #006633;"&gt;VK_ESCAPE&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; stage.&lt;span style="color: #006633;"&gt;setVisible&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;// ==
    Close&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;else&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;key.&lt;span style="color: #006633;"&gt;getCode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color:
    #339933;"&gt;==&lt;/span&gt; KeyCode.&lt;span style="color: #006633;"&gt;VK_A&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; capture&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;screenBounds.&lt;span
    style="color: #006633;"&gt;getWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, screenBounds.&lt;span style="color: #006633;"&gt;getHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color:
    #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; getChildren&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;add&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;keyEventPane&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color:
    #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;In my GlassPane I’ve only the calculated shape and a small help text:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; GlassPane &lt;span style="color: #000000;
    font-weight: bold;"&gt;extends&lt;/span&gt; &lt;span style="color: #003399;"&gt;Group&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; setShape&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Shape&lt;/span&gt; shape, &lt;span style="color: #000066; font-weight: bold;"&gt;boolean&lt;/span&gt; showInfo&lt;span style="color: #009900;"&gt;)&lt;/span&gt;
    &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;while&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #339933;"&gt;!&lt;/span&gt;getChildren&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;isEmpty&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; getChildren&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;remove&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span
    style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; shape &lt;span style="color: #339933;"&gt;!=&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000066; font-weight: bold;"&gt;double&lt;/span&gt; BLUE &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0.95&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; Stop&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; stops &lt;span style="color: #339933;"&gt;=&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Stop&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Stop&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0.00&lt;/span&gt;, &lt;span style="color:
    #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color: #006633;"&gt;color&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;BLUE, BLUE, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;0.3&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Stop&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0.2&lt;/span&gt;, &lt;span style="color: #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color: #006633;"&gt;color&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;BLUE, BLUE, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;0.7&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; &#160; &#160;
    &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Stop&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0.25&lt;/span&gt;, &lt;span style="color: #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color: #006633;"&gt;color&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;BLUE, BLUE, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;0.5&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Stop&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0.4&lt;/span&gt;, &lt;span style="color: #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color: #006633;"&gt;color&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;BLUE, BLUE, &lt;span style="color:
    #cc66cc;"&gt;1&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;0.3&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Stop&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0.70&lt;/span&gt;, &lt;span style="color: #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color:
    #006633;"&gt;color&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;BLUE, BLUE, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;0.7&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Stop&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #cc66cc;"&gt;1.0&lt;/span&gt;, &lt;span style="color: #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color: #006633;"&gt;color&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;BLUE, BLUE, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;0.3&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span
    style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; LinearGradient lg &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; LinearGradient&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, &lt;span
    style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;, CycleMethod.&lt;span style="color: #006633;"&gt;NO_CYCLE&lt;/span&gt;, stops&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; shape.&lt;span style="color: #006633;"&gt;setFill&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;lg&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br
    /&gt; &#160; &#160; &#160; &#160; shape.&lt;span style="color: #006633;"&gt;setMouseTransparent&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; shape.&lt;span style="color: #006633;"&gt;setStroke&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; getChildren&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;add&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;shape&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; showInfo &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; Text info &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Text&lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"'ESC' to leave the Snipper&lt;span style="color: #000099; font-weight: bold;"&gt;\n&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;"'A' to capture the whole screen&lt;span style="color: #000099; font-weight: bold;"&gt;\n&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt; &#160;
    &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;"Drag the mouse to capture a rectangle"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; info.&lt;span style="color: #006633;"&gt;setFill&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color: #006633;"&gt;WHITE&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; info.&lt;span style="color: #006633;"&gt;setTranslateX&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;200&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; info.&lt;span style="color: #006633;"&gt;setTranslateY&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;60&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; info.&lt;span style="color: #006633;"&gt;setScaleX&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;2&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; info.&lt;span style="color: #006633;"&gt;setScaleY&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;2&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;
    &#160; &#160; &#160; &#160; info.&lt;span style="color: #006633;"&gt;setEffect&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; DropShadow&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; info.&lt;span style="color:
    #006633;"&gt;setMouseTransparent&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; getChildren&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;add&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;info&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;I fill
    the shape with a LinearGradient paint.&lt;/p&gt; &lt;p&gt;In the start method I stick all panes together:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &#160; KeyPane keyPane &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; KeyPane&lt;span style="color: #009900;"&gt;(&lt;/span&gt;stage, rebounder &lt;span
    style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Rebounder&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; glassPane &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; GlassPane&lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; glassPane.&lt;span style="color: #006633;"&gt;setShape&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;rebounder.&lt;span style="color: #006633;"&gt;shapeBuilder&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;, &lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;br /&gt; &lt;br /&gt; &#160; &#160; group.&lt;span style="color: #006633;"&gt;getChildren&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;addAll&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Node&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;keyPane, glassPane, rebounder.&lt;span style="color: #006633;"&gt;getLasso&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Ok where is the heart of my Snipper application? The capture method?&lt;/p&gt; &lt;p&gt;The capture method is currently developed with the java.awt.Robot class. So we need to leave the JavaFX thread and dive into the EventQueue. But first we must hide the whole stage window to get an good image from the desktop. But don’t use stage.setVisible (false) (it closes the
    application). I resize the stage to a zero dimension. Here my capture method:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; capture&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight:
    bold;"&gt;final&lt;/span&gt; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt; finished&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; primaryStage.&lt;span style="color: #006633;"&gt;setWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
    &#160; &#160; primaryStage.&lt;span style="color: #006633;"&gt;setHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;EventQueue&lt;/span&gt;.&lt;span style="color: #006633;"&gt;invokeLater&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Runnable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; @Override &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;finished.&lt;span style="color:
    #006633;"&gt;getWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;*&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;finished.&lt;span style="color: #006633;"&gt;getHeight&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;gt&lt;span style="color: #339933;"&gt;;&lt;/span&gt; 0.0d &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span
    style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;try&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #003399;"&gt;Robot&lt;/span&gt; robot &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color:
    #003399;"&gt;Robot&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #003399;"&gt;BufferedImage&lt;/span&gt; img &lt;span style="color: #339933;"&gt;=&lt;/span&gt; robot.&lt;span style="color: #006633;"&gt;createScreenCapture&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;br /&gt; &#160; &#160;
    &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; java.&lt;span style="color: #006633;"&gt;awt&lt;/span&gt;.&lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;finished.&lt;span style="color: #006633;"&gt;getX&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;, &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;finished.&lt;span style="color: #006633;"&gt;getY&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;finished.&lt;span style="color: #006633;"&gt;getWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&lt;/span&gt;&lt;span style="color:
    #cc66cc;"&gt;1&lt;/span&gt;, &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;finished.&lt;span style="color: #006633;"&gt;getHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #003399;"&gt;File&lt;/span&gt; folder &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;File&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #003399;"&gt;System&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getProperty&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"user.home"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;"snapshots"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; folder.&lt;span style="color:
    #006633;"&gt;mkdirs&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #003399;"&gt;File&lt;/span&gt; file &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003399;"&gt;File&lt;/span&gt;.&lt;span style="color: #006633;"&gt;createTempFile&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"jfx2_screen_capture"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;".jpg"&lt;/span&gt;, folder&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; ImageIO.&lt;span style="color: #006633;"&gt;write&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;img, &lt;span style="color: #0000ff;"&gt;"jpg"&lt;/span&gt;, file&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;catch&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Exception&lt;/span&gt; ex&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160;
    &#160; &#160; &#160; &#160; Logger.&lt;span style="color: #006633;"&gt;getLogger&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;Snipper.&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getName&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;log&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;Level.&lt;span style="color: #006633;"&gt;SEVERE&lt;/span&gt;, &lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;, ex&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160;
    Platform.&lt;span style="color: #006633;"&gt;runLater&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Runnable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; @Override &lt;span style="color: #000000; font-weight:
    bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; glassPane.&lt;span style="color: #006633;"&gt;setShape&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;rebounder.&lt;span style="color:
    #006633;"&gt;shapeBuilder&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;, &lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; primaryStage.&lt;span style="color:
    #006633;"&gt;setWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;screenBounds.&lt;span style="color: #006633;"&gt;getWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; primaryStage.&lt;span style="color: #006633;"&gt;setHeight&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;screenBounds.&lt;span style="color: #006633;"&gt;getHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;With this few 200 lines I’ve created a
    very useful screen capture application. The start up time is incredible: Between the main method and the complete visible stage the JavaFX framework needs only 500ms on my one year old double-core notebook. The complete startup (double-click the jar) is under a second (hard to stop the time). I need only one AWT dependency to the Robot class. I hope this could be changed to increase the startup time (e.g. with the internal FXRobot class).&lt;/p&gt; &lt;p&gt;best regards,&lt;br /&gt; Josh.&lt;/p&gt;
    &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-03-09T16:15:34+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=942">
    <title>JNBB - Joschs NetBeans Blog: JavaFXDev: NetBeans Platform with JavaFX 2.0ea</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/03/04/javafxdev-netbeans-platform-with-javafx-2-0ea/</link>
    <content:encoded>&lt;p&gt;Hi!&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.linkedin.com/in/alanoleary"&gt;Alan O’Leary&lt;/a&gt; shows in &lt;a href="http://a1o1.posterous.com/java-fx20-embedding-webview-in-swing"&gt;his blog&lt;/a&gt; a WebView integration in Swing. It is a not good documented feature, how to integrate JavaFX 2.0 controls into a swing application. But an integration is a main goal for the JavaFX 2.0 release.&lt;/p&gt; &lt;p&gt;As an enthusiastic NetBeans Platform/RCP developer and &lt;a
    href="http://javafx.com/partners/"&gt;JavaFX partner&lt;/a&gt;, I work since two days to marriage JavaFX 2.0 and a NetBeans Platform&#160;Application. And yes, it works &lt;img src="http://www.aljoscha-rittner.de/blog/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /&gt; &lt;/p&gt; &lt;p&gt;I’ve created a maven based platform application with a special starter Main.class. I need to launch the JavaFX toolkit system before any other module bootstrapping. The solution here is based
    on the early access release through the &lt;a href="http://javafx.com/partners/"&gt;JavaFX partner&lt;/a&gt; program. This “best practice” may change significantly between now and the final version. However, I’ll show only a concept, not compilable code.&lt;/p&gt; &lt;p&gt;The solution behind the bootstrapping a &lt;a href="http://platform.netbeans.org"&gt;NetBeans Platform&lt;/a&gt; is based on a &lt;a href="http://wiki.netbeans.org/DevFaqPlatformAppAuthStrategies"&gt;FAQ&lt;/a&gt; by Tom Wheeler. My
    Main.class is a JavaFX Application class – I need this Application instance to get rid of from invoke exceptions. The created Stage object by the Launcher can be ignored.&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; Main &lt;span
    style="color: #000000; font-weight: bold;"&gt;extends&lt;/span&gt; Application&lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: #003399;"&gt;String&lt;/span&gt; NB_MAIN_CLASS &lt;span style="color: #339933;"&gt;=&lt;/span&gt;
    &lt;span style="color: #0000ff;"&gt;"org.netbeans.core.startup.Main"&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; main&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;String&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; args&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;throws&lt;/span&gt; &lt;span style="color: #003399;"&gt;Exception&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #666666; font-style: italic;"&gt;// do whatever you need here (e.g. show a custom login form)&lt;/span&gt;&lt;br /&gt; &#160;
    &#160; &lt;span style="color: #003399;"&gt;System&lt;/span&gt;.&lt;span style="color: #006633;"&gt;out&lt;/span&gt;.&lt;span style="color: #006633;"&gt;println&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Launch Java FX"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000066; font-weight: bold;"&gt;long&lt;/span&gt; ms &lt;span
    style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003399;"&gt;System&lt;/span&gt;.&lt;span style="color: #006633;"&gt;currentTimeMillis&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; Launcher.&lt;span style="color: #006633;"&gt;launch&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;Main.&lt;span style="color: #000000;
    font-weight: bold;"&gt;class&lt;/span&gt;, args&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;// This is the main start up for JavaFX 2.0&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;System&lt;/span&gt;.&lt;span style="color: #006633;"&gt;out&lt;/span&gt;.&lt;span style="color: #006633;"&gt;println&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Launched Java FX in "&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;System&lt;/span&gt;.&lt;span style="color: #006633;"&gt;currentTimeMillis&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;-&lt;/span&gt; ms&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;"ms"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #666666; font-style: italic;"&gt;// once you're done with that, hand control back to NetBeans&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;ClassLoader&lt;/span&gt; classloader
    &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003399;"&gt;Thread&lt;/span&gt;.&lt;span style="color: #006633;"&gt;currentThread&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getContextClassLoader&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
    &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;Class&lt;/span&gt; mainClass &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;Class&lt;/span&gt;.&lt;span style="color: #006633;"&gt;forName&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;NB_MAIN_CLASS, &lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;, classloader&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;Object&lt;/span&gt; mainObject &lt;span style="color: #339933;"&gt;=&lt;/span&gt; mainClass.&lt;span style="color: #006633;"&gt;newInstance&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;Method&lt;/span&gt; mainMethod &lt;span
    style="color: #339933;"&gt;=&lt;/span&gt; mainClass.&lt;span style="color: #006633;"&gt;getDeclaredMethod&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"main"&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;Class&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;{&lt;/span&gt;&lt;span style="color: #003399;"&gt;String&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;.&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; mainMethod.&lt;span style="color: #006633;"&gt;invoke&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;mainObject, &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Object&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; args&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; @Override&lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight:
    bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; start&lt;span style="color: #009900;"&gt;(&lt;/span&gt;Stage stage&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #666666; font-style: italic;"&gt;// Nothing to do, forget the stage....&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span
    style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;The Main class is in a standard Java archive. This JAR file and all the JavaFX files must be in the platform/core folder.&lt;/p&gt; &lt;p&gt;At runtime all the core-Libs are available to the whole NetBeans Platform modules (and plugins). For the compiler I need a special dependency to the runtime:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container xml
    dawn"&gt;&lt;div class="xml codecolorer"&gt;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;dependency&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;groupId&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;sun.javafx&lt;span style="color:
    #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/groupId&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;artifactId&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;tools&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight:
    bold;"&gt;&amp;lt;/artifactId&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;version&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;2.0.0&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/version&lt;span style="color: #000000; font-weight:
    bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;scope&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;system&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/scope&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
    &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;systemPath&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;${basedir}/../../corelauncher/mainlauncher/src/main/lib/jfxrt.jar&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/systemPath&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span
    style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/dependency&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;The system path depends on your project structure.&lt;/p&gt; &lt;p&gt;Now I can access all the JavaFX classes in a NetBeans module.&lt;/p&gt; &lt;p&gt;Please note, any scene construction needs to be build up in the JavaFX event queue thread. This is
    &lt;strong&gt;not&lt;/strong&gt; the EventDispatcher-Thread from Swing!&lt;/p&gt; &lt;p&gt;My favorite call to jump in the JavaFX event thread is: &lt;span style="text-decoration: line-through;"&gt;Toolkit.getDefault().defer (Runnable)&lt;/span&gt; javafx.application.Platform.runLater (Runnable). &lt;span style="text-decoration: line-through;"&gt;But the Toolkit class is in a com.* package. IMHO in the future we get an official way to do this.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;The creation of a WebView
    component is pretty similar to the sample from Alan. But I don’t need a stage object:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &#160; Platform.&lt;span style="color: #006633;"&gt;runLater&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color:
    #003399;"&gt;Runnable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &#160; @Override&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; group &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Group&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; Scene scene
    &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Scene&lt;span style="color: #009900;"&gt;(&lt;/span&gt;group&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &#160; &#160; browser &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; WebView&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; WebEngine&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; browser.&lt;span style="color: #006633;"&gt;getEngine&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;addChangeListener&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;PropertyReference.&lt;span style="color: #006633;"&gt;WILDCARD&lt;/span&gt;, &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;ChangeListener&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &#160; &#160; &#160; @Override&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; handle&lt;span style="color: #009900;"&gt;(&lt;/span&gt;Bean paramBean, PropertyReference paramPropertyReference&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"title"&lt;/span&gt;.&lt;span style="color: #006633;"&gt;equals&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;paramPropertyReference.&lt;span style="color: #006633;"&gt;getName&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #003399;"&gt;EventQueue&lt;/span&gt;.&lt;span style="color: #006633;"&gt;invokeLater&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span
    style="color: #003399;"&gt;Runnable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #666666; font-style: italic;"&gt;// Jump to Swing EventDispatcher...&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; @Override&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160;
    &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; BrowserTopComponent.&lt;span style="color: #000000; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color:
    #006633;"&gt;setDisplayName&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;browser.&lt;span style="color: #006633;"&gt;getEngine&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getTitle&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160;
    &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"url"&lt;/span&gt;.&lt;span style="color: #006633;"&gt;equals&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;paramPropertyReference.&lt;span style="color: #006633;"&gt;getName&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #003399;"&gt;EventQueue&lt;/span&gt;.&lt;span style="color: #006633;"&gt;invokeLater&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Runnable&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #666666; font-style: italic;"&gt;// Jump to Swing EventDispatcher...&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; @Override&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight:
    bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #003399;"&gt;String&lt;/span&gt; url &lt;span style="color: #339933;"&gt;=&lt;/span&gt; browser.&lt;span style="color:
    #006633;"&gt;getEngine&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getUrl&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; tfUrl.&lt;span style="color: #006633;"&gt;setText&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;url&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; addHistory&lt;span style="color: #009900;"&gt;(&lt;/span&gt;url&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160;
    &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &#160; &#160; group.&lt;span style="color: #006633;"&gt;getChildren&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;add&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;browser&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; group.&lt;span style="color: #006633;"&gt;setScaleX&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;0.8d&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; group.&lt;span style="color: #006633;"&gt;setScaleY&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;0.8d&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span
    style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; Reflection r &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Reflection&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; r.&lt;span style="color: #006633;"&gt;setTopOffset&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;8&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; group.&lt;span style="color: #006633;"&gt;setEffect&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;r&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &#160; &#160; scene.&lt;span
    style="color: #006633;"&gt;setFill&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;javafx.&lt;span style="color: #006633;"&gt;scene&lt;/span&gt;.&lt;span style="color: #006633;"&gt;paint&lt;/span&gt;.&lt;span style="color: #003399;"&gt;Color&lt;/span&gt;.&lt;span style="color: #006633;"&gt;BLACK&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; browser.&lt;span style="color:
    #006633;"&gt;setWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;panel.&lt;span style="color: #006633;"&gt;getWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; browser.&lt;span style="color: #006633;"&gt;setHeight&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;panel.&lt;span style="color: #006633;"&gt;getHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &#160; &#160; panel.&lt;span style="color: #006633;"&gt;setScene&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;scene&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; panel.&lt;span style="color: #006633;"&gt;addComponentListener&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;ComponentAdapter&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; @Override&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066;
    font-weight: bold;"&gt;void&lt;/span&gt; componentResized&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;ComponentEvent&lt;/span&gt; e&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; Platform.&lt;span style="color: #006633;"&gt;runLater&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt;
    &lt;span style="color: #003399;"&gt;Runnable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #666666; font-style: italic;"&gt;// Jump from Swing-EventDispatcher to the JavaFX Thread:&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; @Override&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span
    style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; browser.&lt;span style="color: #006633;"&gt;setWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;panel.&lt;span style="color:
    #006633;"&gt;getWidth&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; browser.&lt;span style="color: #006633;"&gt;setHeight&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;panel.&lt;span style="color: #006633;"&gt;getHeight&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;I’ve added some useful listeners. Please aware the switches between different threads (Swing and JavaFX).&lt;/p&gt; &lt;p&gt;The result is a beautiful NetBeans Platform application with an embedded JavaFX 2.0 WebView:&lt;/p&gt;
    &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/03/JavaFX-in-NetBeans-RCP.jpg"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/03/JavaFX-in-NetBeans-RCP.jpg" title="JavaFX in NetBeans RCP" height="604" width="700" alt="" class="aligncenter size-full wp-image-946" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;PS.: I like the Twitter message from &lt;a href="http://twitter.com/deanriverson"&gt;Dean Riverson&lt;/a&gt;: “&lt;em&gt;Ok, I call a moratorium on
    rotating and reflecting WebView…&lt;/em&gt;” (&lt;a href="http://twitter.com/deanriverson/status/43747528306462720"&gt;origin&lt;/a&gt;).&#160; -&lt;/p&gt; &lt;p&gt;I have to write 100 times:&lt;/p&gt; &lt;div style="background-color: #008000;"&gt;&lt;span style="color: #ffffff;"&gt;I’ll never rotate and reflect WebView again, I’ll never rotate and reflect WebView again,I’ll never rotate and reflect WebView again,I’ll never rotate and reflect WebView again,I’ll never rotate and reflect WebView
    again,I’ll never rotate and reflect WebView again,I’ll never rotate and reflect WebView again,I’ll never rotate and reflect WebView again,I’ll never rotate and reflect WebView again,I’ll never rotate and reflect WebView again, …&lt;/span&gt;&lt;/div&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-03-04T18:48:46+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=596">
    <title>Java Getriebe » NetBeans: Eine große Datei mit Bundletexten</title>
    <link>http://blog.nigjo.de/netbeans/2011/03/i18nchecker-part-1/</link>
    <content:encoded>Nicht nur ich mache mir Gedanken darum, wie man seine Anwendung am besten in einer anderen Sprache angezeigt bekommt. Geertjan hat in seinem Blog an verschiedenen Stellen schon mal damit beschäftigt. In einem aktuellen Beitrag hat er ein Tool aufgetan mit Namen “i18nchecker”. Dieses Tool sammelt aus einem Projekt (Es muss nicht zwingend ein Suiteprojekt [...]</content:encoded>
    <dc:date>2011-03-02T15:39:01+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=921">
    <title>JNBB - Joschs NetBeans Blog: Training: Lingen/Ems – FH Osnabrück – NetBeans Platform Certified Training</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/02/28/training-lingenems-fh-osnabrueck-netbeans-platform-certified-training/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Letzten Donnerstag und Freitag war es mal wieder soweit, ein sehr intensives und hoffentlich für die Teilnehmer spannendes Training ist zu Ende gegangen.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/02/IMAG0292-small.png"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/02/IMAG0292-small.png" title="IMAG0292-small" height="479" width="800" alt="" class="aligncenter size-full
    wp-image-925" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In zwei Tagen haben wir (&lt;a href="http://netbeans.dzone.com/nb-lingen?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+zones%2Fnetbeans+%28NetBeans+Zone%29" title="DZone: Lingen on NetBeans Platform"&gt;Geertjan&lt;/a&gt; und ich) mehr als 20 Teilnehmern, an der &lt;a href="http://www.mut.hs-osnabrueck.de/"&gt;Fachhochschule Osnabrück Lingen/Ems&lt;/a&gt;, die NetBeans Plattform in einem &lt;a
    href="http://www.aljoscha-rittner.de/blog/netbeans-platform-certified-training/" title="NBPCT"&gt;Trainings-Kurs&lt;/a&gt; nahe gebracht. Es hat uns besonders gefreut, dass alle Anwesenden bis 18:00 am Freitag durchgehalten haben. Und nein, die Tür war nicht abgeschlossen &lt;img src="http://www.aljoscha-rittner.de/blog/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /&gt; &lt;span id="more-921"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Die Inhalte waren, wie immer, nicht ohne. Windows
    System API, Lookups, System File System, Nodes, Explorer und Visual Library waren die Kernthemen. Durch all diese Themen zog sich natürlich: “Modulare Softwareentwicklung”. So wurde den Studenten schnell klar, dass es ohne Theorie nicht geht. Es schien auch einige überrascht zu haben, dass es hier nicht nur darum ging, in der NetBeans Plattform ein paar Swing-Programme zu entwickeln. Wir vermitteln immer dazu – völlig vom Produkt losgelöst – wichtige Paradigmen der modularen Entwicklung von Software.
    Darunter fallen Punkte wie Separation of Concern, Single Responsible Principle, Komponentenorientierung, Kohäsion und Entkopplung.&lt;/p&gt; &lt;p&gt;Mit vielen eingeschobenen Workshops haben wir dieses Thema von der trockenen Grundlage auf das praktische Feld verschoben.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/02/IMAG0288-small.png"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/02/IMAG0288-small.png"
    title="IMAG0288-small" height="479" width="800" alt="" class="aligncenter size-full wp-image-926" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Für einen besonders guten Einstieg in die NetBeans Platform API haben alle Teilnehmer des Kurses eine DZone NetBeans Platform Refcard erhalten. Ich hoffe, dass sich diese 2-seitige DIN-A3 Karte nun immer neben dem Bildschirm befindet.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/02/NBP-refzcard.png"&gt;&lt;img
    src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/02/NBP-refzcard.png" title="DZone NBP refcard" height="413" width="320" alt="" class="aligncenter size-full wp-image-922" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Ich war begeistert, dass einige Studenten sich am Freitag Abend zu kleinen Entwicklergruppen zusammengeschlossen haben, um erste Projekte in der NetBeans RCP Welt zu realisieren. Ich freue mich auf die Ergebnisse!&lt;/p&gt; &lt;p&gt;Ganz großen Dank an die Organisation des Events und
    kulinarische Betreuung. Es gab immer genug Kaffee und andere Getränke und vor allem ein fantastisches Buffet. Da kommen wir doch gerne wieder!&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/02/IMAG0284-small.png"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/02/IMAG0284-small.png" title="IMAG0284-small" height="479" width="800" alt="" class="aligncenter size-full wp-image-927" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Auf unseren &lt;a
    href="http://edu.netbeans.org/courses/nbplatform-certified-training/" title="edu-NetBeans dot org"&gt;edu-Seiten&lt;/a&gt; gibt es unsere Präsentationen zum nachlesen und nacharbeiten: &lt;a href="http://edu.netbeans.org/contrib/slides/netbeans-platform/" title="NBPCT Slides"&gt;Trainings-Präsentationen&lt;/a&gt;. Ein sehr wichtiger Anlaufpunkt ist auf jeden Fall die Platform-Seite: &lt;a href="http://netbeans.org/features/platform/all-docs.html" title="Platform: All
    docs"&gt;platform.netbeans.org&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Fragen im Nachgang werden über die NetBeans Platform Certified Students Mailingliste abgehandelt. Natürlich stehen auch die &lt;a href="http://forums.netbeans.org/"&gt;englisch&lt;/a&gt;- und &lt;a href="http://netbeans-forum.de/"&gt;deutschsprachigen&lt;/a&gt; NetBeans Foren zur Verfügung.&lt;/p&gt; &lt;p&gt;Beste Grüße!&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; –– &lt;/div&gt;</content:encoded>
    <dc:date>2011-02-28T08:33:38+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=587">
    <title>Java Getriebe » NetBeans: Die Krux mit “definierten” Verzeichnisstrukuren</title>
    <link>http://blog.nigjo.de/netbeans/2011/02/die-krux-mit-definierten-verzeichnisstrukuren/</link>
    <content:encoded>Eigentlich wollte ich einen neuen Bugreport schreiben, in dem ich vorgeschlagen hätte meine Version mit dem Userdir in “Eigenen Dateien” speichern vorgeschlagen hätte. Und da man ja ein guter Reporter sein möchte sucht man vorher nach schon getätigten Reports um Duplikate zu vermeiden. Dabei ist mir dann ein anderer Eintrag aufgefallen, der zwar schon was [...]</content:encoded>
    <dc:date>2011-02-27T18:46:32+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=916">
    <title>JNBB - Joschs NetBeans Blog: IDEDev: NetBeans 7 Beta2 und spezielles zu Git und JUnit</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/02/18/idedev-netbeans-7-beta2-und-spezielles-zu-git-und-junit/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Gestern kündigte ich ja die Beta2 zur NetBeans 7.0 IDE an. Zwei Dinge hatte ich da unterschlagen, die hier noch einer besonderen Erwähnung bedürfen.&lt;/p&gt; &lt;h2&gt;Git&lt;/h2&gt; &lt;p&gt;In der Beta2 kann man nun (ohne Plugin) git als Versionierungssystem nutzen. Der &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_plan"&gt;Git Plan im Wiki&lt;/a&gt; gibt schon einen recht guten Überblick, was funktioniert und worauf man noch
    warten muss.&lt;/p&gt; &lt;p&gt;Folgende Features sollten funktionieren:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Quick_overview_of_file_status_in_IDE"&gt;Quick overview of file status in IDE&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#View_Modifications_%28Show_Changes%29"&gt;View_Modifications_(Show_Changes)&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a
    href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Add"&gt;Add&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Commit"&gt;Commit&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Add_or_Exclude_to_or_from_commit"&gt;Add oder Exclude bei commit&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a
    href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Reset_Changes_%28Revert_local_changes%29"&gt;Reset Changes (Lokale Änderungen zurücknehmen)&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Diff_-_view_local_modifications"&gt;Diff – Lokale Änderungen vergleichen&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Inline_diff_-_show_local_modifications_in_a_files_sidebar"&gt;Inline diff
    -Lokale Änderungen in der Files sidebar&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Repository_Init"&gt;Repository Init&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Ignore"&gt;Ignore&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Checkout"&gt;Checkout&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a
    href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Create_Branch"&gt;Create Branch&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Switch_to_Branch"&gt;Switch to Branch&lt;/a&gt; &lt;strong&gt; &lt;/strong&gt;, siehe Checkout&lt;/li&gt; &lt;li&gt;&lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Merge_from_Branch"&gt;Merge from Branch&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Bis zum Finale ist noch einiges zu tun,
    gerade für das Distributing steht noch was aus (&lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Repository_Clone"&gt;Repository Clone&lt;/a&gt;, &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Pull"&gt;Pull&lt;/a&gt;, &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Push"&gt;Push&lt;/a&gt;, &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Fetch"&gt;Fetch&lt;/a&gt;), die Vervollständigung der Branching und Merging Tools
    (&lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Merge_from_Branch"&gt;Merge from Branch&lt;/a&gt;, &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Export_uncommited_changes_%28Local_changes%29"&gt;Export uncommited changes (Local changes)&lt;/a&gt;, &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Apply_Patch"&gt;Apply Patch&lt;/a&gt;) sowie &lt;a
    href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Search_history_of_files"&gt;Search history of files&lt;/a&gt; und eine &lt;a href="http://netbeans.org/projects/versioncontrol/pages/Git_uc#Blame"&gt;Blame&lt;/a&gt; Integration.&lt;/p&gt; &lt;h2&gt;JUnit&lt;/h2&gt; &lt;p&gt;Trotz der verwirrenden und unterschiedlichen, teils negativen, Meldungen wird JUnit natürlich weiter von NetBeans unterstützt. Allerdings muss JUnit in Zukunft extra aus dem Plugin-Center geladen werden. Fest integriert
    ist nur ein Bridge-Modul zu JUnit. Unabhängig zu rechtlichen Vorgaben hat das in Zukunft vielleicht sogar Vorteile, wenn es um die Integration von anderen Unit-Tools geht (z.B durch eine einheitliche API).&lt;/p&gt; &lt;p&gt;Ich hoffe, dass heute der &lt;a href="http://download.netbeans.org/netbeans/7.0/beta2/" title="NetBeans 7 Beta2"&gt;Download&lt;/a&gt; nicht so überlastet ist wie gestern. Viel Spaß mit NetBeans 7.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float:
    right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-02-18T11:28:11+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=911">
    <title>JNBB - Joschs NetBeans Blog: IDEDev: NetBeans 7 Beta2 is out</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/02/17/idedev-netbeans-7-beta2-is-out/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Ab heute ist NetBeans 7.0 Beta 2 verfügbar &lt;a href="http://dlc.sun.com.edgesuite.net/netbeans/7.0/beta2/" title="NetBeans Downloads"&gt;zum Download&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Die Highlights sind:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;JDK 7 Unterstützung&lt;/li&gt; &lt;li&gt;Integration des WebLogic Servers&lt;/li&gt; &lt;li&gt;Verbesserungen, um eine Oracle Datenbank einzubinden&lt;/li&gt; &lt;li&gt;Glassfish 3.1 Unterstützung&lt;/li&gt;
    &lt;li&gt;Maven 3 Support&lt;/li&gt; &lt;li&gt;Remote URL-JavaDoc Support (JavaDoc muss nicht mehr lokal installiert sein)&lt;/li&gt; &lt;li&gt;Neuer GridBagLayout Customizer&lt;/li&gt; &lt;li&gt;Für JavaEE CDI, REST Dienste und Java Persistence Verbesserungen, zudem Bean Validation&lt;/li&gt; &lt;li&gt;JSF Component Bibliothekenunterstützung,&#160; PrimeFaces ist mit an Board&lt;/li&gt; &lt;li&gt;Verbesserte EL-Unterstützung in JSF&lt;/li&gt; &lt;li&gt;HTML5&lt;/li&gt; &lt;li&gt;JSON&lt;/li&gt;
    &lt;li&gt;PHPDoc-Generierung&lt;/li&gt; &lt;li&gt;PHP Rename Refactoring und Safe delete Refactoring&lt;/li&gt; &lt;li&gt;PHP 5.3 Alias-Unterstützung&lt;/li&gt; &lt;li&gt;C/C++ kann nun besser Binär-Libs importieren&lt;/li&gt; &lt;li&gt;C/C++ Projekt-Typ mit Quelltexten auf Remote-Servern&lt;/li&gt; &lt;li&gt;Endlich für PHP User: Word-Wrap im Editor&lt;/li&gt; &lt;li&gt;Der Profiler wurde aufgebohrt&lt;/li&gt; &lt;li&gt;Verbesserte Überprüfung von externen Änderungen an Quelltexten außerhalb der
    IDE&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Auch die NetBeans Platform bekommt Erweiterungen:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Annotationen für Actions, TopComponents und &lt;a href="https://netbeans.org/bugzilla/show_bug.cgi?id=192750"&gt;NbBundle.&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Eigene Annotationen für Maven-Projekte&lt;/li&gt; &lt;li&gt;Performance Steigerungen und bessere Integration des Profilers&lt;/li&gt; &lt;li&gt;Und etliche &lt;a href="http://bits.netbeans.org/dev/javadoc/apichanges.html"
    title="NetBeans API Changes"&gt;API-Änderungen&lt;/a&gt;, hier ein paar schöne Änderungen rausgepickt: &lt;ul&gt; &lt;li&gt;&lt;a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-modules-autoupdate-services/apichanges.html#custom-icons"&gt;Icons für Update-Center&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-modules-autoupdate-ui/apichanges.html#PluginManager.openInstallWizard"&gt;openInstallWizard für den PluginMananger&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://bits.netbeans.org/dev/javadoc/org-openide-explorer/apichanges.html#TreeView.quickSearchAllowed"&gt;QuickSearch im TreeView (de)aktivieren&lt;/a&gt;&lt;/li&gt; &lt;li&gt;OutlineView-Tree-Spalte kann nun eine &lt;a href="http://bits.netbeans.org/dev/javadoc/org-openide-explorer/apichanges.html#OutlineView.setTreeHorizontalScrollBarPolicy"&gt;horizontale Scrollbar erhalten&lt;/a&gt;. (Sehr nützlich!)&lt;/li&gt; &lt;li&gt;&lt;a
    href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-viewmodel/apichanges.html#issue-186672"&gt;Eigene TableCellRenderer&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Ich hoffe nur die Maven Artifacts werden für Beta2 zeitnah freigegeben, am SNAPSHOT teste ich ungern.&lt;/p&gt; &lt;p&gt;Die aktuellen &lt;a href="http://netbeans.org/community/releases/70/" title="NetBeans 7 Release Notes"&gt;Release-Notes (en)&lt;/a&gt; stehen natürlich auch zur Verfügung. Sehr umfangreich
    ist, wie immer, die &lt;a href="http://wiki.netbeans.org/NewAndNoteworthyNB70"&gt;NewAndNoteworthy&lt;/a&gt; Seite.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-02-17T16:26:01+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=905">
    <title>JNBB - Joschs NetBeans Blog: BeanDev: native2ascii Datei Konverter. NetBeans Plugin Idee</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/02/03/beandev-native2ascii-datei-konverter-netbeans-plugin-idee/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Ich habe mal wieder was für meine Ideensammlung: Plugins, die ich schon immer mal programmieren wollte, aber nie die Zeit dazu fand.&lt;/p&gt; &lt;p&gt;Heute der native2ascii Konverter für Dateien, die man im Project-Explorer markiert hat. Kontextmenü mit folgenden Befehlen:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;To ASCII…&lt;/li&gt; &lt;li&gt;Reverse to native…&lt;/li&gt; &lt;li&gt;Native to native…&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;em&gt;&lt;span
    id="more-905"&gt;&lt;/span&gt;To ASCII&lt;/em&gt; wandelt von einem vorgegebenen Encoding in die \u-Notation. &lt;em&gt;Reverse to native&lt;/em&gt; fragt nach eine Encoding, in der die Datei konvertiert werden soll und &lt;em&gt;Native to native&lt;/em&gt; fast beide Transformationen zusammen.&lt;/p&gt; &lt;p&gt;Vielleicht kann man das dem existierenden kenai.com Projekt &lt;a href="http://kenai.com/projects/nb-native2ascii/downloads/directory/nbms/6.7" title="kenai.com
    Native2Ascii"&gt;NATIVE2ASCII&lt;/a&gt; hinzufügen? Ich muss mal Hlavki fragen und mit einem hg-clone einen Prototypen schreiben… wenn ich mal wieder Zeit habe.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-02-03T14:14:59+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=896">
    <title>JNBB - Joschs NetBeans Blog: JavaDev: Java auf dem Desktop – Come on Oracle!</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/02/01/javadev-java-auf-dem-desktop-come-on-oracle/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Eines der massiv unterschätzten Themen ist &lt;em&gt;Java auf dem Desktop&lt;/em&gt;. Immer wieder höre ich von Entwicklern, dass Web-Oberflächen, Java EE, Server und Backend-Development die Domäne für Java sei.&lt;/p&gt; &lt;p&gt;Ich denke mal, man muss da ein wenig über den Tellerrand hinaus schauen. Sicherlich ist Java nicht die 1a Desktop Sprache, weil für die vielen netten Gimmiks einfach die nativen OS spezifischen Schnittstellen fehlen. Aber mal
    ehrlich, warum sollte eine so robuste Programmiersprache auf dem Desktop nichts taugen? Seit 15 Jahren entwickele ich Java-Desktop-Applikationen zunächst für eine kurze Zeit mit AWT, dann seit Swing 1.1 raus war, Swing-Applikationen.&lt;span id="more-896"&gt;&lt;/span&gt;Ich plagte mich davor mit der Microsoft Welt und auch mit 4GL Sprachen rum. Aber kein Framework hat mir so viele Freiheiten und so eine stabile Grundlage gegeben, wie es Java mit Swing und den ganzen zusätzlichen Bibliotheken
    konnte.&lt;/p&gt; &lt;p&gt;Zwar spricht man heute bei Java vom Cobol des einundzwanzigsten Jahrhunderts, aber auch das ist völlig unterschätzt. Denn neben der Masse an Programmen, die Java (wie ehemals Cobol) trägt, gibt es doch eine Weiterentwicklung die ganz sicher keine Stagnation erfährt.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.sun.com/geertjan/entry/james_gosling_the_massive_popularity" title="Gosling and the Java Desktop"&gt;Geertjan hat in seinem Blog&lt;/a&gt; selbst mal wieder eine Lanze
    für den Desktop Einsatz von Java gebrochen und da ein Zitat von James Gosling ausgegraben, das ich hier gerne wiederhole:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;If I had to say I’m jaded it’s sort of about the fact that people’s attention is so focused on the web. And it feels to me like that’s 10% of the computing landscape. If you look at what goes on in, say, biology. Huge, huge computational problems in biology. The people who do protein folding up in San Francisco, which is kind of everybody there,
    that stuff is really really cool. It sure doesn’t show up on anybody’s “cool” radar but, you know, all modern medicine research, it’s computers. Right, it’s computing. And none of that has any magic pixie dust coolness on it and modern materials. It’s, again, all computer simulation and all the rest of that and the computing behind that and the rest of that, most people don’t even think of it as computing because it’s something that a scientist does. Talk to most people in physics, they spend most of
    their time writing code, not doing physics experiments. And it’s just a cool world filled with thousands and thousands of different things and it feels like the web is only a corner of it.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Hinter dem ganzen Internet mit all seinen Online-Applikationen, Webservices, Shops, Social Media, Blogs, Twitter-Diensten, Online-Spielen usw. verbirgt sich eine Welt in der Computer auch für etwas anderes gebraucht werden. Eine Welt im Business-Bereich, eine Welt in der
    Forschung und Wissenschaft, eine Welt in der Produktentwicklung, eine Welt von Künstlern, Designern, Entwicklern und Autoren. Welten, wo Programme auf browserbasierten Oberflächen nur die zweite Wahl sind.&lt;/p&gt; &lt;p&gt;Wenn man sich das mal klar macht, kann man Goslings Aussage verstehen, wenn er vom Internet nur als eine 10% Ecke der Computerwelt spricht. Gefühlt wird jeder immer sagen, das ist mehr: Das Internet füllt mein Leben als Computer-Nerd sicher zu 90% aus. Aber die produktive
    Entwicklungsarbeit geschieht immer noch auf dem Desktop. Sicher, Server- und Webgestützt, aber Desktopprogramme schlagen Browser-Ajax-Anwendungen immer noch in ihrer Bedienbarkeit, Reaktion und Funktionalität.&lt;/p&gt; &lt;p&gt;Auch die NetBeans-Plattform als klassisches RCP Framework zeigt mit seinen ganzen existierenden Derivaten, dass der Desktop eben nicht eine verarmte Softwarelandschaft ist. Im Gegenteil, da wo massive Robustheit, gute Wartbarkeit und flexible Schnittstellen zu anderen tausenden
    Frameworks benötigt werden, ist Java auf dem Desktop, nach meinem Dafürhalten, die zentrale Plattform.&lt;/p&gt; &lt;p&gt;Was tatsächlich allein schon auf der NetBeans Plattform existiert, &lt;a href="http://platform.netbeans.org/screenshots.html"&gt;zeigt eindrucksvoll die Liste&lt;/a&gt; auf netbeans.org. Hier ein paar Screenshots:&lt;/p&gt; &lt;p&gt;&lt;a href="http://platform.netbeans.org/screenshots.html"&gt;&lt;img src="http://netbeans.org/images_www/screenshots/platform/northrop_thumb.png"
    alt="" height="134" class="alignnone" width="200" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://platform.netbeans.org/screenshots.html"&gt;&lt;img src="http://netbeans.org/images_www/screenshots/platform/masstk_ss_full_01_thumb.png" alt="" height="155" class="alignnone" width="200" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://platform.netbeans.org/screenshots.html"&gt;&lt;img src="http://netbeans.org/images_www/screenshots/platform/puzzle_thumb.png" alt="" height="118"
    class="alignnone" width="200" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://platform.netbeans.org/screenshots.html"&gt;&lt;img src="http://netbeans.org/images_www/screenshots/platform/intellihome_thumb.png" alt="" height="156" class="alignnone" width="200" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://platform.netbeans.org/screenshots.html"&gt;&lt;img src="http://netbeans.org/images_www/screenshots/platform/sepix-sales-system_thumb.png" alt="" height="157" class="alignnone" width="200"
    /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://platform.netbeans.org/screenshots.html"&gt;&lt;img src="http://netbeans.org/images_www/screenshots/platform/blueMarine_thumb.png" alt="" height="150" class="alignnone" width="200" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;und Hundert mehr. Diese Applikationen sind ausschließlich auf der NetBeans Plattform entstanden und stellen keine vollständige Liste dar. Dazu gibt es wieder unzählige reine Swing-Applikationen und Anwendungen, die auf dem Eclipse RCP
    Framework basieren.&lt;/p&gt; &lt;p&gt;Alles Anwendungen die stabil und robust in den Firmen dieser Welt werkeln. Vielleicht unbeachtet und nicht immer sichtbar in dem omnipräsenten Internet, aber wichtig für Entwicklung und Wirtschaft.&lt;/p&gt; &lt;p&gt;Aber die Entwickler stöhnen, sie vermissen den Anschluss zu den ganzen schönen Gimmicks, die Silverlight, Adobe Air und andere Frameworks bieten, um Desktop-Anwender das 110%-Feeling zu geben. Unabhängig davon, ob man das wirklich braucht, vielleicht
    gibt es mit JavaFX for Swing eine Lösung, die Desktop-Apps auch für den privaten Desktop wieder attraktiver macht. Vielleicht schaffen wir es SwingX und Labs-Komponenten verstärkt in das JDK aufzunehmen. Vielleicht wird es endlich eine HTML-Browser-Komponente in den Standard-Runtimes geben. Eventuell sieht man die Notwendigkeit, dass Java einfacher mit nativen Schnittstellen arbeiten kann, sei es zum OS, sei es zu Hardware-Schnittstellen.&lt;/p&gt; &lt;p&gt;Ich denke schon, dass es da eine Zukunft
    gibt. Die geballte Wucht der vorhandenen Applikationen kann sowieso nur eine Richtung vorgeben. Ich hoffe nur, dass die Macht des Faktischen auch bei Oracle erhört wird.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; – &lt;/div&gt;</content:encoded>
    <dc:date>2011-02-01T17:00:36+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=877">
    <title>JNBB - Joschs NetBeans Blog: BeanDev: BetterIconView in NetBeans Plattform aufgenommen</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/01/31/beandev-bettericonview-in-netbeans-plattform-aufgenommen/</link>
    <content:encoded>&lt;p&gt;You can find an English version on &lt;a href="http://netbeans.dzone.com/news/iconview-bettericonview" title="From IconView to BetterIconView"&gt;NetBeans Zone&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Bei den &lt;a href="http://www.aljoscha-rittner.de/blog/netbeans-platform-certified-training/" title="NetBeans Certified Training"&gt;NetBeans Certified Trainings&lt;/a&gt; übernehme ich regelmäßig den Teil &lt;a
    href="http://edu.netbeans.org/contrib/slides/netbeans-platform/nbp-javabeans_de.pdf" title="Nodes &amp;amp; Explorer Views (de)"&gt;Nodes &amp;amp; Explorer Views&lt;/a&gt; (pdf). Dabei stelle ich regelmäßig die unterschiedlichen Views vor. Dafür habe ich ein kleines Demo-Programm geschrieben. Das Programm zeigt allerdings nicht nur die Vorzüge der Views, sondern auch die Probleme mit deren Darstellungen. Gerade das IconView glänzt nicht gerade mit schöner Optik. Ich hatte aus der Not eine Tugend
    gemacht und gerade für das Training eine eigene Implementation vorbereitet. Damit kann man den Teilnehmern sehr leicht zeigen, wie man eigene Views für die Nodes-API erstellen kann.&lt;/p&gt; &lt;p&gt;&lt;span id="more-877"&gt;&lt;/span&gt;Dieses BetterIconView hat es &lt;a href="http://eppleton.de/blog/" title="Toni Epple"&gt;Toni Epple&lt;/a&gt; angetan und er zeigte es im Dezember letzten Jahres &lt;a href="http://wiki.apidesign.org/wiki/Blogs" title="Blog from Jaroslav Tulach"&gt;Jaroslav
    Tulach&lt;/a&gt;. Er hatte gestern Zeit gehabt, meine paar Codezeilen zu nehmen, um damit das alte IconView zu ersetzen.&lt;/p&gt; &lt;p&gt;Wie man an dem Beispiel des alten IconView erkennen kann, funktioniert so einiges nicht. Fokusrahmen fehlt, Größenberechnung in der Höhe ist zu groß und die Nodes überlappen sich bei langen Texten.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/01/OldIconView.png"&gt;&lt;img
    src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/01/OldIconView.png" title="OldIconView" height="406" width="448" alt="" class="size-full wp-image-879 alignnone" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Meine neue Implementation ist zwar recht einfach und nicht im jeden Detail perfekt, aber sicherlich um einiges besser, als die alte Version in der NetBeans Plattform.&lt;/p&gt; &lt;p&gt;Hier ein Screenshot mit drei selektierten Nodes und dem korrekten Fokusrahmen-Verhalten:&lt;/p&gt;
    &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/01/BetterIconView.png"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2011/01/BetterIconView.png" title="BetterIconView" height="423" width="459" alt="" class="alignnone size-full wp-image-880" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Den Quelltext kann man &lt;a href="http://hg.netbeans.org/ergonomics/rev/35bc1a0d8259" title="HG NetBeans, BetterIconView"&gt;hier einsehen&lt;/a&gt;. Es ist wirklich sehr
    einfach ein ListView zu erweitern, um ein neues IconView zu erzeugen, deswegen werden da keine großen Überraschungen auftauchen.&lt;/p&gt; &lt;p&gt;Man sollte nur berücksichtigen, dass man in Views nicht mit dem Nodes aus dem Modell des Entwicklers arbeitet, sondern mit optimierten Wrappern. In einem Renderer (hier ListCellRenderer) konvertiert man das übergebene Value-Objekt in ein Node mit der Hilfsklasse Visualizer:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width:
    100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;Node node &lt;span style="color: #339933;"&gt;=&lt;/span&gt; Visualizer.&lt;span style="color: #006633;"&gt;findNode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;value&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Hat man diese Hürde geschafft, kann man alles realisieren, was Swing zu bieten hat. Der
    Kreativität sind also keine Grenzen gesetzt. Ich möchte da zum Beispiel auch auf Geertjans Blog verweisen, wo er die &lt;a href="http://blogs.sun.com/geertjan/entry/creating_an_explorer_view_with" title="Creating an Explorer View with Visual Library"&gt;Visual Library als Explorer-View&lt;/a&gt; nutzt.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-01-31T20:53:27+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=869">
    <title>JNBB - Joschs NetBeans Blog: IDEDev: NetBeans IDE 7 ohne Ruby On Rails Unterstützung</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/01/27/idedev-netbeans-ide-7-ohne-ruby-on-rails-unterstuetzung/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Leider erreichte mich heute über die Mailingliste eine nicht sehr schöne Nachricht. Die &lt;a href="http://rubyonrails.org/" title="Ruby on rails Homepage"&gt;Ruby On Rails&lt;/a&gt; Entwicklung wird nicht mehr vom NetBeans Core Team unterstützt.&lt;/p&gt; &lt;p&gt;Tinuola Awopetu von Oracle beschreibt es so:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;After thorough consideration, we have taken the difficult step to discontinue support for Ruby on Rails in
    the NetBeans IDE.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;span id="more-869"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Dabei werden zwei Hauptgründe genannt. Erstens:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;Java SE 7 and Java Development Kit 7 (JDK 7) are the next major releases of the Java SE platform, which Oracle is committed to deliver in 2011. A key objective of the NetBeans IDE has always been to offer superior support for the Java platform. To maintain that objective and capitalize on the JDK 7 release
    themes–multi-language support, developer productivity and performance–it is necessary that our engineering resources are committed to a timely and quality release of NetBeans IDE 7.0.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Das Entwicklerteam will sich auf den Fokus JDK 7 konzentrieren, damit NetBeans 7 eine 100% Unterstützung mit dem Release bieten kann. Damit setzt Oracle (wie auch schon in der Vergangenheit angekündigt wurde), verstärkt auf die Java-Entwicklung. Ruby on Rails kann da nicht in der
    gewünschten Qualität einfließen.&lt;/p&gt; &lt;p&gt;Oracle sieht aber nicht nur einen stärkeren Fokus bei Java, sondern sieht Ruby on rails überhaupt im Abwind. Das ist der zweite Grund:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;Second: Although our Ruby support has historically been well received, based on existing low usage trends we are unable to justify the continued allocation of resources to support the feature.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Ab dem 27. Januar 2011 wird Ruby on rails aus den
    Dev-Builds verschwinden. Entwickler aus der Community, die Ruby on Rails weiter unterstützen wollen, werden auf die &lt;a href="http://wiki.netbeans.org/RubySupport" title="Ruby Support NetBeans"&gt;NetBeans Ruby Support Seite&lt;/a&gt; verwiesen.&lt;/p&gt; &lt;p&gt;Feedback zu dieser Entscheidung wird ebenfalls gewünscht. Oracle verweist dazu auf die &lt;a href="http://netbeans.org/community/lists/top.html" title="NetBeans Foren"&gt;Mailinglisten/Foren&lt;/a&gt;, &lt;a
    href="http://twitter.com/netbeans" title="NetBeans Twitter"&gt;Twitter&lt;/a&gt; oder den &lt;a href="http://netbeans.org/about/contact.html" title="NetBeans Contact"&gt;direkten Kontakt&lt;/a&gt; zum NetBeans IDE Team.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-01-27T12:50:14+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=864">
    <title>JNBB - Joschs NetBeans Blog: JavaDev: Transparente Swing-Buttons</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/01/26/javadev-transparente-swing-buttons/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Nur ein kleines Appetithäppchen. Wenn man transparente JButtons benötigt, weil die dahinter liegenden JPanels Grafiken oder Farbverläufe haben, benötigt man besonders beim Windows-System Look&amp;amp;Feel einen Trick.&lt;/p&gt; &lt;p&gt;Zunächst reicht es nicht, nur setOpaque (false) zu verwenden. Es wird trotzdem ein Hintergrund als Füller gemalt. Die ui-Klasse ist so leider programmiert. Man kann aber eine transparente Hintergrundfarbe
    setzen:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; TransparentButton &lt;span style="color: #000000; font-weight: bold;"&gt;extends&lt;/span&gt; &lt;span style="color: #003399;"&gt;JButton&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; TransparentButton &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;super&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span
    style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; setBackground &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Color&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;255&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;255&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;255&lt;/span&gt;, &lt;span style="color:
    #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; setOpaque &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color:
    #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Wenn man bei (halb-) transparenten Hintergrundfarben das setOpaque (false) vergisst, hat man übrigens sehr unschöne Back-Buffer Effekte. D.h. die Optimierungen im Swing-Framework verursachen dann unschöne zerhackte Grafikeffekte. In Kombination funktioniert es aber super.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right;
    margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-01-26T15:50:39+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=536">
    <title>Java Getriebe » NetBeans: Annotations statt Layereinträge</title>
    <link>http://blog.nigjo.de/netbeans/2011/01/annotations-statt-layereintrage/</link>
    <content:encoded>“Der neue Besen kehrt gut, bevor er voll Staub ist.” — Freidank1 Geertjan schreibt in seinem Blog, dass die Programmbeispiele von NetBeans in der Version 7.0 überarbeitet wurden. Vor allem die direkten Einträge im XML Layer wurden durch Annotations direkt in den entsprechenden Klassen ersetzt. So nett ich die Idee hinter den Annotations auch finde. [...]</content:encoded>
    <dc:date>2011-01-17T09:05:41+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=857">
    <title>JNBB - Joschs NetBeans Blog: JavaDev: Installer und Launcher für Java Programme</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/01/17/javadev-installer-und-launcher-fuer-java-programme/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Die Frage kommt immer wieder mal, deswegen wollte ich hier eine kleine Liste an Programmen erfassen, die Java-Programme in native Betriebssysteme integrieren, Installer erzeugen oder das Starten vereinfachen.&lt;/p&gt; &lt;p&gt;Ich habe dafür drei Gruppen. Die &lt;strong&gt;Launcher&lt;/strong&gt; sind Executables, die Java-Programme wie native Programme starten lassen. Das ist üblicherweise nur unter Windows notwendig. Linux und Mac behandeln
    Java-Programme wie alle anderen Executables. Die nächste Gruppe wäre &lt;strong&gt;Installer&lt;/strong&gt;. Diese Werkzeuge erzeugen aus Java-Projekten Installationspakete, die es dem Anwender ermöglichen per Kommandozeile oder Assistenten Java-Programme zu installieren oder später zu deinstallieren. Die letzte Gruppe behandelt &lt;strong&gt;Packer&lt;/strong&gt;. Darin fasse ich Tools zusammen, die 3rd-Party-Libs in ein JAR zusammenfassen, JARs komprimieren oder Klassen so umbenennen, so dass eine
    Quelltextwiederherstellung sehr schwer gemacht wird (Obfuscator).&lt;/p&gt; &lt;p&gt;Ich würde mich freuen, wenn ein paar &lt;strong&gt;Anregungen&lt;/strong&gt; und &lt;strong&gt;Erfahrungsberichte&lt;/strong&gt; rein kommen würden. Für die NetBeans Platform gibt es schon &lt;a href="http://blogs.sun.com/geertjan/entry/generate_a_netbeans_platform_installer" title="NetBeans Platform Installer"&gt;integrierte Installer&lt;/a&gt; für Windows, Linux, MacOS und Solaris sowie eine WebStart Variante.
    Außerdem einen Pack200 Tool für den Installer. Da braucht man für die meisten Fälle keine externen Tools.&lt;/p&gt; &lt;p&gt;Hier also eine Liste, die ich schon so gesammelt habe:&lt;span id="more-857"&gt;&lt;/span&gt;&lt;/p&gt; &lt;h2&gt;Launcher&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://winrun4j.sourceforge.net/" title="WinRun for Java"&gt;WinRun4J&lt;/a&gt; &lt;ul&gt; &lt;li&gt;Lizenz: &lt;a href="http://www.eclipse.org/legal/cpl-v10.html" title="Common Public
    License"&gt;CPL&lt;/a&gt;&lt;/li&gt; &lt;li&gt;OS: Windows&lt;/li&gt; &lt;li&gt;Integration: Kommandozeile, Eclipse Plugin&lt;/li&gt; &lt;li&gt;Ein Executable mit native Bindings, Windows DDE-Zugriff, konfigurierbarem Icon, INI-Datei für Startparameter, Dienste-Wrapper, Systemlog-Unterstützung und Konsolenmodus.&lt;/li&gt; &lt;li&gt;Es unterstützt auch das Packaging von 3rd-Party Bibliotheken.&lt;/li&gt; &lt;li&gt;Soweit ich das sehen kann, hat man mindestens immer ein JAR und eine Java-Umgebung muss
    installiert sein.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://launch4j.sourceforge.net/"&gt;Launch4j&lt;/a&gt; &lt;ul&gt; &lt;li&gt;Lizenz: &lt;a href="http://www.opensource.org/licenses/bsd-license.html" title="BSD Lizenz"&gt;BSD&lt;/a&gt; und &lt;a href="http://www.opensource.org/licenses/mit-license.html" title="MIT Lizenz"&gt;MIT&lt;/a&gt;&lt;/li&gt; &lt;li&gt;OS: Alle Java-Plattformen (Ziel bleibt aber Windows)&lt;/li&gt; &lt;li&gt;Integration: Kommandozeile, Ant, Maven, &lt;a
    href="http://sourceforge.net/project/screenshots.php?group_id=95944" title="Screenshots"&gt;GUI (Wizard)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Launch4j erzeugt eine Windows Executable-Datei, die alle JARs, native Bibliotheken und sogar ein Embedded JRE enthalten kann.&lt;/li&gt; &lt;li&gt;Es unterstützt eigene Icons für die Exe, JAR’s werden nicht beim Start extrahiert, unterstützt auch Konsolenanwendungen,&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;Installer&lt;/h2&gt; &lt;ul&gt;
    &lt;li&gt;&lt;a href="http://java.net/projects/openinstaller/" title="Open Installer"&gt;Open Installer&lt;/a&gt; (Crossplatform Installer) &lt;ul&gt; &lt;li&gt;Lizenz: &lt;a href="http://www.opensource.org/licenses/cddl1.php" title="CDDL 1.0"&gt;CDDL 1.0&lt;/a&gt;&lt;/li&gt; &lt;li&gt;OS: Alle Java-Plattformen&lt;/li&gt; &lt;li&gt;Integration: Kommandozeile, NetBeans Platform Installer&lt;/li&gt; &lt;li&gt;Ich erwähne den Open Installer hier, weil dieser in der NetBeans Platform integriert ist und als
    Installer für den Glassfish verwendet wird. Ansonsten würde ich als Entwickler die Finger davon lassen, weil das Projekt extrem schlecht dokumentiert ist. Am besten den Quelltext anschauen, wenn man eine hohes Maß an Interesse und Leidensfähigkeit hat.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://antigen.sourceforge.net/" title="Antigen"&gt;Antigen&lt;/a&gt; (Ant Installer Generator) &lt;ul&gt; &lt;li&gt;Lizenz: k/a&lt;/li&gt; &lt;li&gt;OS: Alle Java-Plattformen&lt;/li&gt;
    &lt;li&gt;Integration: Ant, Kommandozeile, (evtl. Maven)&lt;/li&gt; &lt;li&gt;Erzeugt aus Ant-Scripts einen grafischen Installer&lt;/li&gt; &lt;li&gt;Alle Programmbestandteile werden in einem JAR-Installer gepackt. Eine Java Runtime muss auf dem Zielrechner existieren.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://www.installjammer.com/features" title="InstallJammer, Features"&gt;InstallJammer&lt;/a&gt; &lt;ul&gt; &lt;li&gt;Lizenz: GPL mit “&lt;a
    href="http://www.installjammer.com/docs/index.html?License" title="GPL with Exception"&gt;Special Exception&lt;/a&gt;“, darf kommerziell genutzt werden&lt;/li&gt; &lt;li&gt;OS: Multiplattform (tck/tcl), Windows 98, ME, 2000, XP, 2003, Vista, 2008, Linux, FreeBSD, Solaris, HP-UX, AIX&lt;/li&gt; &lt;li&gt;Integration: Kommandozeile, GUI&lt;/li&gt; &lt;li&gt;InstallJammer ist eine mächtige OpenSource Lösung die einen nativen Installer mit umfangreicher Buildumgebung anbietet. Der Installer ist nicht auf
    Java-Programme beschränkt. JRE wird vom Installer nur gesucht, aber nicht bei Bedarf installiert. Man kann aber das JRE wohl über &lt;a href="http://www.installjammer.com/forums/viewtopic.php?f=1&amp;amp;t=1156&amp;amp;p=6103&amp;amp;hilit=jre#p6103" title="Forum, JRE bei Bedarf installieren"&gt;Actions mitinstallieren&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Mehrsprachigkeit, Multiplattform, Nativer Installer im OS-Look, Benutzerdefinierte Aktionen, Installer-Profile (Kommandozeile, GUI, Silent, usw),
    GUI-Bearbeitung der Assistenten-Panels, Themen, Deinstallationsroutinen.&lt;/li&gt; &lt;li&gt;Umfangreiche &lt;a href="http://www.installjammer.com/docs/" title="Dokumentation zu InstallJammer"&gt;Dokumentation&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://www.ej-technologies.com/products/install4j/overview.html" title="Install for Java"&gt;Install4j&lt;/a&gt; &lt;ul&gt; &lt;li&gt;Lizenz: Kommerziell (Windows Single ab 600€, Multiplatform Single ab 1700€, nach oben
    offen…)&lt;/li&gt; &lt;li&gt;OS: Win32, Win64, Linux RPM, MacOS, Unix&lt;/li&gt; &lt;li&gt;Integration: Ant, Kommandozeile, GUI&lt;/li&gt; &lt;li&gt;Dieser kommerzielle Installer bietet einen GUI oder Kommandozeileninstaller (auch Silent), JRE-Pacakging oder Detection, GUI und Scriptsprache, Mehrsprachigkeit, Dienste-Unterstützung, eigenes Icon und sehr vieles mehr.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://www.advancedinstaller.com/top-freeware-features.html"&gt;Advanced
    Installer for Java Freeware Edition&lt;/a&gt; &lt;ul&gt; &lt;li&gt;Lizenz: Kommerziell, Freeware Edition&lt;/li&gt; &lt;li&gt;OS: Windows&lt;/li&gt; &lt;li&gt;Integration: Kommandozeile, &lt;a href="http://www.advancedinstaller.com/main-screen-shot.html" title="GUI"&gt;GUI&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Die Freeware Edition bietet einen MSI Installer Generator für Java Programme mit UAC Unterstützung, Registry-Zugriff, 32bit und 64bit, Scripting über XML-Konfiguration.&lt;/li&gt; &lt;li&gt;JRE Bundling
    ist &lt;em&gt;nicht &lt;/em&gt;in der Free Edition, Custom Icon ist &lt;em&gt;nicht&lt;/em&gt; möglich.&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.advancedinstaller.com/feats-list.html" title="Fähigkeiten im Vergleich"&gt;Feature Matrix&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;Packer&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://one-jar.sourceforge.net/" title="One JAR"&gt;one-jar&lt;/a&gt; &lt;ul&gt; &lt;li&gt;Lizenz: &lt;a
    href="http://one-jar.sourceforge.net/index.php?page=documents&amp;amp;file=license" title="Lizenz"&gt;Proprietär, OpenSource&lt;/a&gt;, BSD?&lt;/li&gt; &lt;li&gt;OS: Alle Java-Plattformen&lt;/li&gt; &lt;li&gt;Integration: Ant, Maven&lt;/li&gt; &lt;li&gt;Erzeugt aus mehreren JAR-Bibliotheken eine einzelne ausführbare JAR-Datei&lt;/li&gt; &lt;li&gt;Unterstützt auch native Bibliotheken, die während des Starts in das Dateisystem entpackt werden.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;a
    href="http://proguard.sourceforge.net/"&gt;ProGuard&lt;/a&gt; (Obfuscator) &lt;ul&gt; &lt;li&gt;Lizenz: GPL&lt;/li&gt; &lt;li&gt;OS: Alle Java-Plattformen&lt;/li&gt; &lt;li&gt;Integration: Kommandozeile, Ant&lt;/li&gt; &lt;li&gt;Verändert sprechende Bezeichner (z.B. Paket und Klassennamen) in kompilierten JARs in verkürzte oder randomisierte Namen, um die Wiederherstellung von bearbeitbaren Quelltext zu erschweren.&lt;/li&gt; &lt;li&gt;Unterstützt viele Plattformen (Java 1.1 bis 6, ME,
    Android)&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/pack200.html" title="pack200 JavaSE 5"&gt;pack200&lt;/a&gt; JAR Packager &lt;ul&gt; &lt;li&gt;Lizenz: &lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u21-license-159167.txt"&gt;Oracle License&lt;/a&gt;&lt;/li&gt; &lt;li&gt;OS: Alle Java-Plattformen&lt;/li&gt; &lt;li&gt;Integration: Kommandozeile&lt;/li&gt; &lt;li&gt;Ein Tool des Java SE SDKs von Oracle,
    dass seit Java 5 JAR Dateien besonders effizient packen kann.&lt;/li&gt; &lt;li&gt;Der Einsatz sind üblicherweise webbasierte Java-Anwendungen, damit diese im Download möglichst wenig Bandbreite verwenden&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/java_warehouse/single_jar/" title="Script für Ant"&gt;Ant Script für die NetBeans IDE&lt;/a&gt; &lt;ul&gt; &lt;li&gt;Lizenz: k/a&lt;/li&gt; &lt;li&gt;OS: Alle Java-Plattformen&lt;/li&gt;
    &lt;li&gt;Integration: Ant, NetBeans IDE&lt;/li&gt; &lt;li&gt;Es handelt sich dabei nicht um ein Programm, sondern ein Ant-Target-Script zum Erstellen von Single-JARs. Der verlinkte Blogeintrag beschreibt, wie man in NetBeans dieses Script integrieren kann.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-01-17T08:21:15+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=850">
    <title>JNBB - Joschs NetBeans Blog: IDEDev: Hudson Continious Integration (CI) wird Jenkins</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/01/12/idedev-hudson-continious-integration-ci-wird-jenkins/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;&lt;a href="http://kohsuke.org/" title="Blog"&gt;Kohsuke Kawaguchi&lt;/a&gt; hat es &lt;a href="http://kohsuke.org/bye-bye-hudson-hello-jenkins/" title="Bye bye Hudson"&gt;gestern veröffentlicht&lt;/a&gt;. Der Name Hudson CI ist gestorben. Der &lt;a href="http://de.wikipedia.org/wiki/Kontinuierliche_Integration" title="Wikipedia"&gt;Continious Integration Server&lt;/a&gt; soll in Jenkins (CI?) umbenannt werden.&lt;/p&gt; &lt;p&gt;Wie Kohsuke in einer
    Nachricht schreibt, konnte Oracle, trotz einer ein Monat langen Kommunikation, nicht davon überzeugt werden, dass der Name Hudson CI in einer “neutralen Organisation” gut aufgehoben wäre.&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;The central issue was that we couldn’t convince Oracle to put the trademark under a neutral party’s custody (such as &lt;a href="http://sfconservancy.org/"&gt;Software Freedom Conservancy&lt;/a&gt;), to level the playing field.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;span
    id="more-850"&gt;&lt;/span&gt;Er führt aber auch aus, dass Oracle Pläne mit Hudson verfolgen will, die der aktuellen Entwicklung des CI-Servers nicht entspricht. Dazu gehöre auch eine erheblich formalisiertere Projektstruktur, Änderungen in der Architektur und das verstärkte Einbinden von 3rd-Party Abhängigkeiten.&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;Aside from this, Oracle wanted a broader change to the way the Hudson project operates, including a far more formal change review process, architectures,
    3rd party dependencies and their licenses, and so on.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;[...]&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;All of those still might not have been a show-stopper if we felt that there is a genuine trust between us, but in this case, we just failed to build such a relationship, even after a month long conversation.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Als Konsequenz soll das Projekt in Jenkins umbenannt werden. Dieser Name ist erneut ein “Buttler”-Name aus dem englischen
    Sprachraum und soll aktuell von keinem anderen Software-Projekt beansprucht sein.&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;So in the end, we’d like to propose the community that we regrettably abandon the name “Hudson” and rename to “Jenkins” — it’s another English-sounding butler name that doesn’t collide with any software project as far as I can tell.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Das Proposal für die Namensänderung wurde im &lt;a href="http://www.hudson-labs.org/content/hudsons-future"&gt;Hudson
    Lab&lt;/a&gt; veröffentlicht:&lt;/p&gt; &lt;blockquote&gt; &lt;h3&gt;The Proposal&lt;/h3&gt; &lt;p&gt;First, we rename the project – the choice for a new name is &lt;strong&gt;Jenkins&lt;/strong&gt;, which we think evokes the same sort of English butler feel as Hudson. We’ve already registered domains, Twitter users, etc for the new name, and have done our best to verify that there are no existing trademarks which would conflict with it. Kohsuke will be registering the trademark for Jenkins in his
    name, with the intent of transferring ownership of the trademark to the umbrella of the &lt;a href="http://www.sfconservancy.org/"&gt;Software Freedom Conservancy&lt;/a&gt; once the Jenkins project has been admitted to it (which, I should add, is very much our plan, hopefully in their next round of new projects in a few months – we’ve already had preliminary contacts with SFC). We still invite Oracle to remain involved with the project, on equal terms with all other contributors, and hope they’ll take
    us up on this invitation.&lt;/p&gt; &lt;p&gt;[...]&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Das Proposal umfasst aber mehr als nur eine Namensänderung. Außerdem soll die Infrastruktur des Projektes komplett von Oracle weg verschoben und ein Governance Board eingerichtet werden.&lt;/p&gt; &lt;p&gt;Ich würde mich freuen, wenn der CI Server auch in Zukunft in der NetBeans IDE unterstützt wird. Hudson &lt;a
    href="http://www.aljoscha-rittner.de/blog/archive/2010/05/10/idedev-netbeans-und-maven-mit-hudson-als-ci-server/" title="Hudson als CI Server"&gt;nutze ich&lt;/a&gt; schon seit einiger Zeit, um zentralisierte Maven- und Ant-Builds durchzuführen.&lt;/p&gt; &lt;p&gt;Noch besser wäre es, Oracle würde mit seinem verbleibenden Hudson Projekt sich nicht zu weit von Jenkins entfernen. Konkurrenz belebt zwar das Geschäft, aber in diesem Fall wäre der Nutzen für die Anwender fraglich.&lt;/p&gt; &lt;p&gt;Beste
    Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-01-12T06:16:54+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=843">
    <title>JNBB - Joschs NetBeans Blog: BeanDev: Plugins schneller testen</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/01/10/beandev-plugins-schneller-testen/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Wenn man kleine schnelle Testumgebungen für NetBeans IDE-Plugins haben möchte, sollte man sich &lt;a href="http://wiki.netbeans.org/DevFaqNetBeansFullHack" title="DevFaqNetBeansFullHack"&gt;diese FAQ&lt;/a&gt; anschauen.&lt;/p&gt; &lt;blockquote&gt; &lt;h1&gt;DevFaqNetBeansFullHack&lt;/h1&gt; &lt;h2&gt;Can I test changes to the IDE without going through the license check and so on?&lt;/h2&gt; &lt;/blockquote&gt; &lt;p&gt;Ja, tatsächlich geht das. Mit
    einem kleinen Parameter &lt;code class="codecolorer text dawn"&gt;&lt;span class="text"&gt;netbeans.full.hack&lt;/span&gt;&lt;/code&gt; auf &lt;code class="codecolorer text dawn"&gt;&lt;span class="text"&gt;true&lt;/span&gt;&lt;/code&gt; gesetzt, werden einiges an Dialogen, Test und Remotezugriffen (Auto Update Center, Maven Index) deaktiviert:&lt;br /&gt; &lt;span id="more-843"&gt;&lt;/span&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;ul&gt; &lt;li&gt; Auto Update background check (to see if updates are
    available); you can still use AU via &lt;strong&gt;Tools &gt; Plugin Manager&lt;/strong&gt;&lt;/li&gt; &lt;li&gt; prompting about still-running tasks when shutting down&lt;/li&gt; &lt;li&gt; license dialog&lt;/li&gt; &lt;li&gt; import of old user directory&lt;/li&gt; &lt;li&gt; IDE registration dialog&lt;/li&gt; &lt;li&gt; dialog suggesting that you submit usage statistics&lt;/li&gt; &lt;li&gt; welcome screen displayed by default and RSS feed refreshed&lt;/li&gt; &lt;li&gt; blocking dialog when some
    modules could not be loaded&lt;/li&gt; &lt;li&gt; use of &lt;tt&gt;~/NetBeansProjects/&lt;/tt&gt; for newly created projects (&lt;tt&gt;java.io.tmpdir&lt;/tt&gt; will be used instead)&lt;/li&gt; &lt;li&gt; resizing gesture submit dialog (&lt;tt&gt;SubmitStatus.resize&lt;/tt&gt;)&lt;/li&gt; &lt;li&gt; weekly Maven repository indexing (can be configured in Options dialog)&lt;/li&gt; &lt;li&gt; long package name for default group ID in new Maven project (&lt;tt&gt;test&lt;/tt&gt; used instead)&lt;/li&gt;
    &lt;/ul&gt; &lt;/blockquote&gt; &lt;p&gt;So können Plugin-Tests und automatisierte Tasks mit Aufruf der NetBeans IDE ohne störende Dialoge durchgeführt werden.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-01-10T17:35:26+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=835">
    <title>JNBB - Joschs NetBeans Blog: IDEDev: SevenBeans NetBeans IDE Plugin für Windows7 Feeling</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/01/06/idedev-sevenbeans-netbeans-ide-plugin-fur-windows7-feeling/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Das Plugin &lt;a href="http://www.strixcode.com/sevenbeans/" title="SevenBeans Homepage"&gt;SevenBeans&lt;/a&gt; bringt für die NetBeans IDE das 100% Native-Feeling auf Windows 7 Betriebssystemen.&lt;/p&gt; &lt;p&gt;Mit diesem Plugin erhält man zu dem NetBeans-Taskbar Icon eine&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Jumplist (spezielles Kontextmenü per rechter Maustaste),&lt;/li&gt; &lt;li&gt;Iconoverlays (d.h. ein Build wird in der Taskbar als Badged Icon
    dargestellt),&lt;/li&gt; &lt;li&gt;Den hellgrünen Fortschrittsbalken im Taskbar-Icon,&lt;/li&gt; &lt;li&gt;Minivorschau der geöffneten Tabs, wenn man mit der Maus über das Taskbar-Icon fährt&lt;/li&gt; &lt;li&gt;und einen Konfigurationsdialog in den Options, um alle neuen Features ein- oder auszuschalten.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;span id="more-835"&gt;&lt;/span&gt;SevenBeans basiert auf der Technologie von &lt;a href="http://www.strixcode.com/j7goodies/" title="J7Goodies
    Homepage"&gt;J7Goodies&lt;/a&gt;, ein Framework um Swing-Anwendungen mit solchen Features auszustatten.&lt;/p&gt; &lt;p&gt;Eine Jumplist wird so zum Kinderspiel:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;DestinationList albums&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; albums.&lt;span style="color: #006633;"&gt;addFile&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"C:&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;Users&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;Alex&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;My Pictures&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;Bachelor Party.alb"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br
    /&gt; albums.&lt;span style="color: #006633;"&gt;addFile&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"C:&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;Users&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;Alex&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;My Pictures&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;Family.alb"&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; albums.&lt;span style="color: #006633;"&gt;addFile&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"C:&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;Users&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;Alex&lt;span style="color: #000099; font-weight: bold;"&gt;\\&lt;/span&gt;My Pictures&lt;span style="color: #000099;
    font-weight: bold;"&gt;\\&lt;/span&gt;Flowers.alb"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; DestinationList tasks&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; tasks.&lt;span style="color: #006633;"&gt;addTask&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"/camera"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;"Import from
    camera"&lt;/span&gt;, cameraIconPath&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; tasks.&lt;span style="color: #006633;"&gt;addTask&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"/scan"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;"Scan a photo"&lt;/span&gt;, scannerIconPath&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br
    /&gt; &lt;br /&gt; JumpList jumpList&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; jumpList.&lt;span style="color: #006633;"&gt;appendRecentCategory&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; jumpList.&lt;span style="color: #006633;"&gt;appendCustomCategory&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #0000ff;"&gt;"Albums"&lt;/span&gt;, albums&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; jumpList.&lt;span style="color: #006633;"&gt;appendTasks&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;tasks&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; jumpList.&lt;span style="color: #006633;"&gt;save&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Viele weitere Beispiele finden sich auf der J7Goodies Homepage.&lt;/p&gt; &lt;p&gt;Schön ist es, dass das Plugin für NetBeans schon fertig ist. Die aktuelle Version kann &lt;a href="http://www.strixcode.com/sevenbeans/" title="Download SevenBeans"&gt;hier heruntergeladen&lt;/a&gt; werden.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt;
    Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-01-06T17:29:38+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=832">
    <title>JNBB - Joschs NetBeans Blog: IDE: Wichtigstes Ereignis 2010?</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/01/04/ide-wichtigstes-ereignis-2010/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;JAXenter hat wieder eine (der sehr häufigen) &lt;a href="http://it-republik.de/jaxenter/quickvote/" title="Aktueller Quickvote JAXenter"&gt;Quickvote-Umfragen&lt;/a&gt;. Aktuell geht es um das wichtigste Java-Ereignis 2010.&lt;/p&gt; &lt;p&gt;Klar, dass die Sun-Übernahme durch Oracle inzwischen über 60% bekommen hat, aber es wird auch gefragt, ob nicht vielleicht NetBeans 6.9 das wichtigste Ereignis gewesen ist? Hmm &lt;img
    src="http://www.aljoscha-rittner.de/blog/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /&gt; &lt;/p&gt; &lt;p&gt;Zumindest 2% erreicht &lt;a href="http://netbeans.org/downloads/index.html" title="NetBeans Downloads"&gt;NetBeans 6.9&lt;/a&gt; zur Zeit, &lt;a href="http://download.eclipse.org/e4/downloads/" title="Eclipse e4 Download"&gt;Eclipse e4&lt;/a&gt;-Linie nur 1%.&lt;/p&gt; &lt;p&gt;Ich persönlich finde neben 6.9 und Snoracle noch das &lt;a
    href="http://maven.apache.org/download.html" title="Maven 3 Download"&gt;Maven 3&lt;/a&gt; Release als sehr wichtiges Ereignis an.&lt;/p&gt; &lt;p&gt;[UPDATE]&lt;/p&gt; &lt;p&gt;Das &lt;a href="http://it-republik.de/jaxenter/quickvote/results/1/poll/110" title="Quickvote: Wichtigstes Ereignis 2010"&gt;Ergebnis&lt;/a&gt; steht fest, 274 Teilnehmer (nicht sehr repräsentativ).&lt;/p&gt; &lt;p&gt;&lt;em&gt;Nur ein kurzer Kommentar: &lt;/em&gt;Die NetBeans 6.9 Version bekam (ggü. den anderen wichtigen
    Ereignissen) gute 5%. Klar, Sun-Übernahme durch Oracle bekommt 56%. Eclipse e4 allerdings nur 0%. Die JDK7/8 Roadmap bekam 5% und ist m.E. abgestraft. Auch Oracle hat es bis jetzt nicht geschafft mehr Schwung in die Entwicklung zu bringen. Altlast durch Sun? Man könnte noch die Sprachenvielfalt für Java mit 6% dazu addieren, um das Ergebnis zu beschönigen. Aber na ja…&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt;
    &lt;/div&gt;</content:encoded>
    <dc:date>2011-01-04T22:37:44+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=502">
    <title>Java Getriebe » NetBeans: aktueller Stand beim Update Center</title>
    <link>http://blog.nigjo.de/netbeans/2011/01/aktueller-stand-beim-update-center/</link>
    <content:encoded>Die Zeichen stehen gut, dass in der 7er Version von NetBeans die Icons im PluginManager austauschbar werden. Jaroslav Tulach hat zwar nicht meine Version der Quelländerung verwendet, aber dafür hat er ziemlich tief in die Trickkiste gegriffen1 und das Problem geschickt umschifft. Jaroslav hat das fragliche enum CATEGORY selbst nicht verändert. Damit hat er vor [...]</content:encoded>
    <dc:date>2011-01-03T14:04:43+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=818">
    <title>JNBB - Joschs NetBeans Blog: BeanDev: Bestimmte Nodes im View aufklappen (OutlineView)</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2011/01/02/beandev-bestimmte-nodes-im-view-aufklappen-outlineview/</link>
    <content:encoded>&lt;p&gt;Im letzten Teil der Serie wurden alle aufgeklappten Nodes eines OutlineViews ermittelt und gespeichert. In diesem Teil der Serie geht es darum diese gespeicherten Informationen zu nutzen, um den Aufbau in einem OutlineView wieder herzustellen.&lt;/p&gt; &lt;p&gt;In der NetBeans IDE sieht man dieses Verhalten seit 6.9 im Projekt-Explorer. Dort werden die aufgeklappten Hierarchien (und selektierten Knoten) nach dem Start so wieder aufgebaut, wie man es beim letzten Schließen
    verlassen hatte.&lt;span id="more-818"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Zunächst benötige ich eine Methode, die aus der letzten Serie kodierten Nodes, wieder eine Liste von String Arrays erzeugt. Denn diese Liste braucht man für die NodeOp-Klasse aus dem NetBeans Framework.&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #008000; font-style: italic;
    font-weight: bold;"&gt;/**&lt;br /&gt; &#160; &#160;* Liest aus den Properties die ExpandedPath-Einträge.&lt;br /&gt; &#160; &#160;* @param delim &#160; Trenner für den Pfad (z.B. "/")&lt;br /&gt; &#160; &#160;* @param props &#160; Properties-Container, in dem die Pfade gespeichert wurden&lt;br /&gt; &#160; &#160;* @param prefix &#160;Präfix für die Keys.&lt;br /&gt; &#160; &#160;* @return Liste der ermittelten Path-Arrays&lt;br /&gt; &#160; &#160;*/&lt;/span&gt;&lt;br /&gt; &#160; &lt;span
    style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;static&lt;/span&gt; List&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt; loadPaths &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;String&lt;/span&gt; delim, &lt;span style="color:
    #003399;"&gt;Properties&lt;/span&gt; props, &lt;span style="color: #003399;"&gt;String&lt;/span&gt; prefix&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; List&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt; paths &lt;span style="color:
    #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; ArrayList&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160;
    &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;prefix &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; prefix &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;""&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span
    style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt; count &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003399;"&gt;Integer&lt;/span&gt;.&lt;span style="color: #006633;"&gt;parseInt&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;props.&lt;span style="color: #006633;"&gt;getProperty&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;prefix &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color:
    #0000ff;"&gt;"ExpandedCount"&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;"0"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt; i &lt;span style="color:
    #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; count&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; paths.&lt;span style="color: #006633;"&gt;add&lt;/span&gt; &lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;props.&lt;span style="color: #006633;"&gt;getProperty&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;prefix &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;"ExpandedPath."&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; i&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;split&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;delim&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; paths&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Diese Pfade
    können nun mit der folgenden Methode expandiert werden:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #008000; font-style: italic; font-weight: bold;"&gt;/**&lt;br /&gt; &#160; &#160;* Expandiert alle Pfade der Liste, die schon mal über getExpandedPaths ermittelt wurde.&lt;br /&gt; &#160; &#160;* @param view&lt;br /&gt; &#160; &#160;* @param
    rootNode&lt;br /&gt; &#160; &#160;* @param exPaths&lt;br /&gt; &#160; &#160;*/&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; expandNodes&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; OutlineView view, Node rootNode,
    List&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt; exPaths&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #000000; font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: #003399;"&gt;String&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; path &lt;span style="color: #339933;"&gt;:&lt;/span&gt; exPaths&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; Node found&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span
    style="color: #000000; font-weight: bold;"&gt;try&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; found &lt;span style="color: #339933;"&gt;=&lt;/span&gt; NodeOp.&lt;span style="color: #006633;"&gt;findPath&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;rootNode, path&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color:
    #009900;"&gt;}&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;catch&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;NodeNotFoundException nnfe&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; found &lt;span style="color: #339933;"&gt;=&lt;/span&gt; nnfe.&lt;span style="color: #006633;"&gt;getClosestNode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; Node leafNode &lt;span style="color: #339933;"&gt;=&lt;/span&gt; found&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color:
    #003399;"&gt;EventQueue&lt;/span&gt;.&lt;span style="color: #006633;"&gt;invokeLater&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Runnable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000;
    font-weight: bold;"&gt;public&lt;/span&gt; @Override&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #003399;"&gt;TreeNode&lt;/span&gt; visualTreeNode&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;TreeNode&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;path.&lt;span style="color: #006633;"&gt;length&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; Node n &lt;span style="color: #339933;"&gt;=&lt;/span&gt; leafNode&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt; i &lt;span style="color: #339933;"&gt;=&lt;/span&gt; path.&lt;span
    style="color: #006633;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i &lt;span style="color: #339933;"&gt;&gt;=&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;--&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight:
    bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;n &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
    &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; visualTreeNode&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; Visualizer.&lt;span style="color: #006633;"&gt;findVisualizer&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span
    style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; n &lt;span style="color: #339933;"&gt;=&lt;/span&gt; n.&lt;span style="color: #006633;"&gt;getParentNode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160;
    &#160; view.&lt;span style="color: #006633;"&gt;getOutline&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;expandPath&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;TreePath&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;visualTreeNode&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &lt;span
    style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;In einer Schleife wird zunächst versucht mit der Hilfsmethode &lt;a href="http://bits.netbeans.org/dev/javadoc/org-openide-nodes/org/openide/nodes/NodeOp.html#findPath%28org.openide.nodes.Node,%20java.lang.String[]%29" title="API: NodeOp"&gt;NodeOp.findPath&lt;/a&gt; den Knoten zu finden, der durch die Kaskade von String-Namen aufzufinden ist. Wird dieser Knoten nicht gefunden, gibt es eine &lt;a
    href="http://bits.netbeans.org/dev/javadoc/org-openide-nodes/org/openide/nodes/NodeNotFoundException.html" title="API: NodeNotFoundException"&gt;NodeNotFoundException&lt;/a&gt;. Diese Exception liefert mit getClosestNode, den Node, der im Pfad als letztes gefunden wurde (wenn wirklich nichts passt, dann ist es die rootNode).&lt;/p&gt; &lt;p&gt;Nun muss in den EventDispatcher-Thread gewechselt werden. In dem TreeNode-Array werden nun alle TreeNodes erfasst, die den Pfad vom letzten Node bis zur
    root-Node gehen. Auch hier braucht man die &lt;a href="http://bits.netbeans.org/dev/javadoc/org-openide-explorer/org/openide/explorer/view/Visualizer.html" title="Explorer API: Visualizer"&gt;Visualizer&lt;/a&gt;-Klasse, um aus dem realen Node den VisualizerNode zu erhalten. Wenn das Array zusammen ist, wird &lt;a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-swing-outline/org/netbeans/swing/outline/Outline.html#expandPath%28javax.swing.tree.TreePath%29" title="API: Outline
    expandPath"&gt;expandPath&lt;/a&gt; des Outlines aufgerufen. Der TreePath nimmt das Array der VisualizerNodes auf (TreePath arbeitet ja nicht mit String-Pfaden, sondern mit Objekten – und hier immer mit den VisualizerNode-Objekten).&lt;/p&gt; &lt;p&gt;Das sollte es auch schon gewesen sein. So kann man OutlineView-Hierarchien selektiv expandieren. In dem nächsten Teil der Serie werden die Besonderheiten bei einem BeanTreeView beschrieben. Da ist das Verfahren etwas komplizierter.&lt;/p&gt; &lt;div
    style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2011-01-02T18:30:14+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=822">
    <title>JNBB - Joschs NetBeans Blog: Happy New Year / Frohes Neues Jahr!</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/31/happy-new-year-fraohes-neues-jahr/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/Feuerwerk_2011.jpg"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/Feuerwerk_2011.jpg" title="Feuerwerk_2011" height="188" width="250" alt="" class="alignleft size-full wp-image-823" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;Es ist von grundlegender Bedeutung, jedes Jahr mehr zu lernen als im Jahr davor.&lt;/p&gt;&lt;/blockquote&gt;
    &lt;p style="text-align: right;"&gt;&lt;em&gt;Peter Ustinov&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Ich wünsche allen Mitlesern einen guten Rutsch in das Neue Jahr, einen guten Start und erfolgreiches Jahr 2011.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-31T22:59:52+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=807">
    <title>JNBB - Joschs NetBeans Blog: BeanDev: Expandierte Nodes ermitteln und speichern (OutlineView)</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/29/beandev-expandierte-nodes-ermitteln-und-speichern-outlineview/</link>
    <content:encoded>&lt;p&gt;Dieser Teil der Serie beschäftigt sich mit dem Problem, alle geöffneten (expandierten) Nodes eines OutlineView zu ermitteln und zu speichern.&lt;/p&gt; &lt;p&gt;Das OutlineView bietet glücklicherweise passende Methoden, um an grundlegende Informationen zu kommen, ohne eine Sub-Klasse erzeugen müssen. Das BeanTreeView ist da etwas komplizierter zu handhaben (dazu aber in einem späteren Teil). &lt;span id="more-807"&gt;&lt;/span&gt;Zunächst ist es wichtig zu verstehen, dass
    Nodes in Views nicht die selben&#160; Nodes sind, die man in einem Node-Modell erzeugt. Alle View verwenden Node-Wrapper, so genannte Visualizer Nodes, um eine bessere Performance zu ermöglichen.&lt;/p&gt; &lt;p&gt;Wenn man direkt mit Views und den Nodes arbeitet, muss man also immer zwischen den Wrapper und dem realen Node-Objekt konvertieren. Dafür gibt es die Hilfsklasse &lt;a href="http://bits.netbeans.org/dev/javadoc/org-openide-explorer/org/openide/explorer/view/Visualizer.html" title="Explorer
    API: Visualizer"&gt;Visualizer&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Außerdem sind die Outline- und TreeViews ganz klassische Swing-Komponenten, die mit &lt;a href="http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JTree.html" title="Java API: JTree"&gt;JTree&lt;/a&gt; als Baum-Komponente arbeiten. Und da kommt man zwangsläufig mit &lt;a href="http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/tree/TreePath.html" title="Java API: TreePath"&gt;TreePath&lt;/a&gt; in Kontakt.&lt;/p&gt;
    &lt;p&gt;Mit diesem Wissen kann man nun folgende Methode zusammenbauen:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #008000; font-style: italic; font-weight: bold;"&gt;/**&lt;br /&gt; &#160; &#160;* Ermittelt alle geöffneten Pfade als String-Liste&lt;br /&gt; &#160; &#160;* @param view &#160; &#160; &#160;OutlineView, auf dem gearbeitet werden
    soll.&lt;br /&gt; &#160; &#160;* @param rootNode &#160;Die root-Node des Modells&lt;br /&gt; &#160; &#160;* @return Eine Liste von String-Arrays, die die geöffneten Pfade repräsentieren.&lt;br /&gt; &#160; &#160;*/&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;static&lt;/span&gt; List&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:
    #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt; getExpandedPaths&lt;span style="color: #009900;"&gt;(&lt;/span&gt;OutlineView view, Node rootNode&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;List&lt;/span&gt; result&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:
    #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; ArrayList&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;TreeNode&lt;/span&gt; rtn &lt;span style="color: #339933;"&gt;=&lt;/span&gt; Visualizer.&lt;span style="color: #006633;"&gt;findVisualizer&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;rootNode&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;TreePath&lt;/span&gt; tp &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;TreePath&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;rtn&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;//
    Get the root&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;TreePath&lt;/span&gt; ep &lt;span style="color: #339933;"&gt;:&lt;/span&gt; view.&lt;span style="color: #006633;"&gt;getOutline&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color:
    #006633;"&gt;getOutlineModel&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getTreePathSupport&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getExpandedDescendants&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;tp&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; Node en &lt;span style="color: #339933;"&gt;=&lt;/span&gt; Visualizer.&lt;span style="color: #006633;"&gt;findNode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;ep.&lt;span style="color: #006633;"&gt;getLastPathComponent&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #003399;"&gt;String&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; path &lt;span style="color: #339933;"&gt;=&lt;/span&gt; NodeOp.&lt;span style="color: #006633;"&gt;createPath&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;en, rootNode&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; result.&lt;span style="color: #006633;"&gt;add&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;path&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt;
    result&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Zunächst wird die VisualizerNode zur Root-Node gesucht und als TreePath kodiert. Dann holt man, über die überaus nützliche Methode getExpandedDescendants, alle TreePaths (ausgehend von der Root-Node) zu den Nodes die ausgeklappt wurden.&lt;/p&gt; &lt;p&gt;Zu jedem gefundene TreePath wird nun die VisualizerNode per
    getLastPathComponent ermittelt und sofort zur Modell-Node konvertiert.&lt;/p&gt; &lt;p&gt;In der Klasse NodeOp gibt es eine Hilfsmethode, die alle Node.getName()-Strings als Array von dieser Node zur Root-Node erzeugt. Dieses Array wird der Ergebnis-Liste hinzugefügt.&lt;/p&gt; &lt;p&gt;Das Ergebnis kann man nun in eine Properties-Collection verfrachten und diese gemeinsam mit anderen Eigenschaften des OutlineViews speichern. Dazu gab es schon einen &lt;a
    href="http://www.aljoscha-rittner.de/blog/archive/2010/12/29/beandev-outlineview-ui-eigenschaften-speichern/" title="OutlineView UI Eigenschaften speichern"&gt;Blog-Artikel&lt;/a&gt; von mir. Hier ein Beispiel einer Konvertierung:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #008000; font-style: italic; font-weight: bold;"&gt;/**&lt;br /&gt; &#160;
    &#160;* Konvertiert die Path-Arrays in Zeichenketten mit dem Trenner aus delim und speichert&lt;br /&gt; &#160; &#160;* diese Pfade in den Properties mit einem gewünschten Präfix ab.&lt;br /&gt; &#160; &#160;* @param paths &#160; Liste der Path-Arrays&lt;br /&gt; &#160; &#160;* @param delim &#160; Trenner für den Pfad (z.B. "/")&lt;br /&gt; &#160; &#160;* @param props &#160; Properties-Container, in dem die Pfade gespeichert werden&lt;br /&gt; &#160; &#160;* @param prefix &#160;Präfix für die
    Keys.&lt;br /&gt; &#160; &#160;*/&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; storePaths &lt;span style="color: #009900;"&gt;(&lt;/span&gt;List&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt; paths, &lt;span style="color: #003399;"&gt;String&lt;/span&gt; delim, &lt;span style="color: #003399;"&gt;Properties&lt;/span&gt; props, &lt;span style="color: #003399;"&gt;String&lt;/span&gt; prefix&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;prefix &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; prefix &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;""&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; props.&lt;span style="color: #006633;"&gt;put&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;prefix &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;"ExpandedCount"&lt;/span&gt;, &lt;span style="color: #003399;"&gt;Integer&lt;/span&gt;.&lt;span style="color: #006633;"&gt;toString&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;paths.&lt;span style="color: #006633;"&gt;size&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt; i &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i
    &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; paths.&lt;span style="color: #006633;"&gt;size&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color:
    #003399;"&gt;String&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; path &lt;span style="color: #339933;"&gt;=&lt;/span&gt; paths.&lt;span style="color: #006633;"&gt;get&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;i&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; StringBuilder b &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span
    style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; StringBuilder&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt; j &lt;span style="color: #339933;"&gt;=&lt;/span&gt;
    &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; j &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; path.&lt;span style="color: #006633;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; j&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000;
    font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; j &lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; b.&lt;span style="color: #006633;"&gt;append&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;delim&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160;
    b.&lt;span style="color: #006633;"&gt;append&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;path&lt;span style="color: #009900;"&gt;[&lt;/span&gt;j&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; props.&lt;span style="color: #006633;"&gt;put&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;prefix &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;"ExpandedPath."&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; i, b.&lt;span style="color: #006633;"&gt;toString&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160;
    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Im nächsten Teil der Serie werden die Pfade wieder eingelesen und alle Nodes ohne Benutzerinteraktion wieder expandiert.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-29T18:42:34+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=803">
    <title>JNBB - Joschs NetBeans Blog: BeanDev: OutlineView UI Eigenschaften speichern</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/29/beandev-outlineview-ui-eigenschaften-speichern/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Da das Outline mit ETable auch komplett unabhängig von der NetBeans Platform eingesetzt werden kann, wurde bei der Speicherung der Settings des ETable darauf verzichtet mit NbPreferences zu arbeiten.&lt;/p&gt; &lt;p&gt;NbPreferences ist aber der bevorzugte Speicherplatz in Plattform, wenn es um solche Einstellungen geht. Ich habe mir für dieses “Problem” zwei kleine Hilfsmethoden gebastelt.&lt;span id="more-803"&gt;&lt;/span&gt;Im Prinzip ist es nichts
    besonderes, aber viele wissen nicht mal, dass Outline und OutlineView überhaupt die Benutzereinstellungen speichern können.&lt;/p&gt; &lt;p&gt;Folgende zwei Hilfsmethoden nutze ich:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;static&lt;/span&gt;
    &lt;span style="color: #003399;"&gt;Properties&lt;/span&gt; readFromPreferences &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;Class&lt;/span&gt; clazz, &lt;span style="color: #003399;"&gt;String&lt;/span&gt; prefix&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000066; font-weight: bold;"&gt;boolean&lt;/span&gt; found &lt;span style="color:
    #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;Properties&lt;/span&gt; ui &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Properties&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;try&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; Preferences p &lt;span style="color: #339933;"&gt;=&lt;/span&gt; NbPreferences.&lt;span style="color: #006633;"&gt;forModule&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;clazz&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;node&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;clazz.&lt;span style="color: #006633;"&gt;getName&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span
    style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #003399;"&gt;String&lt;/span&gt; key &lt;span style="color: #339933;"&gt;:&lt;/span&gt; p.&lt;span style="color: #006633;"&gt;keys&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight:
    bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; prefix &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; key.&lt;span style="color: #006633;"&gt;startsWith&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;prefix&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; ui.&lt;span style="color: #006633;"&gt;put&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;key, p.&lt;span style="color: #006633;"&gt;get&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;key, &lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; found &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;
    &lt;span style="color: #000000; font-weight: bold;"&gt;catch&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;BackingStoreException ex&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; Exceptions.&lt;span style="color: #006633;"&gt;printStackTrace&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;ex&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; found &lt;span style="color: #339933;"&gt;?&lt;/span&gt; ui &lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color:
    #009900;"&gt;}&lt;/span&gt; &#160;&lt;br /&gt; &lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; storeToPreferences &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;Class&lt;/span&gt; clazz, &lt;span style="color: #003399;"&gt;String&lt;/span&gt; prefix,
    &lt;span style="color: #003399;"&gt;Properties&lt;/span&gt; props&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;try&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; Preferences p &lt;span style="color: #339933;"&gt;=&lt;/span&gt; NbPreferences.&lt;span style="color: #006633;"&gt;forModule&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;clazz&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;node&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;clazz.&lt;span style="color: #006633;"&gt;getName&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span
    style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;String&lt;/span&gt; key &lt;span style="color: #339933;"&gt;:&lt;/span&gt; props.&lt;span style="color: #006633;"&gt;stringPropertyNames&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br
    /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; prefix &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; key.&lt;span style="color: #006633;"&gt;startsWith&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;prefix&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; p.&lt;span style="color: #006633;"&gt;put&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;key, props.&lt;span style="color: #006633;"&gt;getProperty&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;key&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; p.&lt;span style="color: #006633;"&gt;flush&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
    &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;catch&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;BackingStoreException ex&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; Exceptions.&lt;span style="color: #006633;"&gt;printStackTrace&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;ex&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Wenn ich nun die Settings eines OutlineView speichern will, ist der Aufruf recht einfach:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div
    class="java codecolorer"&gt;&lt;span style="color: #003399;"&gt;Properties&lt;/span&gt; uiProps &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Properties&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; view.&lt;span style="color:
    #006633;"&gt;writeSettings&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;uiProps, &lt;span style="color: #0000ff;"&gt;"contactsView"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; storeToPreferences&lt;span style="color: #009900;"&gt;(&lt;/span&gt;MyTestCaseUIClass.&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;"contactsView"&lt;/span&gt;,
    uiProps&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Das Laden ist auch nicht komplizierter:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&lt;span style="color: #003399;"&gt;Properties&lt;/span&gt; props &lt;span style="color: #339933;"&gt;=&lt;/span&gt; readFromPreferences&lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;MyTestCaseUIClass.&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;"contactsView"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt; props &lt;span style="color: #339933;"&gt;!=&lt;/span&gt; &lt;span
    style="color: #000066; font-weight: bold;"&gt;null&lt;/span&gt; &lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; view.&lt;span style="color: #006633;"&gt;readSettings&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;props, &lt;span style="color: #0000ff;"&gt;"contactsView"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:
    #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;So kann man die Eigenschaften recht einfach in den NbPreferences hinterlegen. Wer TopComponents mit der Annotation @ConvertAsProperties nutzt, muss die Konvertierung natürlich nicht durchführen. Die Eigenschaften können 1:1 übernommen werden. In komplizierten UIs, die deklarativ zusammengesteckt werden und man mit JPanel-Klassen arbeitet, kann man das nur schwerlich nutzen.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt;
    Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-29T12:00:49+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=782">
    <title>JNBB - Joschs NetBeans Blog: BeanDev: Nodes ohne Benutzeraktivität aufklappen</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/29/beandev-nodes-ohne-benutzeraktivitaet-aufklappen/</link>
    <content:encoded>&lt;p&gt;Generell muss man verstehen, dass in der NetBeans Plattform nichts unnötigerweise in den Arbeitsspeicher geladen wird. Eine RCP Applikation hat immer mit Ressourcen zu kämpfen und vieles ist auf Optimierung ausgelegt. So auch der Aufbau der Node-Hierarchien.&lt;/p&gt; &lt;p&gt;Jedes &lt;a href="http://bits.netbeans.org/dev/javadoc/org-openide-nodes/index.html?org/openide/nodes/Children.html" title="API: Node"&gt;Node&lt;/a&gt; verwaltet mit seinem &lt;a
    href="http://bits.netbeans.org/dev/javadoc/org-openide-nodes/org/openide/nodes/Children.html" title="API: Children"&gt;Children&lt;/a&gt;-Container seine Kind-Elemente. Diese Container sind als &lt;a href="http://de.wikipedia.org/wiki/Fabrikmethode" title="Wikipedia: Fabrikmethode"&gt;Factory&lt;/a&gt;-Klassen aufgebaut, die nur auf Anforderung die Nodes einer tieferen Ebene erzeugen sollen. Beispielsweise dann, wenn der Anwender einen Hauptknoten in einem View per Mausklick aufklappt (Expansion). Erst
    dann wird der Children-Container angewiesen weitere Nodes zu erzeugen. Diese Art der On-Demand-Creation ist notwendig, weil es sehr viele Knotenhierarchien gibt, die nur in Ausschnitten von Anwender angeschaut werden. Große Teile von Hierarchien sollen gar nicht dargestellt werden. Ein sehr anschauliches Beispiel ist ein Dateisystem mit Ordnern und Dateien. Es macht gar keinen Sinn hunderttausende Dateien vorab in eine Knotenhierarchie zu laden. Der Arbeitsspeicher würde häufig nicht ausreichen und die
    Zeit für den Aufbau so einer Hierarchie würde den Anwender vor eine Geduldsprobe setzen.&lt;/p&gt; &lt;p&gt;So steht auf dem ersten Blick der Wunsch, Nodes programatisch aufzuklappen, der Optimierung der Plattform in den meisten Fällen diametral entgegen.&lt;span id="more-782"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Aber auch weitere Überlegungen zeigen, dass Nodes, in ihrer Rolle als Präsentationsschicht, nicht einfach angesteuert werden können. Nodes sollen von Ihren Daten (bzw. dem Datenmodell)
    möglichst abgekoppelt sein. Nodes können sogar mehr als ein Datenobjekt beinhalten (aggregieren). Auf Modellebene sollte das präsentierende Node unbekannt sein. Ansonsten könnte man Präsentationsschichten nicht auswechseln.&lt;/p&gt; &lt;p&gt;Nicht als letzten Punkt in der Betrachtung macht es die Plattform einem nicht einfacher, da die Steuerung der Darstellung von Knotenhierarchien ausschließlich von Views verwaltet werden. Das führt immer zu Verwirrung bei Einsteigern, die solche Aufgaben im
    ExplorerMananger suchen (der für die Selektion und den Kontext zuständig ist).&lt;/p&gt; &lt;p&gt;Das einfachste Beispiel, die erste Hierarchieebene zu öffnen, ist dieses:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;Node node &lt;span style="color:
    #339933;"&gt;:&lt;/span&gt; root.&lt;span style="color: #006633;"&gt;getChildren&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getNodes&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; view.&lt;span style="color:
    #006633;"&gt;expandNode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;node&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Allerdings hat dieser simple Aufruf von Children.getNodes() seine Tücken. Es kann sein, dass in dem Array nicht alle Nodes fertig initialisiert sind. Wenn der Children-Container eine spezielle Implementation
    hat, in dem Nodes asynchron initialisiert werden, kann es zu Problemen kommen. Bei Children-Nodes der Root-Node fällt das so gut wie nie auf, weil meistens das View schon von Haus die erste Ebene aufklappt, aber man könnte so auf Nummer sicher gehen:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;Node node &lt;span style="color: #339933;"&gt;:&lt;/span&gt; root.&lt;span style="color: #006633;"&gt;getChildren&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getNodes&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160;view.&lt;span style="color: #006633;"&gt;expandNode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;node&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Die Dokumentation von &lt;code class="codecolorer java
    dawn"&gt;&lt;span class="java"&gt;getNodes&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;boolean&lt;/span&gt; optimalResult&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; liefert folgende Information zu dem Parameter:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;This method is usefull if you need a fully initialized array of nodes for things like MenuView, node navigation from scripts/tests and so on. But in general if you
    are trying to get useful data by calling this method, you are probably doing something wrong.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Leider scheint das nur eine schnelle einfache Lösung zu sein. Denn mit Children-Containern die nicht nur eine asynchrone Initialisierung der Nodes haben, sondern die Nodes an sich schon asynchron erzeugen, verhakeln sich mit dem direkten view.expandNode (node) Aufruf.&lt;/p&gt; &lt;p&gt;Wenn man getNodes(true) verwendet, wird von der API der Aufruf in einer asynchronen
    &lt;a href="http://bits.nbextras.org/dev/javadoc/org-openide-nodes/org/openide/nodes/ChildFactory.html"&gt;ChildFactory&lt;/a&gt; auf das endgültige Ergebnis gewartet. Der Thread wird damit geblockt:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &#160; @Override&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; Node&lt;span
    style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; getNodes&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;boolean&lt;/span&gt; optimalResult&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; Node&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; result &lt;span
    style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;super&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getNodes&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;optimalResult&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #666666; font-style: italic;"&gt;// The getNodes() call above called addNotify() and started the task&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #666666; font-style: italic;"&gt;// for the first time if needed.&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160;
    task.&lt;span style="color: #006633;"&gt;waitFinished&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; result &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;super&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getNodes&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; result&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt;
    &lt;p&gt;Wenn man also recht einfach Knoten öffnen möchte, sollte man, wenn die ChildFactory verwendet wird, dass &lt;a href="http://bits.nbextras.org/dev/javadoc/org-openide-nodes/org/openide/nodes/Children.html#create%28org.openide.nodes.ChildFactory,%20boolean%29"&gt;asynchron-Kennzeichen deaktivieren&lt;/a&gt;. Allerdings gibt es eine einfache Möglichkeit das Problem abzuwenden. Man muss nur jeden expandNode-Aufruf getrennt in den EventQueue schicken:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow:
    auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; Node n &lt;span style="color: #339933;"&gt;:&lt;/span&gt; root.&lt;span style="color: #006633;"&gt;getChildren&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getNodes&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color:
    #003399;"&gt;SwingUtilities&lt;/span&gt;.&lt;span style="color: #006633;"&gt;invokeLater&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Runnable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; @Override&lt;br /&gt; &#160; &#160;
    &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; view.&lt;span style="color: #006633;"&gt;expandNode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Bis jetzt ist diese
    Funktionalität relativ statisch. Man kann nun von einem Node (was hier immer root genannt wurde), alle Unterknoten öffnen. Das wird 90% aller Anwendungsfälle zutreffen. Denn wie Eingangs erwähnt, will man häufig nicht komplette Hierarchien öffnen.&lt;/p&gt; &lt;p&gt;Für sehr kleine strukturelle Darstellungen kann das aber trotzdem gewollt sein. Da dies nun auch nicht blockierend funktioniert, kann der Wunsch aufkommen einen ganzen Baum aufklappen zu wollen. Den obigen Code-Abschnitt brauchen wir nur
    als rekursive Methode implementieren:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; recursiveExpandRunner&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt;
    OutlineView view, Node root&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; Node n &lt;span style="color: #339933;"&gt;:&lt;/span&gt; root.&lt;span style="color: #006633;"&gt;getChildren&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getNodes&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color:
    #003399;"&gt;SwingUtilities&lt;/span&gt;.&lt;span style="color: #006633;"&gt;invokeLater&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Runnable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; @Override&lt;br /&gt; &#160; &#160;
    &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; view.&lt;span style="color: #006633;"&gt;expandNode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; recursiveExpandRunner&lt;span style="color: #009900;"&gt;(&lt;/span&gt;view, n&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Aus nachvollziehbaren Gründen sollte man das nicht auf einer Node-Hierarchie anwenden, die zum Beispiel ein Dateisystem modeliert. Bei so tiefen Hierarchien (mit immensen Kosten beim Auslesen), möchte man vielleicht die Suchtiefe
    einschränken:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; recursiveExpandRunner&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; OutlineView view, Node
    root, &lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt; currentLevel, &lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;int&lt;/span&gt; maxLevel&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight:
    bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;currentLevel &lt;span style="color: #339933;"&gt;==&lt;/span&gt; maxLevel&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;
    font-weight: bold;"&gt;final&lt;/span&gt; Node n &lt;span style="color: #339933;"&gt;:&lt;/span&gt; root.&lt;span style="color: #006633;"&gt;getChildren&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getNodes&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #003399;"&gt;SwingUtilities&lt;/span&gt;.&lt;span style="color: #006633;"&gt;invokeLater&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;Runnable&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; @Override&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; run&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160;
    &#160; &#160; view.&lt;span style="color: #006633;"&gt;expandNode&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;n&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; recursiveExpandRunner&lt;span style="color: #009900;"&gt;(&lt;/span&gt;view, n, currentLevel&lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, maxLevel&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color:
    #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Beim ersten Aufruf sollte &lt;code class="codecolorer java dawn"&gt;&lt;span class="java"&gt;currentLevel &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; sein. Der Parameter &lt;code class="codecolorer java dawn"&gt;&lt;span class="java"&gt;maxLevel&lt;/span&gt;&lt;/code&gt; sollte &lt;code class="codecolorer java dawn"&gt;&lt;span
    class="java"&gt;&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; sein, oder für komplette Tiefensuche &lt;code class="codecolorer java dawn"&gt;&lt;span class="java"&gt;&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; (weil dann die vorzeitige Abbruchbedingung nie erfüllt sein kann).&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto;
    white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;recursiveExpandRunner&lt;span style="color: #009900;"&gt;(&lt;/span&gt;view, root, &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;// Eine Ebene&lt;/span&gt;&lt;br /&gt;
    recursiveExpandRunner&lt;span style="color: #009900;"&gt;(&lt;/span&gt;view, root, &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;2&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;// Zwei Ebenen&lt;/span&gt;&lt;br /&gt; recursiveExpandRunner&lt;span style="color: #009900;"&gt;(&lt;/span&gt;view, root, &lt;span style="color:
    #cc66cc;"&gt;0&lt;/span&gt;, &lt;span style="color: #339933;"&gt;-&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;// Alle Ebenen öffnen&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Dieser Teil der Serie arbeitet komplett auf View- und Präsentationsschicht-Ebene. Es wird komplett auf die Interpretation der der Inhalte
    von Nodes verzichtet. D.h. es wird nicht anhand von Daten die Darstellung des Baums manipuliert, sondern völlig unabhängig davon. In einem späteren Teil wird darauf eingegangen, wie man Nodes anhand ihrer zu repäsentierenden Daten identifiziert und gezielt ansteuert.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-29T07:55:51+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=780">
    <title>JNBB - Joschs NetBeans Blog: BeanDev: Knotenkunst für NetBeans Platform Views</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/29/beandev-knotenkunst-fuer-netbeans-platform-views/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Die wichtigsten Views für Nodes sind das &lt;a href="http://bits.netbeans.org/dev/javadoc/org-openide-explorer/index.html?org/openide/explorer/view/ListView.html" title="API: ListView"&gt;ListView&lt;/a&gt;, &lt;a href="http://bits.netbeans.org/dev/javadoc/org-openide-explorer/org/openide/explorer/view/TableView.html" title="API: TableView"&gt;TableView,&lt;/a&gt; &lt;a
    href="http://bits.netbeans.org/dev/javadoc/org-openide-explorer/org/openide/explorer/view/TreeTableView.html" title="API: TreeTableView"&gt;TreeTableView&lt;/a&gt;, &lt;a href="http://bits.netbeans.org/dev/javadoc/org-openide-explorer/org/openide/explorer/view/BeanTreeView.html" title="API: BeanTreeView"&gt;BeanTreeView&lt;/a&gt; und das &lt;a href="http://bits.netbeans.org/dev/javadoc/org-openide-explorer/index.html?org/openide/explorer/view/ListView.html"
    title="API:OutlineView"&gt;OutlineView&lt;/a&gt;. Wobei das OutlineView die modernste Variante ist und das BeanTreeView sowie das ListView, TableView und TreeTableView komplett ersetzen kann.&lt;/p&gt; &lt;p&gt;In den Trainings empfehle ich immer wieder gleich das OutlineView zu verwenden, da man sich dort durch kleinere Parameter-Umstellungen entscheiden kann, welche Ansichten das OutlineView verwenden soll. Das TableView und TreeTableView sollte man nicht mehr verwenden, weil zu viele nicht gelöste
    Bugs existieren.&lt;/p&gt; &lt;p&gt;In der Praxis wird man trotzdem immer wieder BeanTreeView oder OutlineView verwenden. In dieser Artikel-Serie möchte ich deswegen für das BeanTreeView und OutlineView ein paar Techniken beschreiben, wie man die hierarchische Darstellung von Nodes beeinflussen kann. Folgende Fragestellung kommt in den Trainings und Foren immer wieder auf:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Wie kann man bestimmte Knotenebenen auf- und zuklappen?&lt;/li&gt; &lt;li&gt;Wie ist es möglich die
    geöffneten und selektierten Knoten zu speichern und wiederherzustellen?&lt;/li&gt; &lt;li&gt;Wie kann ich die Darstellung der Nodes und Views manipulieren?&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Die Serie behandelt diese Fragen jeweils für das BeanTreeView und das OutlineView.&lt;/p&gt; &lt;p&gt;Viel Spaß damit, ich freue mich auf Fragen und Anregungen.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt;
    &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-29T07:53:11+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=771">
    <title>JNBB - Joschs NetBeans Blog: JavaDev: Swing JavaBuilder YAML API</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/27/javadev-swing-javabuilder-yaml-api/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;In meinen RSS-Feeds ist dieses nette kleine Projekt aufgetaucht, welches die Erstellung von Swing-GUIs inklusive Binding deutlich vereinfachen will: &lt;a href="http://code.google.com/p/javabuilders/" title="Swing JavaBuilder"&gt;Swing JavaBuilder&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Dieses Framework bietet auf der Basis der &lt;a href="http://de.wikipedia.org/wiki/Dom%C3%A4nenspezifische_Sprache" title="Domänenspezifische Sprache"&gt;DSL-Sprache&lt;/a&gt;
    &lt;a href="http://www.yaml.org/" title="YAML.org"&gt;YAML&lt;/a&gt; einen Builder, der Swing GUIs erzeugt. Das Projekt hat eine hohe Entwicklungsaktivität, verfügt über ein Stable Build in Version 1.1 und ein aktuelles Dev-Build.&lt;span id="more-771"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Wie kompakt man Swing GUIs schreiben kann, zeigt dieses kurze Beispiel in Java:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div
    class="java codecolorer"&gt;&lt;span style="color: #003399;"&gt;ResourceBundle&lt;/span&gt; bundle &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003399;"&gt;ResourceBundle&lt;/span&gt;.&lt;span style="color: #006633;"&gt;getBundle&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Resources"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span
    style="color: #003399;"&gt;JButton&lt;/span&gt; button &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;JButton&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; button.&lt;span style="color: #006633;"&gt;setName&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"okButton"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; button.&lt;span style="color: #006633;"&gt;setText&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;bundle.&lt;span style="color: #006633;"&gt;getString&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"button.ok"&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; button.&lt;span style="color: #006633;"&gt;addActionListener&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;ActionListener&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; actionPerformed&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;ActionEvent&lt;/span&gt; e&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160;
    &lt;span style="color: #666666; font-style: italic;"&gt;//execute the save method&lt;/span&gt;&lt;br /&gt; &#160; &#160; save&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;wird zu diesem Einzeiler:&lt;/p&gt; &lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container yaml dawn"&gt;&lt;div class="yaml codecolorer"&gt;JButton&lt;span class="br0"&gt;(&lt;/span&gt;name=okButton,text=button.ok,onAction=save&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Einen sehr schönen Einstieg erhält man in diesem PDF-Buch: &lt;a
    href="http://javabuilders.googlecode.com/files/SwingJavaBuilder-1.1.pdf"&gt;Swing JavaBuilder: Maximum productivity with minimum code (Release 1.1)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-27T11:41:08+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=767">
    <title>JNBB - Joschs NetBeans Blog: IDEDev: UML Projekt nimmt wieder Fahrt auf</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/27/idedev-uml-projekt-nimmt-wieder-fahrt-auf/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Das UML Plugin in NetBeans erfährt zur Zeit Höhen und Tiefen. Aus Qualitätsgründen und fehlenden Ressourcen wurde es schon zu Sun’s Zeiten in den Contribution Bereich verschoben. Aus diesen Sourcen lässt sich zur Zeit auch für aktuellen IDE Build ein &lt;a href="http://www.aljoscha-rittner.de/blog/archive/2010/10/15/beandev-uml-plugin-von-sourcen-fur-nb-6-9-1-erstellen/"&gt;Plugin erstellen&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Leider war die alte/neue
    Community zum UML Plugin nicht sonderlich erfolgreich, das Projekt voran zu treiben. Wie auch immer die Gründe der Mitglieder war, die kritische Masse für eine erfolgreiche Community war wohl noch nicht erreicht. Trotzdem ist die Verfügbarkeit eines UML-Tools sehr wichtig. Darum haben einige Mitglieder des &lt;a href="http://wiki.netbeans.org/NetBeansDreamTeam"&gt;NetBeans Dreamteams&lt;/a&gt; angeregt, noch mal einen Nachbrenner aufzulegen. Zeitgleich hat aber David Bastow selbst passend zu
    Weihnachten den &lt;a href="http://netbeans.org/projects/uml/lists/developers/archive/2010-12/message/16"&gt;Ball wieder zum Rollen gebracht&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;I’ve &lt;a href="http://netbeans.org/attachments/lists/uml/developers/2010-12/16/Rework_Structure_-_First_Try_.pdf" title="PDF Diagramm"&gt;created a diagram&lt;/a&gt; that represents my ideas of how the next incarnation of the UML module might fit together. &#160;It isn’t so much a software hierarchy as a
    description of what has been forming in my mind over the past couple of months. &#160;It is also VERY incomplete.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Die Wiki-Seiten werden aktualisiert und es werden &lt;a href="http://wiki.netbeans.org/Is_UML_a_project_type_of_its_own%3F"&gt;Wünsche und Anfragen&lt;/a&gt; zum UML-Projekt unter folgender E-Mail Adresse angenommen: &lt;a href="mailto:developer@uml.netbeans.org"&gt;developer@uml.netbeans.org&lt;/a&gt;. Einstiegspunkt sollte auch die Talk Seite zu &lt;a
    href="http://wiki.netbeans.org/UMLRewrite" title="UMLRewrite"&gt;UMLRewrite&lt;/a&gt; sein.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-27T11:08:08+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=758">
    <title>JNBB - Joschs NetBeans Blog: Frohe Weihnachten / Merry Christmas</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/24/frohe-weihnachten-merry-christmas/</link>
    <content:encoded>&lt;p&gt;Allen Bloglesern wünsche ich eine wunderschöne Weihnacht und ein Frohes Fest!&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/Weihnachtsbaum-2010.jpg"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/Weihnachtsbaum-2010-202x300.jpg" title="Weihnachtsbaum-2010" height="300" width="202" alt="" class="alignleft size-medium wp-image-764" /&gt;&lt;/a&gt;Mboni Chrismen! Gezur Krislinjden!
    Idah Saidan Wa Sanah Jadidah! &lt;span style="font-size: x-large;"&gt;Feliz Navidad! &lt;/span&gt;&lt;span style="font-size: large;"&gt;Shenoraavor Nor Dari yev Pari Gaghand! &lt;/span&gt;Zalig Kerstfeest en Gelukkig nieuw jaar! Boas Festas e Feliz Ano Novo! Tchestita Koleda! Feliz Navidad! Kung His Hsin Nien bing Chu Shen Tan! Glædelig Jul! &lt;span style="font-size: large;"&gt;Merry Christmas! &lt;/span&gt;Hyvaa joulua! &lt;span style="font-size: large;"&gt;Joyeux Noel! &lt;/span&gt;Kala
    Christouyenna! Mele Kalikimaka! Shuvo Naba Barsha! &lt;span style="font-size: x-large;"&gt;Selamat Hari Natal! &lt;/span&gt;Idah Saidan Wa Sanah Jadidah! Cristmas-e-shoma mobarak bashad! Nollaig Shona Dhuit Gledileg Jol! Buone Feste Natalizie! Shinnen omedeto! &lt;span style="font-size: x-large;"&gt;Sung Tan Chuk Ha! &lt;/span&gt;Sretan Bozic! Nathar Puthu Varuda Valthukkal! Linksmu Kaledu! &lt;span style="font-size: x-large;"&gt;Selamat Hari Natal! &lt;/span&gt;Sreken Bozhik! Festusu Natale! Okresmesa
    ombwa! Meri Kirihimete! &lt;span style="font-size: large;"&gt;Vrolijk Kerstfeest en een Gelukkig Nieuwjaar! &lt;/span&gt;Gledelig Jul! &lt;span style="font-size: large;"&gt;Naya Saal Mubarak Ho! Feliz Navidad y un Venturoso Año Nuevo!&lt;/span&gt; Wesolych Swiat Bozego Narodzenia! Feliz Natal! Sarbatori vesele! Pozdrevlyayu s prazdnikom Rozhdestva is Novim Godom! God Jul and Ett Gott Nytt År! &lt;span style="font-size: x-large;"&gt;Schöni Wienacht Hristos se rodi! Sretan Bozic!&lt;/span&gt; &lt;span
    style="font-size: large;"&gt;Vesele Bozicne. &lt;/span&gt;Screcno Novo Leto! Feliz Navidad! Sawadee Pee Mai! Prejeme Vam Vesele Vanoce a stastny Novy Rok! &lt;span style="font-size: large;"&gt;Noeliniz Ve Yeni Yiliniz Kutlu Olsun! &lt;/span&gt;Srozhdestvom Kristovym! Kellemes Karacsonyi unnepeket! &lt;span style="font-size: x-large;"&gt;Chung Mung Giang Sinh! &lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Beste und weihnachtliche Grüße!&lt;br /&gt; &#160;&#160;Josch.&lt;/p&gt; &lt;div
    style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-24T07:00:27+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=750">
    <title>JNBB - Joschs NetBeans Blog: News: VirtualBox 4.0 final</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/23/news-virtualbox-4-0-final/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Nach einer sehr kurzen Beta-Phase ist VirtualBox 4.0 in der finalen Version fertig. Die Downloads finden sich im &lt;a href="http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.htm" title="Virtual Box 4 final Download"&gt;Technetwork von Oracle&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Das &lt;a href="http://www.virtualbox.org/manual/UserManual.html" title="Virtual Box 4 Online-Manual "&gt;Online-Manual&lt;/a&gt; beschreibt in einem
    Change-Log die Änderungen in 4.0.&lt;span id="more-750"&gt;&lt;/span&gt;&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt; This version is a major update. The following major new features were added:&lt;/p&gt; &lt;div&gt; &lt;ul type="disc"&gt; &lt;li&gt;Reorganization of VirtualBox into a base package and Extension Packs; see &lt;a href="http://www.virtualbox.org/manual/ch01.html#intro-installing" title="Installing VirtualBox and extension packs"&gt;the section called “Installing VirtualBox and extension
    packs”&lt;/a&gt;&lt;/li&gt; &lt;li&gt;New settings/disk file layout for VM portability; see &lt;a href="http://www.virtualbox.org/manual/ch10.html#vboxconfigdata" title="Where VirtualBox stores its files"&gt;the section called “Where VirtualBox stores its files”&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Major rework of the GUI (now called “VirtualBox Manager”): &lt;div&gt; &lt;ul type="circle"&gt; &lt;li&gt;Redesigned user interface with guest window preview (also for screenshots)&lt;/li&gt; &lt;li&gt;New “scale”
    display mode with scaled guest display; see &lt;a href="http://www.virtualbox.org/manual/ch01.html#intro-resize-window" title="Resizing the machine's window"&gt;the section called “Resizing the machine’s window”&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Support for creating and starting &lt;code class="codecolorer text dawn"&gt;&lt;span class="text"&gt;.vbox&lt;/span&gt;&lt;/code&gt; desktop shortcuts (bug #1889)&lt;/li&gt; &lt;li&gt;The VM list is now sortable&lt;/li&gt; &lt;li&gt;Machines can now be deleted
    easily without a trace including snapshots and saved states, and optionally including attached disk images (bug #5511; also, &lt;code class="codecolorer text dawn"&gt;&lt;span class="text"&gt;VBoxManage unregistervm --delete&lt;/span&gt;&lt;/code&gt; can do the same now)&lt;/li&gt; &lt;li&gt;Built-in creation of desktop file shortcuts to start VMs on double click (bug #2322)&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/li&gt; &lt;li&gt;VMM: support more than 1.5/2 GB guest RAM on 32-bit hosts&lt;/li&gt;
    &lt;li&gt;New virtual hardware: &lt;div&gt; &lt;ul type="circle"&gt; &lt;li&gt;Intel ICH9 chipset with three PCI buses, PCI Express and Message Signaled Interrupts (MSI); see &lt;a href="http://www.virtualbox.org/manual/ch03.html#settings-motherboard" title="&amp;quot;Motherboard&amp;quot; tab"&gt;the section called “”Motherboard” tab”&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Intel HD Audio, for better support of modern guest operating systems (e.g. 64-bit Windows; bug #2785)&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;
    &lt;/li&gt; &lt;li&gt;Improvements to OVF support (see &lt;a href="http://www.virtualbox.org/manual/ch01.html#ovf" title="Importing and exporting virtual machines"&gt;the section called “Importing and exporting virtual machines”&lt;/a&gt;): &lt;div&gt; &lt;ul type="circle"&gt; &lt;li&gt;Open Virtualization Format Archive (OVA) support&lt;/li&gt; &lt;li&gt;Significant performance improvements during export and import&lt;/li&gt; &lt;li&gt;Creation of the manifest file on export is optional now&lt;/li&gt;
    &lt;li&gt;Imported disks can have formats other than VMDK&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/li&gt; &lt;li&gt;Resource control: added support for limiting a VM’s CPU time and IO bandwidth; see &lt;a href="http://www.virtualbox.org/manual/ch05.html#storage-bandwidth-limit" title="Limiting bandwidth for disk images"&gt;the section called “Limiting bandwidth for disk images”&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Storage: support asynchronous I/O for iSCSI, VMDK, VHD and Parallels images&lt;/li&gt;
    &lt;li&gt;Storage: support for resizing VDI and VHD images; see &lt;a href="http://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi" title="VBoxManage modifyhd"&gt;the section called “VBoxManage modifyhd”&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Guest Additions: support for multiple virtual screens in Linux and Solaris guests using X.Org server 1.3 and later&lt;/li&gt; &lt;li&gt;Language bindings: uniform Java bindings for both local (COM/XPCOM) and remote (SOAP) invocation APIs&lt;/li&gt; &lt;/ul&gt;
    &lt;/div&gt; &lt;p&gt;In addition, the following items were fixed and/or added:&lt;/p&gt; &lt;div&gt; &lt;ul type="disc"&gt; &lt;li&gt;VMM: Enable large page support by default on 64-bit hosts (applies to nested paging only)&lt;/li&gt; &lt;li&gt;VMM: fixed guru meditation when running Minix (VT-x only; bug #6557)&lt;/li&gt; &lt;li&gt;VMM: fixed crash under certain circumstances (Linux hosts only, non VT-x/AMD-V mode only; bugs #4529 and #7819)&lt;/li&gt; &lt;li&gt;GUI: add configuration dialog for port
    forwarding in NAT mode (bug #1657)&lt;/li&gt; &lt;li&gt;GUI: show the guest window content on save and restore&lt;/li&gt; &lt;li&gt;GUI: certain GUI warnings don’t stop the VM output anymore&lt;/li&gt; &lt;li&gt;GUI: fixed black fullscreen minitoolbar on KDE4 hosts (Linux hosts only; bug #5449)&lt;/li&gt; &lt;li&gt;BIOS: implemented multi-sector reading to speed up booting of certain guests (e.g. Solaris)&lt;/li&gt; &lt;li&gt;Bridged networking: improved throughput by filtering out outgoing packets
    intended for the host before they reach the physical network (Linux hosts only; bug #7792)&lt;/li&gt; &lt;li&gt;3D support: allow use of &lt;em&gt;CR_SYSTEM_GL_PATH&lt;/em&gt; again (bug #6864)&lt;/li&gt; &lt;li&gt;3D support: fixed various clipping/visibility issues (bugs #5659, #5794, #5848, #6018, #6187, #6570)&lt;/li&gt; &lt;li&gt;3D support: guest application stack corruption when using glGetVertexAttrib[ifd]v (bug #7395)&lt;/li&gt; &lt;li&gt;3D support: fixed OpenGL support for libMesa
    7.9&lt;/li&gt; &lt;li&gt;3D support: fixed Unity/Compiz crashes on natty&lt;/li&gt; &lt;li&gt;2D Video acceleration: multimonitor support&lt;/li&gt; &lt;li&gt;VRDP: fixed rare crash in multimonitor configuration&lt;/li&gt; &lt;li&gt;VRDP: support for upstream audio&lt;/li&gt; &lt;li&gt;Display: fixed occasional guest resize crash&lt;/li&gt; &lt;li&gt;NAT: port forwarding rules can be applied at runtime&lt;/li&gt; &lt;li&gt;SATA: allow to attach CD/DVD-ROM drives including passthrough (bug
    #7058)&lt;/li&gt; &lt;li&gt;Floppy: support readonly image files, taking this as the criteria for making the medium readonly (bug #5651)&lt;/li&gt; &lt;li&gt;Audio: fixed memory corruption during playback under rare circumstances&lt;/li&gt; &lt;li&gt;Audio: the DirectSound backend now allows VMs to be audible when another DirectSound application is active, including another VM (bug #5578)&lt;/li&gt; &lt;li&gt;EFI: support for SATA disks and CDROMs&lt;/li&gt; &lt;li&gt;BIOS: reduce the stack usage of
    the VESA BIOS function &lt;em&gt;#4F01&lt;/em&gt; (Quake fix)&lt;/li&gt; &lt;li&gt;OVF/OVA: fixed export of VMs with iSCSI disks&lt;/li&gt; &lt;li&gt;Storage: Apple DMG image support for the virtual CD/DVD (bug #6760)&lt;/li&gt; &lt;li&gt;Linux host USB support: introduced a less invasive way of accessing raw USB devices (bugs #1093, #5345, #7759)&lt;/li&gt; &lt;li&gt;Linux hosts: support recent Linux kernels with &lt;em&gt;CONFIG_DEBUG_SET_MODULE_RONX&lt;/em&gt; set&lt;/li&gt; &lt;li&gt;Guest
    Additions: Shared Folders now can be marked as being auto-mounted on Windows, Linux and Solaris guests&lt;/li&gt; &lt;li&gt;Linux Additions: Shared Folders now support symbolic links (bug #818)&lt;/li&gt; &lt;li&gt;Linux Additions: combined 32-bit and 64-bit additions into one file&lt;/li&gt; &lt;li&gt;Windows Additions: automatic logon on Windows Vista/Windows 7 is now able to handle renamed user accounts; added various bugfixes&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/blockquote&gt; &lt;p&gt;Beste
    Grüße,&lt;br /&gt; &#160;&#160;Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-23T10:03:43+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=745">
    <title>JNBB - Joschs NetBeans Blog: IDEDev: Bundle-Texte direkt im Quelltext</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/21/idedev-bundle-texte-direkt-im-quelltext/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Erst hatte es mich irritiert, dann habe ich es erst verstanden. Seit einigen Dev-Builds kann NetBeans in der IDE die Bundle.properties Texte direkt im Editor als Code-Fold anzeigen.&lt;/p&gt; &lt;p&gt;Das I18N-Folding wird in den Optionen unter Miscellaneous -&gt; Java Ext Editor eingestellt.&lt;span id="more-745"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;So sieht es im Editor aus (mit Tooltip-Hinweis auf den eingeklappten Quelltext):&lt;/p&gt;
    &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/BundleFolds.png"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/BundleFolds.png" title="Bundle Folds" height="147" width="833" alt="" class="alignnone size-full wp-image-746" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Die Einstellungen (auch für weitere neue Fold-Varianten) sind zur Zeit hier zu erreichen:&lt;/p&gt; &lt;p&gt;&lt;a
    href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/BundleFoldOptions.png"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/BundleFoldOptions.png" title="Bundle Fold Options" height="453" width="538" alt="" class="alignnone size-full wp-image-747" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Ich finde das schon ziemlich genial und macht den Quelltext übersichtlicher.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right;
    margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-21T13:11:16+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=737">
    <title>JNBB - Joschs NetBeans Blog: FXDev: Visage Compiler Preview</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/16/fxdev-visage-compiler-preview/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Schon seit zwei Monaten (und damit bestimmt keine News) ist das Compiler Preview von &lt;a href="http://code.google.com/p/visage/" title="Visage Homepage"&gt;Visage&lt;/a&gt; verfügbar. Visage bietet das als Sprache, was JavaFX abhanden gekommen ist.&lt;/p&gt; &lt;p&gt;Visage entspricht dem Sprachlevel von JavaFX Script in der Version 1.3.1. Dazu kommt das Schlüsselwort &lt;code class="codecolorer java dawn"&gt;&lt;span class="java"&gt;&lt;span
    style="color: #000000; font-weight: bold;"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; für Properties. Mit &lt;code class="codecolorer java dawn"&gt;&lt;span class="java"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;-Properties kann man sich in der DSL Syntax einiges an Tipparbeit sparen, weil der Name des &lt;code class="codecolorer java dawn"&gt;&lt;span class="java"&gt;&lt;span style="color: #000000; font-weight:
    bold;"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;-Property weggelassen werden darf.&lt;/p&gt; &lt;p&gt;&lt;span id="more-737"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Beispiel:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;Stage &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; scene&lt;span style="color: #339933;"&gt;:&lt;/span&gt; Scene &lt;span style="color:
    #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; contents&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; width&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;100&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; height&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color:
    #cc66cc;"&gt;100&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Der obige Standard-JavaFX Code reduziert sich dann in folgende Schreibweise:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div
    class="java codecolorer"&gt;Stage &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; Scene &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #003399;"&gt;Rectangle&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; width&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;100&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; height&lt;span style="color:
    #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;100&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;In Stage ist &lt;code class="codecolorer java dawn"&gt;&lt;span class="java"&gt;scene&lt;/span&gt;&lt;/code&gt; das default-Property und in Scene ist es &lt;code
    class="codecolorer java dawn"&gt;&lt;span class="java"&gt;content&lt;/span&gt;&lt;/code&gt;. Deklariert wird es folgendermaßen:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; Stage &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br
    /&gt; &#160; public&lt;span style="color: #339933;"&gt;-&lt;/span&gt;init &lt;span style="color: #000000; font-weight: bold;"&gt;default&lt;/span&gt; var scene&lt;span style="color: #339933;"&gt;:&lt;/span&gt;Scene&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; Scene
    &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; public&lt;span style="color: #339933;"&gt;-&lt;/span&gt;init &lt;span style="color: #000000; font-weight: bold;"&gt;default&lt;/span&gt; var content&lt;span style="color: #339933;"&gt;:&lt;/span&gt;Node&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:
    #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Mehrere Defaults sind leider nicht möglich, weitere Infos zu den Defaults, finden sich &lt;a href="http://code.google.com/p/visage/wiki/DefaultProperties" title="Visage Defaults"&gt;hier&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-16T18:12:13+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=729">
    <title>JNBB - Joschs NetBeans Blog: JavaDev: GMail4j Java API</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/16/javadev-gmail4j-java-api/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Vor einiger Zeit habe ich mit das mal auf Wiedervorlage gelegt, die &lt;a href="http://code.google.com/p/gmail4j/" title="Google code: GMail4j"&gt;GMail API for Java&lt;/a&gt;. Bei dieser API, gehostet bei Google Code handelt es sich um eine recht einfache API für den Zugriff auf GMail-Konten. Das Projekt von Tomas Varaneckas ist als &lt;a href="http://maven.apache.org/" title="Apache Maven"&gt;Maven&lt;/a&gt;-Projekt aufgebaut und steht unter der
    &lt;a href="http://www.apache.org/licenses/LICENSE-2.0" title="Apache License 2.0"&gt;Apache License 2.0&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;span id="more-729"&gt;&lt;/span&gt;Die &lt;a href="http://maven.apache.org/pom.html#Maven_Coordinates" title="Maven coordinates"&gt;Artifact-Koordinate&lt;/a&gt; für das GMail4j ist:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container xml dawn"&gt;&lt;div class="xml codecolorer"&gt;&#160; &#160;
    &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;groupId&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;com.googlecode&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/groupId&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;&lt;span
    style="color: #000000; font-weight: bold;"&gt;&amp;lt;artifactId&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;gmail4j&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/artifactId&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight:
    bold;"&gt;&amp;lt;version&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;0.3&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/version&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Man muss aber ein spezielles Repository einbinden:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap;
    width: 100%;" class="codecolorer-container xml dawn"&gt;&lt;div class="xml codecolorer"&gt;&#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;repositories&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160; &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;repository&lt;span style="color: #000000; font-weight:
    bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;id&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;maven2-repository.dev.java.net&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/id&lt;span style="color: #000000; font-weight:
    bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;name&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Java.net Repository for Maven&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/name&lt;span style="color: #000000; font-weight:
    bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;url&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;http://download.java.net/maven/2&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/url&lt;span style="color: #000000; font-weight:
    bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160; &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/repository&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &#160; &#160;&lt;span style="color: #808080; font-style: italic;"&gt;&amp;lt;!-- other repositories --&gt;&lt;/span&gt;&lt;br /&gt; &#160;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000;
    font-weight: bold;"&gt;&amp;lt;/repositories&lt;span style="color: #000000; font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Hier ein kleines Beispiel:&lt;/p&gt; &lt;pre&gt;﻿ &lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; ImapGmailClient
    client &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; ImapGmailClient&lt;span style="color: #009900;"&gt;(&lt;/span&gt;ImapGmailLabel.&lt;span style="color: #006633;"&gt;SENT_MAIL&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; ImapGmailConnection
    connection &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; ImapGmailConnection&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;try&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160;
    &#160; &#160; &#160; &#160; connection.&lt;span style="color: #006633;"&gt;setLoginCredentials&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;conf.&lt;span style="color: #006633;"&gt;getGmailCredentials&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color:
    #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;conf.&lt;span style="color: #006633;"&gt;useProxy&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; connection.&lt;span style="color: #006633;"&gt;setProxy&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;conf.&lt;span style="color: #006633;"&gt;getProxyHost&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;, conf.&lt;span style="color: #006633;"&gt;getProxyPort&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160;
    &#160; &#160; &#160; &#160; &#160; &#160; connection.&lt;span style="color: #006633;"&gt;setProxyCredentials&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;conf.&lt;span style="color: #006633;"&gt;getProxyCredentials&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span
    style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; log.&lt;span style="color: #006633;"&gt;debug&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Getting unread messages"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; client.&lt;span style="color:
    #006633;"&gt;setConnection&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;connection&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; List&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;GmailMessage&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt; messages &lt;span style="color:
    #339933;"&gt;=&lt;/span&gt; client.&lt;span style="color: #006633;"&gt;getUnreadMessages&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;GmailMessage message &lt;span style="color: #339933;"&gt;:&lt;/span&gt;
    messages&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; log.&lt;span style="color: #006633;"&gt;debug&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;message&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br
    /&gt; &#160; &#160; &#160; &#160; &#160; &#160; assertNotNull&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Messages are not null"&lt;/span&gt;, messages&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;catch&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: #003399;"&gt;Exception&lt;/span&gt; e&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; log.&lt;span style="color: #006633;"&gt;error&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Test Failed"&lt;/span&gt;, e&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; fail&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Caught exception: "&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; e.&lt;span style="color: #006633;"&gt;getMessage&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;finally&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;connection.&lt;span style="color:
    #006633;"&gt;isConnected&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; connection.&lt;span style="color: #006633;"&gt;disconnect&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Oder simpler als RSS-Feed Abfrage:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;GmailClient client &lt;span
    style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; RssGmailClient&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; GmailConnection connection &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; HttpGmailConnection&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;LoginDialog.&lt;span style="color: #006633;"&gt;getInstance&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;show&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Enter Gmail Login"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; client.&lt;span style="color: #006633;"&gt;setConnection&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;connection&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;final&lt;/span&gt; List&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt;GmailMessage&lt;span style="color: #339933;"&gt;&gt;&lt;/span&gt; messages &lt;span
    style="color: #339933;"&gt;=&lt;/span&gt; client.&lt;span style="color: #006633;"&gt;getUnreadMessages&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;GmailMessage message &lt;span style="color: #339933;"&gt;:&lt;/span&gt; messages&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160;&lt;span style="color: #003399;"&gt;System&lt;/span&gt;.&lt;span style="color: #006633;"&gt;out&lt;/span&gt;.&lt;span style="color: #006633;"&gt;println&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;message&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;/pre&gt; &lt;p&gt;Es gibt auch inzwischen ein NetBeans IDE Plugin, das &lt;a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=30138&amp;amp;intcmp=925655" title="GMail Notification Plugin for NetBeans"&gt;GMail-Konten Notifications&lt;/a&gt; anzeigt. Das Plugin nutzt allerdings nicht die GMail-API sondern JavaMail.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt;
    &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-16T09:17:17+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=712">
    <title>JNBB - Joschs NetBeans Blog: JavaDev: Microsoft Exchange API für Java</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/15/javadev-microsoft-exchange-api-fuer-java/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Microsoft selbst hat eine frei verfügbare &lt;a href="http://code.msdn.microsoft.com/ewsjavaapi"&gt;EWS API für Java&lt;/a&gt; veröffentlicht, die es ermöglicht auf Microsoft Exchange Server via &lt;a href="http://msdn.microsoft.com/en-us/library/dd633709%28v=EXCHG.80%29.aspx"&gt;Exchange Web Service API&lt;/a&gt; (EWS) zuzugreifen. Die API soll die gleiche Funktionalität bieten, wie die schon seit Mitte November existierende &lt;a
    href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c3342fb3-fbcc-4127-becf-872c746840e1"&gt;EWS Managed API 1.1 für das .NET Framework&lt;/a&gt;.&lt;span id="more-712"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Die Lizenz der Bibliothek steht unter &lt;a href="http://code.msdn.microsoft.com/ewsjavaapi/Project/License.aspx"&gt;Microsoft Public License (Ms-PL)&lt;/a&gt; und ist damit inkompatibel zur GPL – einer kommerziellen Nutzung steht aber nichts im Wege.&lt;/p&gt; &lt;p&gt;Der Quelltext der
    API steht mit dem &lt;a href="http://code.msdn.microsoft.com/ewsjavaapi/Release/ProjectReleases.aspx?ReleaseId=5280"&gt;Download des ZIP-Archivs&lt;/a&gt; zur Verfügung.&lt;/p&gt; &lt;p&gt;Ein kleines 20-seitiges RTF-Dokument “Getting Started” soll bei dem Start mit der Bibliothek helfen. Dazu gehören auch passende Klassendiagramme und Quelltextbeispiele.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/EWS-class-diagram.jpg"&gt;&lt;img
    src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/EWS-class-diagram.jpg" alt="" class="alignnone size-full wp-image-718" title="EWS-class-diagram" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Um zum Beispiel ein Wiederholungstermin anzulegen, wird dieser Quelltext vorgeschlagen:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;Appointment appointment &lt;span style="color:
    #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Appointment&lt;span style="color: #009900;"&gt;(&lt;/span&gt;service&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; appointment.&lt;span style="color: #006633;"&gt;setSubject&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Recurrence Appointment for JAVA XML TEST"&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; appointment.&lt;span style="color: #006633;"&gt;setBody&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;MessageBody.&lt;span style="color: #006633;"&gt;getMessageBodyFromText&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Recurrence Test Body Msg"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: #003399;"&gt;SimpleDateFormat&lt;/span&gt; formatter &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;SimpleDateFormat&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"yyyy-MM-dd HH:mm:ss"&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #003399;"&gt;Date&lt;/span&gt; startDate &lt;span style="color: #339933;"&gt;=&lt;/span&gt; formatter.&lt;span style="color: #006633;"&gt;parse&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"2010-05-22 12:00:00"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #003399;"&gt;Date&lt;/span&gt; endDate &lt;span style="color: #339933;"&gt;=&lt;/span&gt; formatter.&lt;span style="color: #006633;"&gt;parse&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"2010-05-22 13:00:00"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; appointment.&lt;span style="color:
    #006633;"&gt;setStart&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;startDate&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;span style="color: #666666; font-style: italic;"&gt;//new Date(2010-1900,5-1,20,20,00));&lt;/span&gt;&lt;br /&gt; appointment.&lt;span style="color: #006633;"&gt;setEnd&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;endDate&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;//new Date(2010-1900,5-1,20,21,00));&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; formatter &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;SimpleDateFormat&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"yyyy-MM-dd"&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #003399;"&gt;Date&lt;/span&gt; recurrenceEndDate &lt;span style="color: #339933;"&gt;=&lt;/span&gt; formatter.&lt;span style="color: #006633;"&gt;parse&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"2010-07-20"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br
    /&gt; appointment.&lt;span style="color: #006633;"&gt;setRecurrence&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Recurrence.&lt;span style="color: #006633;"&gt;DailyPattern&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;appointment.&lt;span style="color: #006633;"&gt;getStart&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;, &lt;span
    style="color: #cc66cc;"&gt;3&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; appointment.&lt;span style="color: #006633;"&gt;getRecurrence&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;setStartDate&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;appointment.&lt;span style="color: #006633;"&gt;getStart&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; appointment.&lt;span style="color: #006633;"&gt;getRecurrence&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color:
    #006633;"&gt;setEndDate&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;recurrenceEndDate&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; appointment.&lt;span style="color: #006633;"&gt;save&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Auch die Suche nach Elementen
    erscheint recht durchgängig:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; findItems&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color:
    #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; ItemView view &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; ItemView&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;10&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; view.&lt;span style="color: #006633;"&gt;getOrderBy&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #006633;"&gt;add&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;ItemSchema.&lt;span style="color: #006633;"&gt;DateTimeReceived&lt;/span&gt;, SortDirection.&lt;span style="color: #006633;"&gt;Ascending&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; view.&lt;span style="color:
    #006633;"&gt;setPropertySet&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; PropertySet&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; BasePropertySet.&lt;span style="color: #006633;"&gt;IdOnly&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; ItemSchema.&lt;span style="color: #006633;"&gt;Subject&lt;/span&gt;,&lt;br /&gt; &#160;&#160;
    &#160;&#160;&#160;ItemSchema.&lt;span style="color: #006633;"&gt;DateTimeReceived&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; FindItemsResults findResults &lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;br /&gt; &#160; &#160; service.&lt;span style="color: #006633;"&gt;findItems&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;WellKnownFolderName.&lt;span style="color: #006633;"&gt;Inbox&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; SearchFilter.&lt;span style="color: #006633;"&gt;SearchFilterCollection&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &#160; LogicalOperator.&lt;span style="color: #006633;"&gt;Or&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span
    style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; SearchFilter.&lt;span style="color: #006633;"&gt;ContainsSubstring&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;ItemSchema.&lt;span style="color: #006633;"&gt;Subject&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;"EWS"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;,&lt;br /&gt; &#160; &#160; &#160; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; SearchFilter.&lt;span
    style="color: #006633;"&gt;ContainsSubstring&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;ItemSchema.&lt;span style="color: #006633;"&gt;Subject&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;"API"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;br /&gt; &#160; &#160; &#160; &lt;span style="color: #009900;"&gt;)&lt;/span&gt;, view&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160;
    &lt;span style="color: #003399;"&gt;System&lt;/span&gt;.&lt;span style="color: #006633;"&gt;out&lt;/span&gt;.&lt;span style="color: #006633;"&gt;println&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"Total number of items found: "&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; findResults.&lt;span style="color: #006633;"&gt;getTotalCount&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160; &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;Item item &lt;span style="color: #339933;"&gt;:&lt;/span&gt; findResults&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160; &lt;span style="color:
    #003399;"&gt;System&lt;/span&gt;.&lt;span style="color: #006633;"&gt;out&lt;/span&gt;.&lt;span style="color: #006633;"&gt;println&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;item.&lt;span style="color: #006633;"&gt;getSubject&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160; &#160;&#160;&lt;span
    style="color: #003399;"&gt;System&lt;/span&gt;.&lt;span style="color: #006633;"&gt;out&lt;/span&gt;.&lt;span style="color: #006633;"&gt;println&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;item.&lt;span style="color: #006633;"&gt;getBody&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;&#160; &#160;&lt;span
    style="color: #666666; font-style: italic;"&gt;// Do something with the item.&lt;/span&gt;&lt;br /&gt; &#160; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Im Großen und Ganzen sieht die API durchdacht und sauber aus und steht auch damit in direkter Konkurrenz zum kommerziellen &lt;a href="http://www.moyosoft.com/jbex/" title="Moyosoft Exchage Java Bridge"&gt;Exchange Connector von
    Moyosoft&lt;/a&gt;, den ich vor kurzem getestet hatte.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-15T17:37:04+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=705">
    <title>JNBB - Joschs NetBeans Blog: WPDev: CyStats, der Visitcounter Patch</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/15/wpdev-cystats-der-visitcounter-patch/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Ich habe nun die zweite Abfrage aus der Idee des letzten Artikel dem CyStats Plugin hinzugefügt und das gleich mal Life auf meinem Blog getestet.&lt;/p&gt; &lt;p&gt;Das Ergebnis ist nun deutlich realistischer, was die Anzahl der Besuche betrifft. Nun wird nicht jeder Bounce (also einmaliger Einsprung) als Besuch gewertet. Das ist zwar eine pessimistische Darstellung von Besuchen (schließlich kommen viele Leser über News Feeds Aggregatoren und wollen
    gerade nur den einen Artikel lesen), aber erheblich realistischer als die bisherige Kalkulation.&lt;span id="more-705"&gt;&lt;/span&gt;Ich konnte den Patch auch recht optimiert implementieren, in dem zunächst immer mit der s1-Abfrage auf “Anzahl Hits” == 2 getestet wird.&lt;/p&gt; &lt;div style="width: 310px;" id="attachment_697" class="wp-caption alignnone"&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/Besucherberechnung.png"&gt;&lt;img
    src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/Besucherberechnung-300x212.png" title="Besucherberechnung" height="212" width="300" alt="" class="size-medium wp-image-697" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Besucherberechnung mit zwei Abfragen (s1 und s2)&lt;/p&gt;&lt;/div&gt; &lt;p&gt;Erst wenn das wahr ist, prüfe ich auf vorhergehende Hits mit der s2-Abfrage. Damit leidet die Performance nicht allzu sehr, weil nun für die endgültige Besuchszählerberechnung zwei statt
    einer Abfrage benötigt werden. Üblicherweise sind die überwiegende “Anzahl an Hits” &amp;lt;&gt; 2 in dem s1-Abfrage Zeitraum (und die zweite Abfrage erübrigt sich dann).&lt;/p&gt; &lt;p&gt;Ich habe den Patch als Unified Diff angehangen, das gegen CyStats 0.9.8 erzeugt wurde. Die Datei die gepatched wurde ist: /cystats/includes/cystats.class.php&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/cystats.patch"&gt;Patch Datei für CyStats&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;Da die Homepage des Plugin Autors nicht mehr existiert, versuche ich ihn mal anders zu kontaktieren. Evtl. kann man das Patch (allerdings wohl dann in WordPress konfigurierbar) hinzufügen. Konfigurierbar deswegen, damit Anwender sich entscheiden können, die neue pessimistische Berechnung verwenden zu können (oder auch nicht, wenn man hohe Ergebnisse mag &lt;img src="http://www.aljoscha-rittner.de/blog/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /&gt; ).&lt;/p&gt;
    &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-15T09:52:13+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=671">
    <title>JNBB - Joschs NetBeans Blog: SVG to Java Converter</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/15/svg-to-java-converter/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Ich habe mal wieder ein spannendes Projekt gefunden. Die API &lt;a href="http://code.google.com/p/svg2java/" title="svg2java"&gt;svg2java&lt;/a&gt; ermöglicht es aus &lt;a href="http://de.wikipedia.org/wiki/Scalable_Vector_Graphics" title="Wikipedia SVG"&gt;SVG&lt;/a&gt; Dateien &lt;a href="http://download.oracle.com/javase/1.5.0/docs/guide/2d/index.html" title="Java2d API Doc"&gt;Java2D&lt;/a&gt; Quelltext zu generieren.&lt;/p&gt; &lt;p&gt;&lt;a
    href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/logo.png"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/logo.png" title="svg2java Logo" height="64" width="64" alt="" class="alignleft size-full wp-image-676" /&gt;&lt;/a&gt;Das unter New BSD License stehende Projekt von Bernd Rosstauscher ermöglicht es (100% korrekt validierbare) SVG Dateien in die Befehlsaufrufe von Graphics2D zu konvertieren und berücksichtigt dabei auch Text. Eingefügte Grafiken
    werden allerdings noch nicht erkannt.&lt;span id="more-671"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Die erzeugten Klassen (&lt;a href="http://code.google.com/p/svg2java/source/browse/test/com/btr/svg2java/test/swing/icons/AppIcon.java?r=2e06e160bfb36a206541ab136299022af481bf00" title="svg2java Sample"&gt;Beispiel&lt;/a&gt;) sind nicht wirklich sehr hübsch, aber grafische Primitive als statischen Quelltext kann man kaum besser generieren.&lt;/p&gt; &lt;pre&gt;﻿﻿﻿ &lt;div style="overflow: auto; white-space:
    nowrap; width: 100%;" class="codecolorer-container java dawn"&gt;&lt;div class="java codecolorer"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;void&lt;/span&gt; paintShapeNode_0_0_0_8&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003399;"&gt;Graphics2D&lt;/span&gt; g&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt;
    &#160;&lt;span style="color: #003399;"&gt;GeneralPath&lt;/span&gt; shape15 &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #003399;"&gt;GeneralPath&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;shape15.&lt;span style="color: #006633;"&gt;moveTo&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;9.477582&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;34.644264&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;shape15.&lt;span style="color: #006633;"&gt;lineTo&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;55.082695&lt;/span&gt;, &lt;span style="color:
    #cc66cc;"&gt;34.644264&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;shape15.&lt;span style="color: #006633;"&gt;curveTo&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;56.95121&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;34.644264&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;58.477207&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;36.92005&lt;/span&gt;,
    &lt;span style="color: #cc66cc;"&gt;58.477207&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;39.706642&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;shape15.&lt;span style="color: #006633;"&gt;lineTo&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;58.477207&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;56.782074&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;shape15.&lt;span style="color: #006633;"&gt;curveTo&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;40.852654&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;53.53046&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;23.379293&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;49.03524&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;6.0828896&lt;/span&gt;,
    &lt;span style="color: #cc66cc;"&gt;49.45096&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;shape15.&lt;span style="color: #006633;"&gt;lineTo&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;6.0828896&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;39.706646&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color:
    #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;shape15.&lt;span style="color: #006633;"&gt;curveTo&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;6.0828896&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;36.92005&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;7.6088877&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;34.644264&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;9.477403&lt;/span&gt;, &lt;span style="color:
    #cc66cc;"&gt;34.644264&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;shape15.&lt;span style="color: #006633;"&gt;lineTo&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;9.477581&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;34.644264&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
    &#160;shape15.&lt;span style="color: #006633;"&gt;closePath&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;g.&lt;span style="color: #006633;"&gt;fill&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;shape15&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:
    #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Man sieht aber, dass man schnell an das 64kB Limit von Java-Klassen kommt. Da hat das Projekt bestimmt noch Potenzial den Code besser aufzubereiten.&lt;/p&gt; &lt;p&gt;Warum sollte man nicht gleich &lt;a href="http://xmlgraphics.apache.org/batik/" title="Apache Batik Toolkit"&gt;Apache Batik&lt;/a&gt; nehmen, um SVG Grafiken anzuzeigen?&lt;/p&gt; &lt;p&gt;Nicht immer will man die komplette Batik-Suite mit in eine eigene Anwendung
    bringen. Der SVG-Renderer ist durch seinen Interpreter naturgemäß auch langsamer. Das Projekt will auch einen Konverter für die &lt;a href="http://developer.android.com/reference/android/graphics/package-summary.html" title="Android Graphics Doc"&gt;Android Graphics&lt;/a&gt; Plattform anbieten, wo man ebenfalls nicht Batik zur Verfügung hat.&lt;/p&gt; &lt;p&gt;Außerdem kann man mit so konvertierten SVG Grafiken erheblich einfacher Swing-Komponenten erzeugen, die skalierbar sind und wie moderne Widgets
    aussehen. Siehe auch mein &lt;a href="http://www.aljoscha-rittner.de/blog/archive/2010/12/14/feature-swing-is-beautiful-harmonic-code-blog-vorstellung/" title="Feature - Swing is beautiful"&gt;Feature&lt;/a&gt; zum &lt;a href="http://harmoniccode.blogspot.com/" title="Blog: Harmonic Code"&gt;Harmonic Code Blog&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-15T08:00:44+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=696">
    <title>JNBB - Joschs NetBeans Blog: WPDev: CyStats Besucherberechnung, eine Idee</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/15/wpdev-cystats-besucherberechnung-eine-idee/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;In dem vorherigen Artikel habe ich ein paar Kritikpunkte aufgeschrieben, warum die Besucherzahl von CyStats für WordPress zu hoch berechnet wird.&lt;/p&gt; &lt;p&gt;Es gab zwei grundlegende Probleme:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Neubesuche werden nicht von Wiederkehrern unterschieden&lt;/li&gt; &lt;li&gt;Einmalige Aufrufe von Seiten werden als Besucher gezählt&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Wenn man Punkt 1 ignoriert (weil eine Korrektur eine
    massive Anpassung von CyStats bedeuten würde), muss Punkt 2 auf jeden Fall angegangen werden.&lt;span id="more-696"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Folgende Skizze habe ich für die Erklärung eines Vorschlages vorbereitet:&lt;/p&gt; &lt;div style="width: 610px;" id="attachment_697" class="wp-caption alignnone"&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/Besucherberechnung.png"&gt;&lt;img
    src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/Besucherberechnung.png" title="Besucherberechnung" height="424" width="600" alt="" class="size-full wp-image-697" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Besucherberechnung mit zwei Abfragen (s1 und s2)&lt;/p&gt;&lt;/div&gt; &lt;p&gt;Für diese Berechnung will ich maximal zwei Abfragen auf die Datenbank loslassen. Diese Abfragen unterscheiden sich nur um die Betrachtung von zwei fixen Zeitabschnitten, die direkt aufeinander
    folgen.&lt;/p&gt; &lt;p&gt;Die Abfrage s1 schaut eine feste Zeit in die Vergangenheit (ts1) und zählt bis zur aktuellen Zeit (ta) die Vorkommen eines bestimmten Users. Die Abfrage s2 zählt vom Zeitabschnitt ts1 bis ts2 die Seitenklicks des selben Users.&lt;/p&gt; &lt;p&gt;Im Fall 1 erhalte ich den ersten Klick, berechnet durch s1 mit dem Ergebnis = 1. Die Abfrage s2 findet keine Klicks.&lt;/p&gt; &lt;p&gt;Im Fall 2 hat der Benutzer in der gewünschten Zeit den zweiten Klick gemacht. Damit kann man den
    User als Besucher werten. Die Abfrage s2 muss weiter den Wert 0 liefern.&lt;/p&gt; &lt;p&gt;Im Fall 3 wurden weitere Klicks gemacht (als mehr als 2 Klicks für die Abfrage s1). Diese dürfen den Besucherzähler nicht erhöhen. Die Abfrage s2 muss weiter den Wert 0 liefern.&lt;/p&gt; &lt;p&gt;Nun kommt der Fall 4, der einen Besuch über längere Zeiträume nicht mehrfach zählen darf. Denn zu einem älteren Zeitpunkt wurde ja zu einem delta schon ein Besuch ermittelt (siehe Pfeil neben Fall 4). Deswegen muss
    generell für s1&gt;0 und s2&gt;0 gelten, dass kein Besuch erfasst wird.&lt;/p&gt; &lt;p&gt;Die s1 Abfrage entspricht weiterhin der bisherigen CyStats Abfrage. Es wird nun nicht mehr bei Ergebnis = 0 der Besucherzähler hochgezählt sondern nur bei Ergebnis = 2. Außerdem muss die Vorbedingung von s2 = 0 erfüllt sein.&lt;/p&gt; &lt;p&gt;&lt;em&gt;Kritik&lt;/em&gt;: Der Fall 4 könnte für einen User mehrfach auftreten und man hätte diese Tatsache nie als Besuch bewertet. Damit wäre diese Idee der Berechnung
    eher eine pessimistische Ermittlung von Besucherzahlen,&lt;/p&gt; &lt;p&gt;Es gäbe noch eine andere Möglichkeit, Serien von Klicks als Besuche zu erkennen. Man müsste alle Klicks des Besuchers ermitteln und jede Abschnittsdauer zwischen jedem Klick in einer Schleife berechnen. Dazu müsste man eine Anzahl ermitteln, wie viel Abschnitte &amp;lt; Delta sind. Das Ergebnis entscheidet über Klick oder Klick+Besuch. Damit würde der obige Fall 4 in Serie als Besucher zu erkennen. Aber diese Abfrage erscheint
    mit mit der zusätzlichen Schleife langsamer als zwei Abfragen zu festen Zeitpunkten.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-15T07:26:37+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=682">
    <title>JNBB - Joschs NetBeans Blog: WPDev: CyStats berechnet Besucher sehr hoch</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/14/wpdev-cystats-berechnet-besucher-sehr-hoch/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Ich verwende CyStats als Analysetool für Hits und Besuche. Allerdings erscheint (nicht nur) mir die Anzahl der Besuche ggü. den Hits einfach zu hoch.&lt;span id="more-682"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Die Berechnung der Besuche erfolgt so (kleiner Ausschnitt, gekürzt):&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto; white-space: nowrap; width: 100%;" class="codecolorer-container php dawn"&gt;&lt;div class="php codecolorer"&gt;&#160;&lt;span
    style="color: #000088;"&gt;$delta&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #000088;"&gt;$info&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'timestamp'&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&lt;/span&gt;get_option&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'cystats_visit_deltatime'&lt;/span&gt;&lt;span
    style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;&lt;span style="color: #000088;"&gt;$q&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'SELECT count(stamp)&lt;br /&gt; &#160;FROM '&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: #000088;"&gt;$wpdb&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&gt;&lt;/span&gt;&lt;span style="color:
    #004000;"&gt;prefix&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt;CYSTATS_TABLE_STATISTICS_RAW&lt;span style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'&lt;br /&gt; &#160;WHERE&#160;&#160; (stamp&gt;\''&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: #000088;"&gt;$delta&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'\'&lt;br /&gt; &#160;AND
    remote_addr=\''&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000088;"&gt;$info&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'remote_addr'&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span
    style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'\')&lt;br /&gt; &#160;ORDER BY stamp DESC LIMIT 1'&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &#160;&lt;span style="color: #000088;"&gt;$locked&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #000088;"&gt;$wpdb&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;get_var&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000088;"&gt;$q&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &#160;&lt;span style="color: #b1b100;"&gt;if&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #000088;"&gt;$locked&lt;/span&gt;&lt;span style="color: #339933;"&gt;==&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color:
    #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br /&gt; &#160; &#160;&lt;span style="color: #666666; font-style: italic;"&gt;// Es ist ein Besuch, updates/inserts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Das erscheint mir doch zu trivial. In &lt;code class="codecolorer php dawn"&gt;&lt;span class="php"&gt;&lt;span style="color: #000088;"&gt;$info&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;timestamp&lt;span style="color:
    #009900;"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; steht der Zeitstempel des Hits. Aus &lt;code class="codecolorer php dawn"&gt;&lt;span class="php"&gt;get_option&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'cystats_visit_deltatime'&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; wird die Zeit in Sekunden ausgelesen, die als Besuch angesehen wird.&lt;/p&gt; &lt;p&gt;Mit dem select wird nun rückwirkend gesucht, ob zu
    der IP in der “visit_deltatime” schon ein Eintrag existiert. Wurde ein Hit gefunden, treibt sich die Person weniger als “visit_deltatime” Sekunden auf der Seite rum. Der Klick wird nicht als Besucher erfasst.&lt;/p&gt; &lt;p&gt;Wird kein Eintrag gefunden, war diese IP nie oder nicht länger als “visit_deltatime” Sekunden auf der Homepage. Dann wird dieser Hit als neuer Besucher gewertet. Und zwar pro Tag, Woche, Monat und Jahr.&lt;/p&gt; &lt;p&gt;Da gibt es nun etwas Kritik. Es wird nicht unterschieden,
    ob es um ein Neubesuch oder um eine Rückkehr handelt. Um das zu differenzieren, müsste man Neubesuch definieren (z.B. pro Tag) und dafür zwei Abfragen durchführen (einmal checken, ob “heute” der Besucher schon da war und dann den Zeitraum prüfen).&lt;/p&gt; &lt;p&gt;Das andere Problem ist, dass der Zeitraum m.E. viel zu kurz im Standard gewählt wurde. 300 Sekunden gibt CyStats vor und entspricht 5 Minuten. Üblicherweise berechnen andere Statistiktools eine Wiederkehr (und so muss man das hier sehen,
    weil ein Neubesuch nicht unterschieden werden kann) dann, wenn mehr als eine Stunde vergangen ist (entspricht 1800 Sekunden). Aber auch das hilft wenig, wenn nicht nach Neubesuchen unterschieden wird, weil ein treuer Besucher bei vier mal “vorbeischauen” pro Tag auch vier Besuche und vier Hits generiert. D.h. im schlechtesten Fall wären Besuche gleich Hits.&lt;/p&gt; &lt;p&gt;Übrigens auch dann – &lt;em&gt;und das ist die größte Kritik&lt;/em&gt; – wenn jede IP nur einmal am Tag vorbei schaut. Damit
    hätten wir ganz untreue Besucher und trotzdem so viele Besuche wie Hits.&lt;/p&gt; &lt;p&gt;Im Prinzip darf ein Besuch, gar nicht bei dem ersten Hit bewertet werden. Die Berechnung, die CyStats durchführt, verhindert nur, dass jeder Hit einer IP in einem Zeitraum zum Besuch wird. Es lässt aber völlig außer Acht, dass man einen Besuch ungern als solches definieren will, wenn es nur ein Zufallsklick gewesen sein mag (z.B. Einfall durch Suchmaschine und dann die Seite wieder verlassen, weil der Content
    nicht stimmt). Da hat übrigens Google Analytics größere Vorteile. Google weiß z.B., dass ein Besucher von seiner Suche sofort zurückkehrt und weiter sucht, weil der Inhalt des gefundenen nicht passt. Solche Fehlklicks werden bei GA bestimmt nicht als Besucher gezählt. &lt;a href="http://www.crazytoast.de/besucherstatistik-von-cystats-ist-doppelt-so-hoch-wie-google-analytics.html" title="CyStats Besuche sind doppelt so hoch wie GA"&gt;Deswegen sind parallel laufende GA-Besuche immer deutlich kleiner als
    die CyStats-Besuchszahlen&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Da CyStats bewusst auf JavaScript verzichtet und ja nur auf der lokalen Webseite arbeitet, kann man Zufallsklicks als solche nicht erkennen. D.h. ein Hit ist zwar ein Hit und damit unqualifiziert (d.h., man darf das nicht zu hoch bewerten) aber bei einem Besuch muss man strenger rechnen, als es der einfache Algorithmus von CyStats tut. Der erste Klick von einer eindeutig nachweisbaren Quelle darf noch nicht als Besuch gewertet werden.&lt;/p&gt;
    &lt;p&gt;Dadurch wird das Erkennen von echten Besuchen aber komplizierter. Wer eine einfache Methode hat, kann ja mal eine Idee hinterlassen. Ich mache mir mal parallel ein paar Gedanken.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-14T14:31:22+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=646">
    <title>JNBB - Joschs NetBeans Blog: Feature: Swing is beautiful – Harmonic Code Blog Vorstellung</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/14/feature-swing-is-beautiful-harmonic-code-blog-vorstellung/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;In meinen Feature-Artikeln möchte ich gerne andere Blogs und deren Inhalte vorstellen.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.adam-bien.com/" title="Homepage von Adam Bien"&gt;Adam Bien&lt;/a&gt; hat eine &lt;a href="http://www.adam-bien.com/roller/abien/entry/swing_looks_great" title="Swing looks ... great"&gt;kleine Serie&lt;/a&gt; (&lt;a href="http://www.adam-bien.com/roller/abien/entry/swing_looks_great" title="Swing looks ... great
    I"&gt;I&lt;/a&gt;, &lt;a href="http://www.adam-bien.com/roller/abien/entry/swing_looks_great_part_ii" title="Swing looks ... great II"&gt;II&lt;/a&gt;, &lt;a href="http://www.adam-bien.com/roller/abien/entry/swing_looks_great_part_iii" title="Swing looks ... great III"&gt;III&lt;/a&gt;, &lt;a href="http://www.adam-bien.com/roller/abien/entry/swing_looks_great_part_iv" title="Swing looks ... great IV"&gt;IV&lt;/a&gt;, &lt;a href="http://www.adam-bien.com/roller/abien/entry/swing_looks_great_part_v"
    title="Swing looks ... great V"&gt;V&lt;/a&gt;) gestartet, um schöne Plugable LookAndFeels (&lt;a href="http://download.oracle.com/javase/6/docs/api/javax/swing/plaf/package-summary.html" title="JavaDoc PLAF"&gt;PLAF&lt;/a&gt;s) für Swing vorzustellen. Mit PLAFs kann man seine Swing Anwendungen recht schnell mit einem neuen Skin versehen, (fast) ohne die eigene Anwendung anpassen zu müssen. Er hat dann später die Serie erweitert, um zu zeigen was es für Erweiterungen als Swing-Komponenten gibt
    (Widgets): &lt;a href="http://www.adam-bien.com/roller/abien/entry/swing_looks_great_part_vi" title="Swing looks ... great VI"&gt;VI&lt;/a&gt;, &lt;a href="http://www.adam-bien.com/roller/abien/entry/swing_looks_great_part_vii" title="Swing looks ... great VII"&gt;VII&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Aber es geht in diesem Feature gar nicht um Adam Biens Blog &lt;img src="http://www.aljoscha-rittner.de/blog/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /&gt; – ich habe nämlich
    einen Blog gefunden, der sich ausschließlich mit der Erstellung von Swing-Komponenten beschäftigt, die den besonderen Touch von Web-Widget Komponenten (wie man es von Adobe Flex oder Microsoft Silverlight und JavaFX kennt) haben.&lt;span id="more-646"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.linkedin.com/pub/dir/Gerrit/Grunwald" title="Linked in"&gt;Gerrit Grunwald&lt;/a&gt;, Softwareentwickler bei der Raith GmbH in Dortmund beschreibt in seinem &lt;strong&gt;&lt;a
    href="http://harmoniccode.blogspot.com/" title="Blog: Harmonic Code"&gt;Blog Harmonic Code&lt;/a&gt;&lt;/strong&gt; den Design von Swing Komponenten in der Layer-Technik:&lt;/p&gt; &lt;div style="width: 510px;" id="attachment_660" class="wp-caption alignnone"&gt;&lt;a href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/layeredComps.gif"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/layeredComps.gif" title="layeredComps" height="300" width="500" alt=""
    class="size-full wp-image-660" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Quelle: Harmonic Code&lt;/p&gt;&lt;/div&gt; &lt;p&gt;Was man mit dieser Technik alles erreichen kann, stelle ich mal als einen kleinen Auszug an Bildern vor:&lt;/p&gt; &lt;a href="http://www.aljoscha-rittner.de/blog/archive/2010/12/14/feature-swing-is-beautiful-harmonic-code-blog-vorstellung/ishot-1/" title="ishot-1"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/ishot-1-150x118.png"
    title="ishot-1" height="118" width="150" alt="Quelle: Harmonic Code" class="attachment-thumbnail" /&gt;&lt;/a&gt; &lt;a href="http://www.aljoscha-rittner.de/blog/archive/2010/12/14/feature-swing-is-beautiful-harmonic-code-blog-vorstellung/ishot-2/" title="ishot-2"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/ishot-2-150x150.png" title="ishot-2" height="150" width="150" alt="Quelle: Harmonic Code" class="attachment-thumbnail" /&gt;&lt;/a&gt; &lt;a
    href="http://www.aljoscha-rittner.de/blog/archive/2010/12/14/feature-swing-is-beautiful-harmonic-code-blog-vorstellung/ishot-3/" title="ishot-3"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/ishot-3-150x100.png" title="ishot-3" height="100" width="150" alt="Quelle: Harmonic Code" class="attachment-thumbnail" /&gt;&lt;/a&gt; &lt;a href="http://www.aljoscha-rittner.de/blog/archive/2010/12/14/feature-swing-is-beautiful-harmonic-code-blog-vorstellung/ishot-3-menu/"
    title="ishot-3-menu"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/ishot-3-menu-150x150.png" title="ishot-3-menu" height="150" width="150" alt="Quelle: Harmonic Code" class="attachment-thumbnail" /&gt;&lt;/a&gt; &lt;a href="http://www.aljoscha-rittner.de/blog/archive/2010/12/14/feature-swing-is-beautiful-harmonic-code-blog-vorstellung/ishot-44/" title="ishot-44"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/ishot-44-150x150.png"
    title="ishot-44" height="150" width="150" alt="Quelle: Harmonic Code" class="attachment-thumbnail" /&gt;&lt;/a&gt; &lt;a href="http://www.aljoscha-rittner.de/blog/archive/2010/12/14/feature-swing-is-beautiful-harmonic-code-blog-vorstellung/rollingcounter-demo/" title="RollingCounter Demo"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/RollingCounter-Demo-150x150.png" title="RollingCounter Demo" height="150" width="150" alt="Quelle: Harmonic Code"
    class="attachment-thumbnail" /&gt;&lt;/a&gt; &lt;a href="http://www.aljoscha-rittner.de/blog/archive/2010/12/14/feature-swing-is-beautiful-harmonic-code-blog-vorstellung/yellow/" title="yellow"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/yellow-109x150.png" title="yellow" height="150" width="109" alt="Quelle: Harmonic Code" class="attachment-thumbnail" /&gt;&lt;/a&gt; &lt;a
    href="http://www.aljoscha-rittner.de/blog/archive/2010/12/14/feature-swing-is-beautiful-harmonic-code-blog-vorstellung/layeredcomps/" title="layeredComps"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/layeredComps-150x150.gif" title="layeredComps" height="150" width="150" alt="Quelle: Harmonic Code" class="attachment-thumbnail" /&gt;&lt;/a&gt; &lt;p&gt;Das besondere an dem Blog ist nicht nur die tolle Beschreibung, wie diese Komponenten mit unterschiedlichen Werkzeugen
    aufgebaut werden, sondern auch die Möglichkeit das alles als Webstart-Demos anzuschauen und den Sourcecode herunterladen zu können.&lt;/p&gt; &lt;p&gt;So wird der Blog zu einer wahren Fundgrube an Ideen, um eigene individuelle Swing-Komponenten zu erstellen.&lt;/p&gt; &lt;p&gt;In einer &lt;a href="http://harmoniccode.blogspot.com/2010/12/presentation-and-webstart-demo.html" title="Presentation"&gt;eindrucksvollen Präsentation&lt;/a&gt;, beschreibt Gerrit Grunwald, wie man mit passenden Tools von
    Designern am schnellsten zu echten skalierbaren Swing-Komponenten kommt.&lt;/p&gt; &lt;p&gt;Ich bin der Meinung, dass der &lt;a href="http://harmoniccode.blogspot.com/feeds/posts/default" title="Harmonic Code Feed"&gt;Feed&lt;/a&gt; des Blogs in jeden Feedreader eines interessierten Swing-Entwicklers gehört.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; – &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-14T09:26:02+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=639">
    <title>JNBB - Joschs NetBeans Blog: News: ASF verlässt das JCP EC</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/09/news-asf-verlaesst-das-jcp-ec/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Wie man nicht anders erwarten durfte, ist es nun passiert. Die Apache Software Foundation hat sich heute aus dem Executive Committee des JSP zurückgezogen.&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;The Apache Software Foundation has resigned its seat on the Java SE/EE Executive Committee.&#160; Apache has served on the EC for the past 10 years, winning the JCP “Member of the Year” award 4 times, and recently was ratified for another term with support from
    95% of the voting community.&#160; Further, the project communities of the ASF, home to Apache Tomcat, Ant, Xerces, Geronimo, Velocity and nearly a 100 mainstay java components have implemented countless JSRs and serve on and contribute to many of the JCPs technical expert groups.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Im &lt;a href="https://blogs.apache.org/foundation/entry/the_asf_resigns_from_the" title="ASF Blog (Apache)"&gt;Apache ASF Blog&lt;/a&gt; wird auf die (bekannten) Gründe näher
    eingegangen:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;The recent Java SE 7 vote was the last chance for the JCP EC to demonstrate that the EC has any intent to defend the JCP as an open specification process, and demonstrate that the letter and spirit of the law matter.&#160;&#160;&#160;To sum up the issues at stake in the vote, we believe that while continuing to fail to uphold their responsibilities under the JSPA, Oracle provided the EC with a Java SE 7 specification request and license that are
    self-contradictory, severely restrict distribution of independent implementations of the spec, and most importantly, prohibit the distribution of independent open source implementations of the spec.&#160; Oracle has refused to answer any reasonable and responsible questions from the EC regarding these problems.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Letztendlich zieht die ASF auch alle Vertretungen in den JSRs zurück:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;To that end, our representative has informed the
    JCP’s Program Management Office of our resignation, effective immediately.&#160; As such, the ASF is removing all official representatives from any and all JSRs. In addition, we will refuse any renewal of our JCP membership and, of course, our EC position.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Diese (schnelle) Reaktion der ASF war zu erwarten, nachdem Oracle mit seiner &lt;a
    href="http://www.marketwire.com/press-release/Technical-Specifications-Java-SE-7-Java-SE-8-Passed-JCP-Executive-Committee-Vote-NASDAQ-ORCL-1364921.htm" title="Oracle Pressemitteilung zum JSR 336 und 337"&gt;Pressemitteilung&lt;/a&gt; komplett jede Kritik unerwähnt ließ und die Annahme des JSR 336 und 337 als uneingeschränkten Erfolg feierte. In der Pressemitteilung wurde auch nicht erwähnt, dass und aus welchen Gründen einige Mitglieder (unter anderem auch Google) gegen einige JSR Elemente stimmten.
    Auch die Protestnoten sind unter den Tisch gefallen.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-09T21:49:01+00:00</dc:date>
  </item>
  <item rdf:about="http://blog.nigjo.de/netbeans/?p=486">
    <title>Java Getriebe » NetBeans: Eigene Einträge im Projektbaum</title>
    <link>http://blog.nigjo.de/netbeans/2010/12/eigene-eintrage-im-projektbaum/</link>
    <content:encoded>Auch wenn es etwas pathetisch klingt, aber je mehr ich mit der NetBeans Plattform arbeite desto mehr möchte ich in die Lobeshymnen einstimmen1. Ich bin einfach begeistert, wie einfach es geht eine RCP Anwendung – und damit auch die NetBeans IDE selbst – zu erweitern. Zum Beispiel die “Project API”. Die NetBeans IDE kennt diverse [...]</content:encoded>
    <dc:date>2010-12-09T11:42:50+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=624">
    <title>JNBB - Joschs NetBeans Blog: iGoogle killt meinen Firefox</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/08/igoogle-killt-meinen-firefox/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Ich glaube seit heute spinnt die &lt;a href="http://www.google.de/ig" title="iGoogle"&gt;iGoogle&lt;/a&gt; Seite. Ich nutze das als bequemen News-Aggregator. Schon heute morgen viel mir auf, dass die iGoogle-Seite ständig Reloads im Sekundentakt durchführt. Das äußert sich in einem nervösen Tab-Titel, ständige Anzeige des Ladebalkens und…&lt;/p&gt; &lt;p&gt;&lt;a
    href="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/firefox1G.png"&gt;&lt;img src="http://www.aljoscha-rittner.de/blog/wp-content/uploads/2010/12/firefox1G-300x144.png" title="Firefox Taskmanager mit 1GB" height="144" width="300" alt="Taskmanager" class="alignnone size-medium wp-image-625" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;unfassbaren Speicherhunger.&lt;/p&gt; &lt;p&gt;Damit ist iGoogle für mich gerade unbrauchbar geworden.&lt;/p&gt;
    &lt;p&gt;&lt;strong&gt;[UPDATE]&lt;/strong&gt;&lt;br /&gt; Es ist wohl das talkgadget, ein Teil des Services liefert ein 503 (Service not available) und das dazugehörige JavaScript läuft Amok. Und ich dachte, das ist längst schon in meinem Ad-Blocker. Nun ja, jetzt schon…&lt;br /&gt; &lt;strong&gt;[/UPDATE]&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-08T19:01:57+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=618">
    <title>JNBB - Joschs NetBeans Blog: SVNDev: Subversion als Dienst unter Windows</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/08/svndev-subversion-als-dienst-unter-windows/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Ist ja nicht meine Lieblinkstätigkeit, aber muss man ja auch mal gemacht haben. Beim Kunden soll Subversion auf einem Windows 2003 installiert werden. Deutsche Version. Natürlich als Dienst. Also SlikSVN heruntergeladen, installiert und dann wollte ich es als Dienst einrichten. Wieder ein paar graue Haare mehr.&lt;/p&gt; &lt;p&gt;Der sc Befehl (zum Steuern von Diensten von der “DOS”-Konsole) ist da etwas eigenwillig. Erstmal die deutsche Übersetzung
    der Parameter und Optionen in der Hilfe, die man aber in Englisch eintippen muss (help zeigt erstellen, Befehl ist aber create).&lt;/p&gt; &lt;p&gt;Dann die äußerst witzige Erkennung von Optionen. Man muss eine Option mit = versehen. Das ist ja noch ok, aber nach dem Gleichheitszeichen muss ein Leerzeichen sein, um den Wert von der Option zu trennen. Die Fehlermeldung ist da auch etwas undurchsichtig. Nun gut. Als Dienst wird es also so eingerichtet:&lt;/p&gt; &lt;pre&gt;&lt;div style="overflow: auto;
    white-space: nowrap; width: 100%;" class="codecolorer-container dos dawn"&gt;&lt;div class="dos codecolorer"&gt;sc create svnserve binPath= "#absoluter-pfad#\subversion\bin\svnserve.exe --service --root #absoluter-pfad#\repository" DisplayName= "Subversion" depend= tcpip start= auto&lt;br /&gt; &lt;span style="color: #66cc66;"&gt;[&lt;/span&gt;SC&lt;span style="color: #66cc66;"&gt;]&lt;/span&gt; CreateService ERFOLG&lt;/div&gt;&lt;/div&gt; &lt;/pre&gt; &lt;p&gt;Für
    &lt;strong&gt;#absoluter-pfad#&lt;/strong&gt; den Installationsordner und den Pfad zum Repository-Ordner setzen.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt; &lt;div style="float: right; margin-left: 10px;" class="dzone_button"&gt; &lt;/div&gt;</content:encoded>
    <dc:date>2010-12-08T10:36:41+00:00</dc:date>
  </item>
  <item rdf:about="http://www.aljoscha-rittner.de/blog/?p=603">
    <title>JNBB - Joschs NetBeans Blog: News: Tim Peierls ist zurückgetreten</title>
    <link>http://www.aljoscha-rittner.de/blog/archive/2010/12/08/news-tim-peierls-ist-zurueckgetreten/</link>
    <content:encoded>&lt;p&gt;Moin!&lt;/p&gt; &lt;p&gt;Tim Peierls, nun ehemaliges, Mitglied des SE/EE Executive Committee des Java Community Process ist zurückgetreten.&lt;/p&gt; &lt;p&gt;In &lt;a href="http://tembrel.blogspot.com/2010/12/resigned-from-ec.html" title="Resigned from JCP"&gt;seinem Blog begründet&lt;/a&gt; er seinen Schritt:&lt;/p&gt; &lt;blockquote cite="http://tembrel.blogspot.com/2010/12/resigned-from-ec.html"&gt;&lt;p&gt;Today I resigned from the SE/EE Executive Committee of the Java
    Community Process. I lasted about a year before giving up hope that the ECs would ever do anything meaningful.&lt;/p&gt; &lt;p&gt;The last straw for me was Oracle’s failure to address the ambiguous licensing terms in JSRs 336 and 337 (the Java SE7/8 umbrella JSRs) before the EC had to vote on them.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;…&lt;/p&gt; &lt;blockquote cite="http://tembrel.blogspot.com/2010/12/resigned-from-ec.html"&gt;&lt;p&gt;Add to that Oracle’s expressed intent to proceed with the SE7/8
    JSRs whatever the outcome of the vote, and one can only conclude that the SE/EE EC is never going to be more than a rubber stamp for Oracle. (The belligerent tone with which this message was delivered does not come across in the public minutes, but it was loud and clear over my phone connection.)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Wie Oracle reagieren wird ist noch ungewiss. Es ist zu befürchten, dass nur bedauernde Gesten kommen werden. Schließlich haben alle Mitglieder (außer Apache, in Teilen
    Google und Tim Peierls) dem aktuellen &lt;a href="http://www.jroller.com/scolebourne/entry/java_se_7_8_passed" title="Java SE 7 and 8 passed"&gt;JC Prozess zugestimmt&lt;/a&gt;. Zwar mit kleineren Protesten, was die Lizenz betrifft, aber das Ziel ist erreicht.&lt;/p&gt; &lt;p&gt;Es gibt schon Unmut in der Community, dass Eclipse als “gemeinnützige” Foundation nicht mehr getan hat, als nur eine Protestnote abzugeben. Auch das C in JCP für Community wird angezweifelt, wenn fast auschließlich nur
    Aktien-Unternehmen vertreten sind, die Ihr Shareholder Value im Blick haben.&lt;/p&gt; &lt;p&gt;Es ist bedauerlich, dass es bis dato keine einvernehmliche Lösung gibt. Förderlich für Java wird das nicht sein. Schon Sun war der Community nicht kreativ genug, Oracle scheint da auch nicht mehr interessiert zu sein Innovationen aus einem großen Pool schöpfen zu wollen.&lt;/p&gt; &lt;p&gt;Beste Grüße,&lt;br /&gt; Josch.&lt;/p&gt;</content:encoded>
    <dc:date>2010-12-08T08:43:39+00:00</dc:date>
  </item>
</rdf:RDF>

