<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6224595597588014495</id><updated>2012-02-15T14:36:56.753+01:00</updated><category term='install'/><category term='BeansBiding'/><category term='OpenJFX'/><category term='JPA'/><category term='documentation'/><category term='Old School'/><category term='swing'/><category term='Stylesheet'/><category term='Scrolling'/><category term='Early Access'/><category term='JAX-RS'/><category term='applet'/><category term='RIA'/><category term='Magazine'/><category term='jsr295'/><category term='JRuby'/><category term='Vancouver 2010'/><category term='soma'/><category term='Java Web Start'/><category term='JPA 2.0'/><category term='Scroll line'/><category term='Beta'/><category term='RESTFul'/><category term='Mac OS X'/><category term='Flex'/><category term='Slimshady:D5- JavaFX'/><category term='eclipse'/><category term='Custom component'/><category term='mashup'/><category term='Jersey'/><category term='Adobe'/><category term='JavaFX Script'/><category term='JavaFX 2.0'/><category term='Slimshady:D5'/><category term='java'/><category term='CSS'/><category term='Javascript'/><category term='Html 5 demonstration'/><category term='AIR'/><category term='Criteria API'/><category term='evaluateKeyValues'/><category term='Tips'/><category term='KeyFrame'/><category term='RMI'/><category term='new animation api'/><category term='CriteriaBuilder'/><category term='Sun Tech Days'/><category term='Asynchronous Session Beans'/><category term='HTML'/><category term='DisplacementMap'/><category term='JSF'/><category term='EJB 3.1'/><category term='Blog'/><category term='json'/><category term='ide'/><category term='ruby'/><category term='Programmez'/><category term='client'/><category term='timeline'/><category term='FloatMap'/><category term='Google Chrome Experiment'/><category term='UI Component'/><category term='JavaFX 2.0 Beta'/><category term='Reference Guide'/><category term='Ubuntu 9.10'/><category term='référence'/><category term='Oracle'/><category term='Search TextBox'/><category term='Ajax'/><category term='Froyo'/><category term='JavaFX Composer'/><category term='GlassFish V3'/><category term='JFXBuilder'/><category term='GTK+'/><category term='distortion effect'/><category term='JAX-WS'/><category term='Android'/><category term='Animation'/><category term='NetBeans 6.8'/><category term='KeyValue'/><category term='Scroll'/><category term='GlassFish'/><category term='Duke'/><category term='CriteriaQuery'/><category term='Duke Anim'/><category term='netbeans'/><category term='Open Source'/><category term='Petition'/><category term='Android 2.2'/><category term='Sun'/><category term='next release'/><category term='Database'/><category term='javaFX'/><category term='Android 3.0'/><category term='AAC'/><category term='Asynchronous'/><category term='JavaFX 1.3'/><category term='Silverlight'/><title type='text'>Paddy's Weblog</title><subtitle type='html'>Paddy's Techno (Java, Java EE,Java FX, Ruby, Mac OS X, ...) Weblog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>65</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-4712655220159466783</id><published>2011-11-17T22:39:00.000+01:00</published><updated>2011-11-17T22:53:59.499+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UI Component'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom component'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX 2.0'/><title type='text'>Extend an existing UI component in JavaFX 2.0</title><content type='html'>&lt;br /&gt;
&lt;div class="Standard"&gt;
Last year, I coded a
&lt;a href="http://paddyweblog.blogspot.com/2010/05/javafx-custom-component-in-javafx-13.html"&gt;custom component on JavaFX 1.x&lt;/a&gt;, then naturally I wished to rewrite it on JavaFX 2.0.&lt;br/&gt;
To do this, i tried
different solutions,&amp;nbsp; like creating to a
totally new component with &lt;a href="http://drdobbs.com/blogs/java/229400781"&gt;this method&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div class="Standard"&gt;
But, it isn't a great
solution when you want to customize or to enhance an existing component, like I
want to do.&lt;br/&gt;
To rewrite my custom
component, I chose to extend an existing control (&lt;i&gt;TextField&lt;/i&gt; in my case)
and its skin, because you cannot add content directly in the control but you
can do that in its skin.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-mo-1Udj3Dn8/TsV75LdQeWI/AAAAAAAAAK8/IMwa_ObM9G8/s1600/extend-ui-control.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://3.bp.blogspot.com/-mo-1Udj3Dn8/TsV75LdQeWI/AAAAAAAAAK8/IMwa_ObM9G8/s320/extend-ui-control.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;

&lt;div class="Standard"&gt;
&lt;u&gt;&lt;span style="color: #333333; mso-ansi-language: EN-US;"&gt;Description
of the implementation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
My control's class ( &lt;i&gt;SearchTextBox&lt;/i&gt;
) extends the TextField's control and implements my SearchTextBox events (&lt;i&gt;crossButtonOnMouseClicked&lt;/i&gt;
&amp;amp; &lt;i&gt;searchEvent&lt;/i&gt;).&lt;o:p&gt;&lt;/o:p&gt;&lt;br/&gt;
And my skin's class ( &lt;i&gt;SearchTextBoxSkin&lt;/i&gt;
) extends &lt;i&gt;TextFieldSkin&lt;/i&gt; to add the reset button in the original
TextField.&lt;o:p&gt;&lt;/o:p&gt;&lt;br/&gt;
I also created a new
EventType ( &lt;i&gt;SearchTextBoxEvent&lt;/i&gt; ) to manage the &lt;i&gt;searchEvent&lt;/i&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;u&gt;The component code&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/div&gt;&lt;br/&gt;
&lt;div class="Standard"&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.character {color: #ce7b00}
.keyword-directive {color: #0000e6}
--&gt;
&lt;/style&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;SearchTextBox.java&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="keyword-directive"&gt;package&lt;/span&gt; com.paddyweblog.control;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.event.EventHandler;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.control.TextField;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.input.*;

&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; SearchTextBox &lt;span class="keyword-directive"&gt;extends&lt;/span&gt; TextField{
    
    SearchTextBoxSkin searchTextBoxSkin = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; SearchTextBoxSkin(&lt;span class="keyword-directive"&gt;this&lt;/span&gt;);
    
    EventHandler searchEventHandler = &lt;span class="keyword-directive"&gt;null&lt;/span&gt;;
    
    EventHandler crossButtonEventHandler = &lt;span class="keyword-directive"&gt;null&lt;/span&gt;;
    
    SearchTextBox searchTextBox = &lt;span class="keyword-directive"&gt;this&lt;/span&gt;;
        
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; SearchTextBox(){
        &lt;span class="keyword-directive"&gt;super&lt;/span&gt;();
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.setSkin(searchTextBoxSkin); 
        
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.setOnKeyReleased(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; EventHandler&amp;lt;KeyEvent&amp;gt;(){        
            
            &lt;span class="keyword-directive"&gt;final&lt;/span&gt; KeyCombination combo = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; KeyCodeCombination(KeyCode.TRACK_NEXT);

            @Override
            &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; handle(KeyEvent t) {
                
                    t.consume();
        
                    SearchTextBoxEvent e = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; SearchTextBoxEvent(searchTextBox.getText()+t.getCharacter());
    
                    searchEventHandler.handle(e);
            }
            
        });     
        
        searchTextBoxSkin.crossButton.setOnMouseClicked(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; EventHandler&amp;lt;MouseEvent&amp;gt;() {

            @Override
            &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; handle(MouseEvent t) {
                    searchTextBox.setText(&lt;span class="character"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);
                    &lt;span class="keyword-directive"&gt;if&lt;/span&gt; (crossButtonEventHandler!=&lt;span class="keyword-directive"&gt;null&lt;/span&gt;){
                        crossButtonEventHandler.handle(t);   
                    }
            }
            
        });
    }  
    
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; crossButtonOnMouseClicked(EventHandler eventHandler){
        crossButtonEventHandler = eventHandler;
    }
    
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; searchEvent(EventHandler eventHandler){
        searchEventHandler = eventHandler;
    }   
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;SearchTextBoxSkin.java&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="keyword-directive"&gt;package&lt;/span&gt; com.paddyweblog.control;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; com.sun.javafx.scene.control.skin.TextFieldSkin;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.beans.binding.DoubleBinding;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.geometry.Insets;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.geometry.Pos;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.Group;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.paint.Color;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.shape.Circle;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.shape.Rectangle;


&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; SearchTextBoxSkin &lt;span class="keyword-directive"&gt;extends&lt;/span&gt; TextFieldSkin{
    
    SearchTextBox searchTextBox;
    
    Group crossButton = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Group();
    
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; SearchTextBoxSkin(&lt;span class="keyword-directive"&gt;final&lt;/span&gt; SearchTextBox searchTextBox){
     
        &lt;span class="keyword-directive"&gt;super&lt;/span&gt;(searchTextBox);
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.searchTextBox = searchTextBox;
        
        crossButton.setFocusTraversable(&lt;span class="keyword-directive"&gt;false&lt;/span&gt;);
               
        DoubleBinding crossWidth = searchTextBox.heightProperty().multiply(0.45);
        DoubleBinding crossHeight = searchTextBox.heightProperty().multiply(0.05);
                
        Circle circle = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Circle();
        circle.setFill(Color.GRAY);       
        circle.radiusProperty().bind(searchTextBox.heightProperty().multiply(0.325));
        circle.setFocusTraversable(&lt;span class="keyword-directive"&gt;false&lt;/span&gt;);
        
        Rectangle rect1 = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Rectangle();
        rect1.widthProperty().bind(crossWidth);
        rect1.heightProperty().bind(crossHeight);
        rect1.setFill(Color.WHITE);
        rect1.setRotate(45);
        rect1.translateXProperty().bind(crossWidth.divide(2).negate());
        rect1.translateYProperty().bind(crossHeight.divide(2).negate());
        rect1.setFocusTraversable(&lt;span class="keyword-directive"&gt;false&lt;/span&gt;);
        
        Rectangle rect2 = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Rectangle();
        rect2.widthProperty().bind(crossWidth);
        rect2.heightProperty().bind(crossHeight);
        rect2.setFill(Color.WHITE);
        rect2.setRotate(-45);
        rect2.translateXProperty().bind(crossWidth.divide(2).negate());
        rect2.translateYProperty().bind(crossHeight.divide(2).negate());
        rect2.setFocusTraversable(&lt;span class="keyword-directive"&gt;false&lt;/span&gt;);
        
        crossButton.getChildren().add(circle);
        crossButton.getChildren().add(rect1);
        crossButton.getChildren().add(rect2);
        
        crossButton.translateXProperty().bind(searchTextBox.widthProperty().subtract(searchTextBox.heightProperty()));        
        
        crossButton.visibleProperty().bind(searchTextBox.textProperty().greaterThan(&lt;span class="character"&gt;&amp;quot;&amp;quot;&lt;/span&gt;));
                        
        getChildren().add(crossButton);
        SearchTextBoxSkin.setAlignment(crossButton,Pos.CENTER_LEFT);
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.setPadding(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Insets(3,17,3,3));
    }
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;SearchTextBoxEvent.java&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="keyword-directive"&gt;package&lt;/span&gt; com.paddyweblog.control;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.event.Event;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.event.EventType;

&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; SearchTextBoxEvent &lt;span class="keyword-directive"&gt;extends&lt;/span&gt; Event {
    
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;static&lt;/span&gt; &lt;span class="keyword-directive"&gt;final&lt;/span&gt; EventType&amp;lt;SearchTextBoxEvent&amp;gt; SEARCHTEXTBOXEVENT = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; EventType(Event.ANY, &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;SEARCHTEXTBOXEVENT&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
    
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; SearchTextBoxEvent(String text){
        &lt;span class="keyword-directive"&gt;super&lt;/span&gt;(SEARCHTEXTBOXEVENT);
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.text = text;
    }
    
    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; String text;

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; String getText() {
        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; text;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; setText(String text) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.text = text;
    }   
    
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;u&gt;The Application
code, to test the SearchTextBox component&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;SearchTextBoxControl.java&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="keyword-directive"&gt;package&lt;/span&gt; searchtextboxcontrol;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; com.paddyweblog.control.SearchTextBox;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; com.paddyweblog.control.SearchTextBoxEvent;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.application.Application;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.event.ActionEvent;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.event.EventHandler;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.Group;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.control.Button;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.input.MouseEvent;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.stage.Stage;

&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; SearchTextBoxControl &lt;span class="keyword-directive"&gt;extends&lt;/span&gt; Application {

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;static&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; main(String[] args) {
        Application.launch(args);
    }
    
    @Override
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; start(Stage primaryStage) {
        primaryStage.setTitle(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Test SearchTextBox control&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        Group root = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Group();
        Scene scene = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Scene(root, 300, 250);
        Button btn = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Button();
        btn.setLayoutX(10);
        btn.setLayoutY(100);
        btn.setText(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;just a button to change focus&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        btn.setOnAction(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; EventHandler&amp;lt;ActionEvent&amp;gt;() {

            &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; handle(ActionEvent event) {
                System.out.println(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;just a button to change focus&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
            }
        });
        root.getChildren().add(btn);
        
        SearchTextBox stb = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; SearchTextBox();

        stb.setLayoutX(10);
        stb.setLayoutY(50);
        stb.setPrefWidth(150);
        stb.crossButtonOnMouseClicked(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; EventHandler&amp;lt;MouseEvent&amp;gt;(){

            @Override
            &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; handle(MouseEvent t) {
               System.out.println(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;CrossButtonOnMouseClicked&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
            }
            
        });
        
        stb.searchEvent(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; EventHandler&amp;lt;SearchTextBoxEvent&amp;gt;(){
    
            &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; handle(SearchTextBoxEvent t) {
                
                System.out.println(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;searchEventHandler : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;+t.getText());
            }
            
        });                
        
        root.getChildren().add(stb);         
        
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
&lt;b&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/2011/november/SearchTextBoxControl.zip"&gt;Get the NetBeans project&lt;/a&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="Standard"&gt;
Note: You probably
should to change the Java Platform from the projet properties&amp;gt;librairies (to
choose your JavaFX 2.0 Platform) to run the project in NetBeans&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-4712655220159466783?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/4712655220159466783/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=4712655220159466783' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4712655220159466783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4712655220159466783'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2011/11/extend-existing-ui-component-in-javafx.html' title='Extend an existing UI component in JavaFX 2.0'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-mo-1Udj3Dn8/TsV75LdQeWI/AAAAAAAAAK8/IMwa_ObM9G8/s72-c/extend-ui-control.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-7829129665992096700</id><published>2011-08-04T21:03:00.003+01:00</published><updated>2011-08-05T19:39:05.556+01:00</updated><title type='text'>A very simple example using FXML (JavaFX 2.0 b37)</title><content type='html'>&lt;b&gt;update August 05, 2011: cleaner code and runs in b38.&lt;/b&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;This example is a very simple JavaFX application using FXML. It could certainly be improved, but it's just enough to begin to play.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-_61ocIM3w_U/Tjr23npqKfI/AAAAAAAAAKU/IE3zs-acVVU/s1600/Fxml-august2011.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://3.bp.blogspot.com/-_61ocIM3w_U/Tjr23npqKfI/AAAAAAAAAKU/IE3zs-acVVU/s320/Fxml-august2011.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;The application is made up of 3 files, which are:&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-left: 18.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-ansi-language: EN-GB; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;The FXML file&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;style type="text/css"&gt;&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.xml-attribute {color: #009900}
.xml-value {color: #ce7b00}
.ST0 {color: #00007c; font-family: Monospaced; font-weight: bold}
.xml-tag {color: #0000e6}
.character {color: #ce7b00}
.keyword-directive {color: #0000e6}
--&gt;&lt;/style&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Screen1.xml&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="ST0"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="ST0"&gt;import&lt;/span&gt; javafx.scene.*?&amp;gt;
&lt;span class="ST0"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="ST0"&gt;import&lt;/span&gt; javafx.scene.control.*?&amp;gt;
&lt;span class="ST0"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="ST0"&gt;import&lt;/span&gt; fxml.MyGroup?&amp;gt; 

&lt;span class="xml-tag"&gt;&amp;lt;MyGroup&lt;/span&gt; &lt;span class="xml-attribute"&gt;xmlns:fx&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;http://javafx.com/fxml&amp;quot;&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;    
    &lt;span class="xml-tag"&gt;&amp;lt;children&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;      
        &lt;span class="xml-tag"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="xml-attribute"&gt;text&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;Click Me!&amp;quot;&lt;/span&gt; &lt;span class="xml-attribute"&gt;onAction&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;#handleButtonAction&amp;quot;&lt;/span&gt; &lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="xml-tag"&gt;&amp;lt;Label&lt;/span&gt;  &lt;span class="xml-attribute"&gt;fx:id&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;label&amp;quot;&lt;/span&gt; &lt;span class="xml-attribute"&gt;translateX&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="xml-attribute"&gt;translateY&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;30&amp;quot;&lt;/span&gt; &lt;span class="xml-attribute"&gt;text&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;  
    &lt;span class="xml-tag"&gt;&amp;lt;/children&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="xml-tag"&gt;&amp;lt;/MyGroup&lt;/span&gt; &lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;    

&lt;/pre&gt;&lt;div class="MsoNormal" style="margin-left: 18.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-ansi-language: EN-GB; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;The Java class which maps the MyGroup's tag in the FXML file and handles the button’s event&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;MyGroup.java&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; fxml;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.net.URL;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.Map;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.event.ActionEvent;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.fxml.Bindable;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.fxml.FXML;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.fxml.Resources;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.Group;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.control.Label;


&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; MyGroup &lt;span class="keyword-directive"&gt;extends&lt;/span&gt; Group &lt;span class="keyword-directive"&gt;implements&lt;/span&gt; Bindable{
    
    @FXML &lt;span class="keyword-directive"&gt;private&lt;/span&gt; Label label;
    
    @FXML &lt;span class="keyword-directive"&gt;private&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; handleButtonAction(ActionEvent event) {
        System.out.println(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;You clicked me!&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        label.setText(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Hello World !&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);        
    }

   &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; initialize(Map&amp;lt;String, Object&amp;gt; namespace, URL location, Resources resources) {
     
    }
}

&lt;/pre&gt;&lt;div class="MsoNormal" style="margin-left: 18.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; mso-ansi-language: EN-GB; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;The main class which loads the FXML file, transforms it to JavaFX object graph and adds it in to the scene of the JavaFX application.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;TestFXML.java&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; fxml;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.io.IOException;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.application.Application;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.fxml.FXMLLoader;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.stage.Stage;


&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; TestFXML &lt;span class="keyword-directive"&gt;extends&lt;/span&gt; Application {

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;static&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; main(String[] args) {
        Application.launch(TestFXML.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;, args);
    }

    @Override
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; start(Stage primaryStage) {
        
        MyGroup myGroup = &lt;span class="keyword-directive"&gt;null&lt;/span&gt;;
        
        &lt;span class="keyword-directive"&gt;try&lt;/span&gt;{
            myGroup = (MyGroup) FXMLLoader.load(TestFXML.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;.getResource(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;fxml/Screen1.xml&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;));
        }&lt;span class="keyword-directive"&gt;catch&lt;/span&gt; (IOException ioe){
            ioe.printStackTrace();
        }

        primaryStage.setTitle(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Test FXML&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        primaryStage.setWidth(320);
        primaryStage.setHeight(200);

        Scene scene = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Scene(myGroup);
        primaryStage.setScene(scene);

        primaryStage.setVisible(&lt;span class="keyword-directive"&gt;true&lt;/span&gt;);
    }
}

&lt;/pre&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/2011/august/FXML-5-08-2011.zip"&gt;Get the NetBeans project&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;u&gt;&lt;span lang="EN-GB"&gt;Note:&lt;/span&gt;&lt;/u&gt;&lt;span lang="EN-GB"&gt; All that I have coded for this small example is based on: &lt;a href="http://fxexperience.com/2011/07/introducing-fxml/"&gt;Introduction FXML&lt;/a&gt; from Jonathan Giles&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/2011/august/FXML.zip"&gt;original project (August 04, 2011)&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="mso-ansi-language: EN-GB;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-7829129665992096700?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/7829129665992096700/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=7829129665992096700' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7829129665992096700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7829129665992096700'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2011/08/very-simple-example-using-fxml-javafx.html' title='A very simple example using FXML (JavaFX 2.0 b37)'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-_61ocIM3w_U/Tjr23npqKfI/AAAAAAAAAKU/IE3zs-acVVU/s72-c/Fxml-august2011.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-5765327622086689550</id><published>2011-07-22T22:09:00.004+01:00</published><updated>2011-07-22T22:50:40.498+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KeyFrame'/><category scheme='http://www.blogger.com/atom/ns#' term='timeline'/><category scheme='http://www.blogger.com/atom/ns#' term='Duke Anim'/><category scheme='http://www.blogger.com/atom/ns#' term='KeyValue'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX 2.0'/><title type='text'>Duke Anim in JavaFX 2.0 (b36)</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: 15px; line-height: 17px;"&gt;This post is just the porting of&lt;a href="http://paddyweblog.blogspot.com/2010/04/duke-anim-in-javafx-13.html"&gt; DukeAnim&lt;/a&gt; in JavaFX 2.0 b36.&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/xcP7ngPMIOM/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xcP7ngPMIOM?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;  &lt;param name="bgcolor" value="#FFFFFF" /&gt;  &lt;embed width="320" height="266"  src="http://www.youtube.com/v/xcP7ngPMIOM?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span lang="EN-US" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: 115%;"&gt;I tried to have the same structure (UI and Model in different classes) that I had for &lt;a href="http://paddyweblog.blogspot.com/2010/04/duke-anim-in-javafx-13.html"&gt;Duke Anim in JavaFX Script&lt;/a&gt;. &lt;br /&gt;
The only true change is in the code of the event &lt;i style="mso-bidi-font-style: normal;"&gt;action&lt;/i&gt; for the KeyFrame.&lt;br /&gt;
The KeyValue is now immutable and the Set of KeyValues in the KeyFrame is also immutable, so I have to create one new KeyFrame with its news KeyValues, in every event &lt;i style="mso-bidi-font-style: normal;"&gt;action&lt;/i&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: 115%;"&gt;. &lt;/span&gt;&lt;br /&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.character {color: #ce7b00}
.keyword-directive {color: #0000e6}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;DukeAnim.java&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; dukeanim;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.animation.Interpolator;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.animation.KeyFrame;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.animation.KeyValue;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.animation.Timeline;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.application.Application;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.beans.property.IntegerProperty;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.builders.GroupBuilder;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.builders.ImageViewBuilder;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.builders.SceneBuilder;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.builders.TimelineBuilder;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.event.ActionEvent;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.event.EventHandler;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.image.Image;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.scene.image.ImageView;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javafx.util.Duration;

&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; DukeAnim &lt;span class="keyword-directive"&gt;extends&lt;/span&gt; Application {
    
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;static&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; main(String[] args) {
        Application.launch(DukeAnim.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;, args);
    }
    
    @Override
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; start(Stage stage) {
        
        DukeAnimModel dukeAnimModel  = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; DukeAnimModel();
        dukeAnimModel.timeline.play();
        
        stage.setTitle(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;DukeAnim JavaFX 2.0(b36)&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;);
        
        ImageView imageView;
        
        Scene scene =  SceneBuilder.create()
            .width(240)
            .height(320)
            .root(GroupBuilder.create()
                .children(
                    imageView = ImageViewBuilder.create()
                        .image(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Image(
                            DukeAnim.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;.getResourceAsStream(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;images/duke.png&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;)
                            )
                         )                        
                    .build()
                )
                .build())
            .build();

        imageView.xProperty().bind(dukeAnimModel.x);
        imageView.yProperty().bind(dukeAnimModel.y); 
                
        stage.setScene(scene);                
        stage.setVisible(&lt;span class="keyword-directive"&gt;true&lt;/span&gt;);       
    }
}

&lt;span class="keyword-directive"&gt;class&lt;/span&gt; DukeAnimModel {

    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; EventHandler action = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; EventHandler&amp;lt;ActionEvent&amp;gt;() {

        &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; handle(ActionEvent t) {
            System.out.println(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;x : &lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt; + x);
            System.out.println(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;y : &lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt; + y);

            &lt;span class="keyword-directive"&gt;int&lt;/span&gt; xTarget = (&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Double(java.lang.Math.random() * 240 + 1)).intValue();
            &lt;span class="keyword-directive"&gt;int&lt;/span&gt; yTarget = (&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Double(java.lang.Math.random() * 240 + 1)).intValue();

            System.out.println(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;xTarget : &lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt; + xTarget);
            System.out.println(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;xTarget : &lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt; + yTarget);

            KeyFrame kf1s = buildKeyFrame(xTarget, yTarget);

            timeline.stop();
            timeline.getKeyFrames().remove(0);
            timeline.getKeyFrames().add(kf1s);
            timeline.play();

        }
    };

    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; KeyFrame buildKeyFrame(&lt;span class="keyword-directive"&gt;int&lt;/span&gt; xTarget, &lt;span class="keyword-directive"&gt;int&lt;/span&gt; yTarget) {

        Duration t1 = Duration.valueOf(1000);
        KeyValue kvx1s = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; KeyValue(x, xTarget, Interpolator.SPLINE(0, 0.5, 0.5, 1));
        KeyValue kvy1s = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; KeyValue(y, yTarget, Interpolator.SPLINE(0, 0.5, 0.5, 1));
        KeyFrame kf1s = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; KeyFrame(t1, action, kvx1s, kvy1s);

        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; kf1s;
    }
    
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; IntegerProperty x = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; IntegerProperty(0);
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; IntegerProperty y = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; IntegerProperty(0); 
   
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Timeline timeline = TimelineBuilder.create()
            .autoReverse(&lt;span class="keyword-directive"&gt;true&lt;/span&gt;)
            .cycleCount(Timeline.INDEFINITE)
            .keyFrames(               
                buildKeyFrame(0,0)
                )
            .build();      
     
}
&lt;/pre&gt;&lt;span lang="EN-US" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: 115%;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: 115%;"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/2011/dukanimjavafx20b36/DukeAnimJavaFX2.0-b36.zip"&gt;Get the NetBeans project&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: 115%;"&gt; …&lt;br /&gt;
Build it and run it!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-5765327622086689550?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/5765327622086689550/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=5765327622086689550' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/5765327622086689550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/5765327622086689550'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2011/07/duke-anim-in-javafx-20-b34.html' title='Duke Anim in JavaFX 2.0 (b36)'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-5341263448891641016</id><published>2011-06-22T21:34:00.000+01:00</published><updated>2011-06-22T21:34:41.620+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Animation'/><category scheme='http://www.blogger.com/atom/ns#' term='new animation api'/><title type='text'>Droid Anim – Android 3.0</title><content type='html'>When I wanted to try JavaFX 1.x and more particularly the animations, I wrote &lt;a href="http://paddyweblog.blogspot.com/2009/09/duke-anim-javafx.html"&gt;Duke Anim&lt;/a&gt;, and &lt;a href="http://paddyweblog.blogspot.com/2010/04/duke-anim-in-javafx-13.html"&gt;Duke Anim in JavaFX 1.3&lt;/a&gt;.&lt;br /&gt;
So when I wanted to try the new animation API in Android 3.0, I wrote Droid Anim.&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman', serif;"&gt;&lt;div class="MsoNormal" style="line-height: 18px;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US;"&gt; &lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; line-height: 18px; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/YMpbAfAX1ds/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YMpbAfAX1ds?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/YMpbAfAX1ds?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;This little application is pretty simple and shows how to use some part of the new animation API in Android 3.0 &lt;br /&gt;
And how to launch the animation and get the width and the height of the View, just after the View becomes visible, by using the View.post method to add an action in the UI message queue and.&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.character {color: #ce7b00}
.keyword-directive {color: #0000e6}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Anim.java&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; com.blogspot.paddywebog;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.Random;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; android.animation.Animator;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; android.animation.ObjectAnimator;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; android.animation.ValueAnimator;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; android.app.Activity;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; android.graphics.Bitmap;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; android.graphics.BitmapFactory;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; android.os.Bundle;
&lt;span class="keyword-directive"&gt;im&lt;/span&gt;&lt;span class="keyword-directive"&gt;port&lt;/span&gt; android.view.LayoutInflater;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; android.view.View;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; android.view.animation.AccelerateDecelerateInterpolator;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; android.widget.ImageView;
&lt;span class="keyword-directive"&gt;impor&lt;/span&gt;&lt;span class="keyword-directive"&gt;t&lt;/span&gt; android.widget.LinearLayout;

&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; Anim &lt;span class="keyword-directive"&gt;extends&lt;/span&gt; Activity {

    ObjectAnimator xAnim = &lt;span class="keyword-directive"&gt;null&lt;/span&gt;;
    ObjectAnimator yAnim = &lt;span class="keyword-directive"&gt;null&lt;/span&gt;;

    @Override
    &lt;span class="keyword-directive"&gt;publ&lt;/span&gt;&lt;span class="keyword-directive"&gt;ic&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; onCreate(Bundle savedInstanceState) {

        &lt;span class="keyword-directive"&gt;super&lt;/span&gt;.onCreate(savedInstanceState);

        LayoutInflater li = getLayoutInflater();
        View v = li.inflate(R.layout.main, &lt;span class="keyword-directive"&gt;null&lt;/span&gt;);
        setContentView(v);

        v.post(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Runnable() {

            &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; run() {

                ImageView img = (ImageView) findViewById(R.id.imageView1);

                Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.android);

                img.setImageBitmap(bMap);

                Point p = generateNextPoint();

                xAnim = ObjectAnimator.ofFloat(img, &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;translationX&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, 0.f, p.getX());
                xAnim.setDuration(3000);
                xAnim.setInterpolator(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; AccelerateDecelerateInterpolator());
                xAnim.setRepeatCount(ValueAnimator.INFINITE);

                yAnim = ObjectAnimator.ofFloat(img, &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;translationY&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, 0.f, p.getY());
                yAnim.setDuration(3000);
                yAnim.setInterpolator(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; AccelerateDecelerateInterpolator());
                yAnim.setRepeatCount(ValueAnimator.INFINITE);

                xAnim.addListener(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Animator.AnimatorListener() {

                    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; onAnimationStart(Animator animation) {
                    }

                    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; onAnimationRepeat(Animator animation) {

                        Point p = generateNextPoint();

                        Float x = (Float) xAnim.getAnimatedValue();
                        xAnim.setFloatValues(x, p.getX());

                        Float y = (Float) yAnim.getAnimatedValue();
                        yAnim.setFloatValues(y, p.getY());
                    }

                    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; onAnimationCancel(Animator animation) {
                    }

                    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; onAnimationEnd(Animator animation) {
                    }
                });

                xAnim.start();

                yAnim.start();
            }
        });
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Point generateNextPoint() {

        Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.android);

        LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout1);
        &lt;span class="keyword-directive"&gt;int&lt;/span&gt; lWidth = layout.getWidth();
        &lt;span class="keyword-directive"&gt;int&lt;/span&gt; lHeight = layout.getHeight();

        &lt;span class="keyword-directive"&gt;int&lt;/span&gt; width = lWidth - bMap.getWidth();
        &lt;span class="keyword-directive"&gt;int&lt;/span&gt; height = lHeight - bMap.getHeight();

        Random generator = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Random();

        Float xTarget = (generator.nextFloat() * width + 1);
        Float yTarget = (generator.nextFloat() * height + 1);

        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Point(xTarget, yTarget);
    }
}

&lt;span class="keyword-directive"&gt;class&lt;/span&gt; Point {

    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; Float x;
    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; Float y;

    Point(Float x, Float y) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.x = x;
        &lt;span class="keyword-directive"&gt;thi&lt;/span&gt;&lt;span class="keyword-directive"&gt;s&lt;/span&gt;.y = y;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Float getX() {
        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; x;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; setX(Float x) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.x = x;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Float getY() {
        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; y;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; setY(Float y) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.y = y;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; String toString() {
        StringBuilder sb = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; StringBuilder();

        sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;x = &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        sb.append(x);
        sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt; ; y = &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        sb.append(y);

        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; sb.toString();
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;a href="https://github.com/patrickchampion/DroidAnim"&gt; The source code, usable with eclipse, is available on github&lt;/a&gt;.&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-5341263448891641016?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/5341263448891641016/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=5341263448891641016' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/5341263448891641016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/5341263448891641016'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2011/06/droid-anim-android-30.html' title='Droid Anim – Android 3.0'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-1722220568087530451</id><published>2011-05-26T17:51:00.002+01:00</published><updated>2011-05-27T17:46:57.151+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX 2.0 Beta'/><title type='text'>JavaFX 2.0 Beta is there!</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;JavaFX 2.0 Beta has been released, but only for Windows* :( &lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://www.oracle.com/technetwork/java/javafx/overview/index.html"&gt;http://www.oracle.com/technetwork/java/javafx/overview/index.html&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;For download it:&lt;br /&gt;
&lt;span lang="EN-US"&gt;&lt;a href="http://www.oracle.com/technetwork/java/javafx/downloads/index-jsp-136193.html"&gt;http://www.oracle.com/technetwork/java/javafx/downloads/index-jsp-136193.html&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;*&lt;u&gt;Update 9 may 2011&lt;/u&gt;: JavaFX will be cross platform - Richard Bair&lt;br /&gt;
&lt;/span&gt;&lt;a href="http://fxexperience.com/2011/05/is-javafx-2-0-cross-platform/"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;http://fxexperience.com/2011/05/is-javafx-2-0-cross-platform/&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-1722220568087530451?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/1722220568087530451/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=1722220568087530451' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1722220568087530451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1722220568087530451'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2011/05/javafx-20-beta-is-there.html' title='JavaFX 2.0 Beta is there!'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-7083634649063738021</id><published>2011-05-26T10:22:00.000+01:00</published><updated>2011-05-26T10:22:00.150+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX 2.0 Beta'/><title type='text'>The documentation of the JavaFX 2.0 Beta is there</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Even if JavaFX 2.0 Beta isn’t out yet, the documentation is already there&lt;br /&gt;
&lt;/span&gt;&lt;a href="http://download.oracle.com/javafx/index.html"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;http://download.oracle.com/javafx/index.html&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-7083634649063738021?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/7083634649063738021/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=7083634649063738021' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7083634649063738021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7083634649063738021'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2011/05/documentation-of-javafx-20-beta-is.html' title='The documentation of the JavaFX 2.0 Beta is there'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-8177701258214583805</id><published>2011-02-09T22:24:00.006+01:00</published><updated>2011-02-09T22:36:21.548+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Beta'/><category scheme='http://www.blogger.com/atom/ns#' term='Early Access'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX 2.0'/><title type='text'>JavaFX 2.0 Early Access and Beta Program</title><content type='html'>&lt;div lang="en-US" style="margin-bottom: 0cm;"&gt;JavaFX 2.0 Early Access is available for the JavaFX Partners, the JUG Leaders, and the Java Champions.  &lt;/div&gt;&lt;div lang="en-US" style="margin-bottom: 0cm;"&gt;I'm not a JavaFX Partner, nor a JUG Leader or a Java Champion (even with my last name ;) ), but in the &lt;a href="http://www.oracle.com/dm/11q1field/javafx_beta_en.html"&gt;form to sign up to participate in the Early Access and Beta program&lt;/a&gt; there is an item "Other".&lt;/div&gt;&lt;div lang="en-US" style="margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span lang="en-US"&gt;So, because i'm a JavaFX enthusiast&lt;/span&gt;&lt;span style="color: #333333;"&gt;&lt;span style="font-family: 'Times New Roman', serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;span lang="en-US"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-US"&gt;I signed up as "Other" …&lt;/span&gt;&lt;/div&gt;&lt;div lang="en-US" style="margin-bottom: 0cm;"&gt;And may be, with a little luck, I could have an access to the Early Access and Beta Program !&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div lang="en-US" style="margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_rpz_ucpdDqg/TVMCItbI71I/AAAAAAAAAJc/PkM-ckX91_s/s1600/JavaFX+2.0+EA+and+Beta.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://4.bp.blogspot.com/_rpz_ucpdDqg/TVMCItbI71I/AAAAAAAAAJc/PkM-ckX91_s/s320/JavaFX+2.0+EA+and+Beta.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div lang="en-US" style="margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-8177701258214583805?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/8177701258214583805/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=8177701258214583805' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8177701258214583805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8177701258214583805'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2011/02/javafx-20-early-access-and-beta-program.html' title='JavaFX 2.0 Early Access and Beta Program'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_rpz_ucpdDqg/TVMCItbI71I/AAAAAAAAAJc/PkM-ckX91_s/s72-c/JavaFX+2.0+EA+and+Beta.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-8552064692391027797</id><published>2010-12-12T22:41:00.004+01:00</published><updated>2010-12-12T23:44:55.745+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='Froyo'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Android 2.2'/><title type='text'>Some tips for newbies developers on Android 2.2 (like me)</title><content type='html'>&lt;div style="margin-bottom: 0cm;"&gt;The tips are :&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;Know the devices which are connected&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;Deploy your application on real devices&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;Deploy your application on SD Card&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;Know the location (internal or SD Card) of your application and move  it or stop it&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;u&gt;&lt;b&gt;&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;u&gt;&lt;b&gt;Know the devices which are connected&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;On your computer, open the   terminal (command prompt on windows) and launch the command:&lt;br /&gt;
&lt;i&gt;android-sdk&lt;/i&gt;/tools/adb devices&lt;/li&gt;
&lt;/ul&gt;&lt;u&gt;&lt;b&gt;Deploy your application on real devices&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Stop your Android emulator&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Connect your Android device to   your computer with an USB cable&lt;br /&gt;
(on Windows, may be you should   install &lt;a href="http://developer.android.com/sdk/win-usb.html"&gt;USB driver for adb&lt;/a&gt;. Me, I use a Mac ;) )&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;On your Android device, enable   USB debugging&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;Settings&amp;gt;Applications&amp;gt;Development&amp;gt;USB   debugging&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;On your computer, open the   terminal (command prompt on windows) and launch the command:&lt;br /&gt;
&lt;i&gt;android-sdk&lt;/i&gt;/tools/adb install   &lt;i&gt;path&lt;/i&gt;/&lt;i&gt;file.apk&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
Where &lt;i&gt;path&lt;/i&gt; is the path   of your application packaged in APK and &lt;i&gt;file&lt;/i&gt; is the name of   your APK file.&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Your application is installed!&lt;/li&gt;
&lt;/ul&gt;&lt;u&gt;&lt;b&gt;Deploy your application on SD Card&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;The procedure to deploy your application on SD Card, instead of  Internal memory, is pretty similar to the procedure above.&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;You  have just to  :&lt;/div&gt;&lt;ol&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;add the &lt;i&gt;android:installLocation&lt;/i&gt; attribute with the value    &lt;i&gt;auto&lt;/i&gt; in the AndroidManifest.xml file.&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: teal;"&gt;&lt;span style="font-family: Monaco, monospace;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #3f7f7f;"&gt;&lt;span style="font-family: Monaco, monospace;"&gt;manifest&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Monaco, monospace;"&gt;    &lt;/span&gt;&lt;span style="color: #7f007f;"&gt;&lt;span style="font-family: Monaco, monospace;"&gt;xmlns:android&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: Monaco, monospace;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2a00ff;"&gt;&lt;span style="font-family: Monaco, monospace;"&gt;&lt;i&gt;"http://schemas.android.com/apk/res/android"&lt;br /&gt;
&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #7f007f;"&gt;&lt;span style="font-family: Monaco, monospace;"&gt;&lt;span style="font-size: x-small;"&gt;android:installLocation&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: Monaco, monospace;"&gt;&lt;span style="font-size: x-small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2a00ff;"&gt;&lt;span style="font-family: Monaco, monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;i&gt;"auto"&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="color: #2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-family: Monaco, monospace; font-size: x-small;"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;&lt;i&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="color: #2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-family: Monaco, monospace; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;For more informations on this attribute, read : &lt;a href="http://developer.android.com/guide/appendix/install-location.html"&gt;&lt;span id="goog_133990556"&gt;&lt;/span&gt;App Install Location&lt;span id="goog_133990557"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ol&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;deploy    your application with the command:&lt;br /&gt;
adb install -s &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;path&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;file.apk&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;    &lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;u&gt;&lt;b&gt;Know the location (internal or SD Card) of your application and move it or stop it&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;&lt;ul&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;Knowing the location of an application is very easy on Android  2.2.&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;On your Android device go to: Manage  applications&lt;/div&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;Settings&amp;gt;Applications&amp;gt;Manage applications&lt;/div&gt;&lt;/ul&gt;&lt;ul&gt;&lt;div style="font-weight: normal; margin-bottom: 0cm; text-decoration: none;"&gt;And  if you select an application, you can move this application (if it's  possible) to the SD Card or to the internal memory of your  device.&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;You can even force stop of this appl&lt;/span&gt;&lt;/span&gt;ication &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-8552064692391027797?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/8552064692391027797/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=8552064692391027797' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8552064692391027797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8552064692391027797'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/12/some-tips-for-newbies-developers-on.html' title='Some tips for newbies developers on Android 2.2 (like me)'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-5079736828318167220</id><published>2010-11-11T01:04:00.008+01:00</published><updated>2010-11-11T01:11:03.002+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='RESTFul'/><title type='text'>RESTful client in JavaScript</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;In the line of my posts regarding consumption of JSON RESTful services in different technologies (&lt;a href="http://paddyweblog.blogspot.com/2010/08/restful-client-in-javafx.html"&gt;JavaFX&lt;/a&gt;, &lt;a href="http://paddyweblog.blogspot.com/2010/10/restful-client-in-java.html"&gt;Java&lt;/a&gt;), I wrote a small client in JavaScript.&lt;br /&gt;
As in my previous posts, I use the RESTful service described in &lt;a href="http://paddyweblog.blogspot.com/2010/07/restful-service-with-jax-rs-and-jpa-2.html"&gt;RESTful service with JAX-RS (and JPA 2 for the access to the data&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_rpz_ucpdDqg/TNsmdzgaQaI/AAAAAAAAAI8/3v-zJXoPgng/s1600/restfulclient-javascript.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_rpz_ucpdDqg/TNsmdzgaQaI/AAAAAAAAAI8/3v-zJXoPgng/s1600/restfulclient-javascript.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;Write a Restful client in JavaScript is relatively easy. &lt;br /&gt;
First you have to use Ajax to call the Restful service&lt;br /&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.sgml-comment {color: #969696}
.argument {color: #009900}
.value {color: #ce7b00}
.tag {color: #0000e6}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;pre&gt;                &lt;span class="tag"&gt;var&lt;/span&gt; req = &lt;span class="tag"&gt;null&lt;/span&gt;;
                        
                &lt;span class="tag"&gt;if&lt;/span&gt; (begining.length==0){
                    document.getElementById(&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;result&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;).innerHTML=&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;;
                    &lt;span class="tag"&gt;return&lt;/span&gt;;
                }
                         
                &lt;span class="tag"&gt;if&lt;/span&gt; (window.XMLHttpRequest){
                    req =&lt;span class="tag"&gt;new&lt;/span&gt; XMLHttpRequest();
                }
                &lt;span class="tag"&gt;else&lt;/span&gt; {
                    req = &lt;span class="tag"&gt;new&lt;/span&gt; ActiveXObject(&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;Microsoft.XMLHTTP&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;);
                }
                  
                &lt;span class="sgml-comment"&gt;// &lt;/span&gt;&lt;span class="sgml-comment"&gt;var&lt;/span&gt; &lt;span class="sgml-comment"&gt;url&lt;/span&gt;&lt;span class="sgml-comment"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="sgml-comment"&gt;http&lt;/span&gt;&lt;span class="sgml-comment"&gt;://&lt;/span&gt;&lt;span class="sgml-comment"&gt;localhost&lt;/span&gt;&lt;span class="sgml-comment"&gt;:8080/&lt;/span&gt;&lt;span class="sgml-comment"&gt;RESTfulServices&lt;/span&gt;&lt;span class="sgml-comment"&gt;/&lt;/span&gt;&lt;span class="sgml-comment"&gt;rs&lt;/span&gt;&lt;span class="sgml-comment"&gt;/&lt;/span&gt;&lt;span class="sgml-comment"&gt;ArtisteNameBeginningBy&lt;/span&gt;&lt;span class="sgml-comment"&gt;/&amp;quot; + &lt;/span&gt;&lt;span class="sgml-comment"&gt;begining&lt;/span&gt;&lt;span class="sgml-comment"&gt;;&lt;/span&gt;
                &lt;span class="tag"&gt;var&lt;/span&gt; url=&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;http://192.168.1.17:8080/RESTfulServices/rs/ArtisteNameBeginningBy/&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt; + begining;
                        
                req.onreadystatechange = &lt;span class="tag"&gt;function&lt;/span&gt; () {
                        
                    &lt;span class="tag"&gt;if&lt;/span&gt; (req.readyState == 4 &amp;amp;&amp;amp; req.status == 200) {

                        &lt;span class="sgml-comment"&gt;// &lt;/span&gt;&lt;span class="sgml-comment"&gt;do&lt;/span&gt; &lt;span class="sgml-comment"&gt;something&lt;/span&gt; &lt;span class="sgml-comment"&gt;with&lt;/span&gt; &lt;span class="sgml-comment"&gt;the&lt;/span&gt; &lt;span class="sgml-comment"&gt;results&lt;/span&gt;

                    } &lt;span class="tag"&gt;else&lt;/span&gt; {
                        &lt;span class="sgml-comment"&gt;// &lt;/span&gt;&lt;span class="sgml-comment"&gt;wait&lt;/span&gt; &lt;span class="sgml-comment"&gt;for&lt;/span&gt; &lt;span class="sgml-comment"&gt;the&lt;/span&gt; &lt;span class="sgml-comment"&gt;call&lt;/span&gt; &lt;span class="sgml-comment"&gt;to&lt;/span&gt; &lt;span class="sgml-comment"&gt;complete&lt;/span&gt;
                    }
                }
                req.open(&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;GET&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;,url,&lt;span class="tag"&gt;true&lt;/span&gt;);
                req.send(&lt;span class="tag"&gt;null&lt;/span&gt;);
            }
&lt;/pre&gt;Then, because JSON is a subset of the object literal notation of JavaScript, you only have to use the eval() function to convert a JSON text to a JavaScript object.&lt;br /&gt;
&lt;pre&gt;&lt;span class="tag"&gt;var&lt;/span&gt; ret = eval (&lt;span class="value"&gt;&amp;#39;&lt;/span&gt;&lt;span class="value"&gt;(&lt;/span&gt;&lt;span class="value"&gt;&amp;#39;&lt;/span&gt;+req.responseText+&lt;span class="value"&gt;&amp;#39;&lt;/span&gt;&lt;span class="value"&gt;)&lt;/span&gt;&lt;span class="value"&gt;&amp;#39;&lt;/span&gt;);&lt;/pre&gt;And finally, do something with the result.&lt;br /&gt;
In my case, the writeResult() function is used to dynamically display the result in a html table.&lt;br /&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;u&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;full source code of the example&lt;br /&gt;
&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;restfulClient.html&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="tag"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;htlm&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="tag"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;head&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="tag"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;script&lt;/span&gt; &lt;span class="argument"&gt;type&lt;/span&gt;&lt;span class="argument"&gt;=&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;
                
            &lt;span class="tag"&gt;function&lt;/span&gt; getArtisteNameBeginningBy(begining){
                        
                &lt;span class="tag"&gt;var&lt;/span&gt; req = &lt;span class="tag"&gt;null&lt;/span&gt;;
                        
                &lt;span class="tag"&gt;if&lt;/span&gt; (begining.length==0){
                    document.getElementById(&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;result&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;).innerHTML=&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;;
                    &lt;span class="tag"&gt;return&lt;/span&gt;;
                }
                         
                &lt;span class="tag"&gt;if&lt;/span&gt; (window.XMLHttpRequest){
                    req =&lt;span class="tag"&gt;new&lt;/span&gt; XMLHttpRequest();
                }
                &lt;span class="tag"&gt;else&lt;/span&gt; {
                    req = &lt;span class="tag"&gt;new&lt;/span&gt; ActiveXObject(&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;Microsoft.XMLHTTP&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;);
                }
                  
                &lt;span class="sgml-comment"&gt;// &lt;/span&gt;&lt;span class="sgml-comment"&gt;var&lt;/span&gt; &lt;span class="sgml-comment"&gt;url&lt;/span&gt;&lt;span class="sgml-comment"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="sgml-comment"&gt;http&lt;/span&gt;&lt;span class="sgml-comment"&gt;://&lt;/span&gt;&lt;span class="sgml-comment"&gt;localhost&lt;/span&gt;&lt;span class="sgml-comment"&gt;:8080/&lt;/span&gt;&lt;span class="sgml-comment"&gt;RESTfulServices&lt;/span&gt;&lt;span class="sgml-comment"&gt;/&lt;/span&gt;&lt;span class="sgml-comment"&gt;rs&lt;/span&gt;&lt;span class="sgml-comment"&gt;/&lt;/span&gt;&lt;span class="sgml-comment"&gt;ArtisteNameBeginningBy&lt;/span&gt;&lt;span class="sgml-comment"&gt;/&amp;quot; + &lt;/span&gt;&lt;span class="sgml-comment"&gt;begining&lt;/span&gt;&lt;span class="sgml-comment"&gt;;&lt;/span&gt;
                &lt;span class="tag"&gt;var&lt;/span&gt; url=&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;http://192.168.1.17:8080/RESTfulServices/rs/ArtisteNameBeginningBy/&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt; + begining;
                        
                req.onreadystatechange = &lt;span class="tag"&gt;function&lt;/span&gt; () {
                        
                    &lt;span class="tag"&gt;if&lt;/span&gt; (req.readyState == 4 &amp;amp;&amp;amp; req.status == 200) {

                        &lt;span class="tag"&gt;var&lt;/span&gt; ret = eval (&lt;span class="value"&gt;&amp;#39;&lt;/span&gt;&lt;span class="value"&gt;(&lt;/span&gt;&lt;span class="value"&gt;&amp;#39;&lt;/span&gt;+req.responseText+&lt;span class="value"&gt;&amp;#39;&lt;/span&gt;&lt;span class="value"&gt;)&lt;/span&gt;&lt;span class="value"&gt;&amp;#39;&lt;/span&gt;);
                        
                        writeResult(ret);

                    } &lt;span class="tag"&gt;else&lt;/span&gt; {
                        &lt;span class="sgml-comment"&gt;// &lt;/span&gt;&lt;span class="sgml-comment"&gt;wait&lt;/span&gt; &lt;span class="sgml-comment"&gt;for&lt;/span&gt; &lt;span class="sgml-comment"&gt;the&lt;/span&gt; &lt;span class="sgml-comment"&gt;call&lt;/span&gt; &lt;span class="sgml-comment"&gt;to&lt;/span&gt; &lt;span class="sgml-comment"&gt;complete&lt;/span&gt;
                    }
                }
                req.open(&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;GET&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;,url,&lt;span class="tag"&gt;true&lt;/span&gt;);
                req.send(&lt;span class="tag"&gt;null&lt;/span&gt;);
            }

            &lt;span class="tag"&gt;function&lt;/span&gt; writeResult(ret){

                &lt;span class="tag"&gt;var&lt;/span&gt; tableRes = document.getElementById(&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;tableRes&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;);
                &lt;span class="tag"&gt;if&lt;/span&gt; (tableRes!=&lt;span class="tag"&gt;null&lt;/span&gt;){
                    document.getElementById(&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;result&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;).removeChild(tableRes);
                }

                &lt;span class="tag"&gt;if&lt;/span&gt; (ret!=&lt;span class="tag"&gt;null&lt;/span&gt;){

                    &lt;span class="tag"&gt;var&lt;/span&gt; table = document.createElement(&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;table&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;);
                    table.border = 1;
                    table.id = &lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;tableRes&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;;

                    &lt;span class="tag"&gt;for&lt;/span&gt; (i=0;i&amp;lt;ret.music.length;i++){

                        &lt;span class="tag"&gt;var&lt;/span&gt; id = ret.music[i].id;
                        &lt;span class="tag"&gt;var&lt;/span&gt; artisteName = ret.music[i].artisteName;
                        &lt;span class="tag"&gt;var&lt;/span&gt; albumTitle = ret.music[i].albumTitle;

                        &lt;span class="tag"&gt;var&lt;/span&gt; row = table.insertRow(i);

                        &lt;span class="tag"&gt;var&lt;/span&gt; cell1 = row.insertCell(0);
                        &lt;span class="tag"&gt;var&lt;/span&gt; valueCell1 = document.createTextNode(id);
                        cell1.appendChild(valueCell1);

                        &lt;span class="tag"&gt;var&lt;/span&gt; cell2 = row.insertCell(1);
                        &lt;span class="tag"&gt;var&lt;/span&gt; valueCell2 = document.createTextNode(artisteName);
                        cell2.appendChild(valueCell2);

                        &lt;span class="tag"&gt;var&lt;/span&gt; cell3 = row.insertCell(2);
                        &lt;span class="tag"&gt;var&lt;/span&gt; valueCell3 = document.createTextNode(albumTitle);
                        cell3.appendChild(valueCell3);


                    }

                    document.getElementById(&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="value"&gt;res&lt;/span&gt;&lt;span class="value"&gt;ult&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;).appendChild(table);
                }

            }
        &lt;span class="tag"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;script&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt; 

    &lt;span class="tag"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;head&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="tag"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;body&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="tag"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;input&lt;/span&gt; &lt;span class="argument"&gt;type&lt;/span&gt;&lt;span class="argument"&gt;=&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span class="argument"&gt;id&lt;/span&gt;&lt;span class="argument"&gt;=&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;searchTextBox&lt;span class="value"&gt;&amp;quot;&lt;/span&gt; &lt;span class="argument"&gt;onkey&lt;/span&gt;&lt;span class="argument"&gt;up&lt;/span&gt;&lt;span class="argument"&gt;=&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;getArtisteNameBeginningBy(&lt;span class="tag"&gt;this&lt;/span&gt;.value)&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;&lt;span class="tag"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;input&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="tag"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="tag"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt; &lt;span class="argument"&gt;id&lt;/span&gt;&lt;span class="argument"&gt;=&lt;/span&gt;&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;result&lt;span class="value"&gt;&amp;quot;&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;&lt;span class="tag"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;span&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="tag"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="tag"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;boby&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="tag"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;html&lt;/span&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;

&lt;/pre&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #336699; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US;"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr%20/2010/november/javascriptrestfulclient/RestAjax.zip"&gt;Get the NetBeans project&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-5079736828318167220?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/5079736828318167220/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=5079736828318167220' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/5079736828318167220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/5079736828318167220'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/11/restful-client-in-javascript.html' title='RESTful client in JavaScript'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_rpz_ucpdDqg/TNsmdzgaQaI/AAAAAAAAAI8/3v-zJXoPgng/s72-c/restfulclient-javascript.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-1067655416960738670</id><published>2010-10-10T16:52:00.004+01:00</published><updated>2010-10-10T16:57:26.621+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Jersey'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='RESTFul'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>RESTful client in Java</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Because JavaFX 2.0 will be a Java API, we shall have to use Java (or Groovy, Scala, JRuby,etc ... but this isn't the purpose &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;of this post) instead of JavaFX Script for use it.&lt;br /&gt;
And because, the news UIs creates with JavaFX 2.0 will have to consume RESTtful JSON services, I wrote a small RESTful client in Java.&lt;br /&gt;
To do that, I use the JAXB's implementation for JSON from &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="https://jersey.dev.java.net/"&gt;Jersey&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&amp;nbsp;and for the RESTful service to be consume, the RESTful service wrote in an old post:&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://paddyweblog.blogspot.com/2010/07/restful-service-with-jax-rs-and-jpa-2.html"&gt;RESTful service with JAX-RS (and JPA 2 for the access to the data)&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;If I compare with &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2010/08/restful-client-in-javafx.html"&gt;the client that I had written in JavaFX Script&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;, it's easier to write a RESTFul client in Java/Jersey than in JavaFX Script because we don't have to write a parser (JavaFX' PullParser).&lt;br /&gt;
But, in Java, the beans are more verbose… (getter and setter)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Let's go for the code!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;We have 2 Beans:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;ListMusic, which maps the JSON array which is returned when calling the RESTful service.&lt;/li&gt;
&lt;li&gt;Music, which maps one element of the JSON array&lt;/li&gt;
&lt;/ul&gt;And the RestfulClient wich calls the RESTful service and parses the JSON result with Jersey.&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; &lt;br /&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.ST0 {color: #ce7b00; font-family: Monospaced; font-weight: bold}
.character {color: #ce7b00}
.keyword-directive {color: #0000e6}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;RestfulClient.java&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; restfulclient;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; com.sun.jersey.api.json.JSONJAXBContext;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; com.sun.jersey.api.json.JSONUnmarshaller;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.io.InputStream;
&lt;span class="keyword-directive"&gt;im&lt;/span&gt;&lt;span class="keyword-directive"&gt;port&lt;/span&gt; java.net.HttpURLConnection;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.net.URL;

&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; RestfulClient {

       &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;static&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; main(String[] args) {

        &lt;span class="keyword-directive"&gt;try&lt;/span&gt; {
            URL url = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; URL(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;http://localhost:8080/RESTfulServices/rs/ArtisteNameBeginningBy/Arc&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;GET&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
            connection.connect();

            InputStream responseStream = connection.getInputStream();

            JSONJAXBContext jc = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; JSONJAXBContext(ListMusic.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);
            JSONUnmarshaller u = jc.createJSONUnmarshaller();

            ListMusic m = u.unmarshalFromJSON(responseStream,ListMusic.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);
            connection.disconnect();

            System.out.println(m.getMusic());

        }
        &lt;span class="keyword-directive"&gt;catch&lt;/span&gt;(java.net.MalformedURLException mue){
            mue.printStackTrace();
        }
        &lt;span class="keyword-directive"&gt;catch&lt;/span&gt;(java.io.IOException ioe){
            ioe.printStackTrace();
        }
        &lt;span class="keyword-directive"&gt;catch&lt;/span&gt;(javax.xml.bind.JAXBException jaxbe){
            jaxbe.printStackTrace();
        }
    }
}

&lt;/pre&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;ListMusic.java&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; restfulclient;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.ArrayList;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.List;

&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; ListMusic {

    List&amp;lt;Music&amp;gt; music = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; ArrayList();

    &lt;span class="keyword-directive"&gt;pub&lt;/span&gt;&lt;span class="keyword-directive"&gt;lic&lt;/span&gt; List&amp;lt;Music&amp;gt; getMusic() {
        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; music;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; setMusic(List&amp;lt;Music&amp;gt; music) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.music = music;
    }
    

}

&lt;/pre&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Music.java&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; restfulclient;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.io.Serializable;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; Music &lt;span class="keyword-directive"&gt;implements&lt;/span&gt; Serializable {

    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; Long id;
    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; String artisteName;
    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; String albumTitle;

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Music() {
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; String getAlbumTitle() {
        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; albumTitle;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; setAlbumTitle(String albumTitle) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.albumTitle = albumTitle;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; String getArtisteName() {
        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; artisteName;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; setArtisteName(String artisteName) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.artisteName = artisteName;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Long getId() {
        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; id;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; setId(Long id) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.id = id;
    }

    @Override
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; String toString(){

        StringBuilder sb = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; StringBuilder();
        sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;id : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);sb.append(id);sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt; ; &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artisteName : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);sb.append(artisteName);sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt; ; &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;albumTitle : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);sb.append(albumTitle);
        sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt; &lt;span class="ST0"&gt;\n&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);

        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; sb.toString();
    }

}
&lt;/pre&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US;"&gt;&lt;span style="color: #336699;"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/october/restfulclient/RestfulClient.zip"&gt;Get the NetBeans project&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-1067655416960738670?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/1067655416960738670/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=1067655416960738670' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1067655416960738670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1067655416960738670'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/10/restful-client-in-java.html' title='RESTful client in Java'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-1953090887331933583</id><published>2010-09-23T21:36:00.002+01:00</published><updated>2010-09-24T07:31:46.558+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX 2.0'/><title type='text'>JavaFX 2.0 rebooted, round up of the links</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;The roadmap: &lt;a href="http://javafx.com/roadmap/"&gt;http://javafx.com/roadmap/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt; Richard Blair: &lt;a href="http://fxexperience.com/2010/09/javafx-2-0/"&gt;http://fxexperience.com/2010/09/javafx-2-0/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt; Amy Fowler: &lt;a href="http://amyfowlersblog.wordpress.com/2010/09/21/a-heartfelt-ramble-on-swing-javafx/"&gt;http://amyfowlersblog.wordpress.com/2010/09/21/a-heartfelt-ramble-on-swing-javafx/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt; Osvaldo Pinali Doederlein: &lt;a href="http://weblogs.java.net/blog/opinali/archive/2010/09/23/swing-20-coming"&gt;http://weblogs.java.net/blog/opinali/archive/2010/09/23/swing-20-coming&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt; Stephen Chin&amp;nbsp;: &amp;nbsp;&lt;a href="http://steveonjava.com/javafx-2-0/"&gt;http://steveonjava.com/javafx-2-0/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt; Jonathan Giles&amp;nbsp;:&lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: #666666; font-family: 'Lucida Sans Unicode', sans-serif; font-size: 7.5pt; line-height: 115%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://jonathangiles.net/blog/?p=916"&gt;&lt;span lang="EN-US"&gt;http://jonathangiles.net/blog/?p=916&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;
&lt;br /&gt;
Oracle Press Release: &lt;a href="http://www.oracle.com/us/corporate/press/173728"&gt;http://www.oracle.com/us/corporate/press/173728&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_rpz_ucpdDqg/TJu5X7pWLnI/AAAAAAAAAIc/m0vi1lsJf6Q/javaclientarchitecture.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://lh5.ggpht.com/_rpz_ucpdDqg/TJu5X7pWLnI/AAAAAAAAAIc/m0vi1lsJf6Q/javaclientarchitecture.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-1953090887331933583?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/1953090887331933583/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=1953090887331933583' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1953090887331933583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1953090887331933583'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/09/javafx-20-rebooted-round-up-of-links.html' title='JavaFX 2.0 rebooted, round up of the links'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_rpz_ucpdDqg/TJu5X7pWLnI/AAAAAAAAAIc/m0vi1lsJf6Q/s72-c/javaclientarchitecture.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-1121305248500496753</id><published>2010-09-01T23:47:00.000+01:00</published><updated>2010-09-01T23:47:05.874+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Chrome Experiment'/><category scheme='http://www.blogger.com/atom/ns#' term='Html 5 demonstration'/><title type='text'>Arcade Fire, Html 5, Google Chrome Experiment</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;It’s not because I’m a big fan of &lt;a href="http://www.arcadefire.com/"&gt;Arcade Fire&lt;/a&gt; (Great Show at &lt;a href="http://www.rockenseine.com/en/lineup/"&gt;Rock en Seine&lt;/a&gt;, even under the rain) that I speak you of their last "clip", but I think it's a great demo of what we can make with html 5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;The "clip" of: We used to wait&lt;br /&gt;
&lt;/span&gt;&lt;a href="http://www.thewildernessdowntown.com/"&gt;&lt;span lang="EN-US"&gt;http://www.thewildernessdowntown.com/&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;And the making of &lt;br /&gt;
&lt;/span&gt;&lt;a href="http://www.chromeexperiments.com/arcadefire/"&gt;&lt;span lang="EN-US"&gt;http://www.chromeexperiments.com/arcadefire/&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-1121305248500496753?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/1121305248500496753/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=1121305248500496753' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1121305248500496753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1121305248500496753'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/09/arcade-fire-html-5-google-chrome.html' title='Arcade Fire, Html 5, Google Chrome Experiment'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-5201258765246909165</id><published>2010-08-01T15:41:00.001+01:00</published><updated>2010-08-01T15:44:02.516+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='RESTFul'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>RESTful client in JavaFX</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;In this second part, we are going to create a small application in JavaFX to call the restful service created in the&lt;/span&gt;&lt;span lang="EN-US"&gt; &lt;a href="http://paddyweblog.blogspot.com/2010/07/restful-service-with-jax-rs-and-jpa-2.html"&gt;first part&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;This small application is the same as the one created in an older post : &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2010/03/javafx-and-jpa-20-with-my-custom.html"&gt;JavaFX and JPA 2.0 with my custom component&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;, but instead of call directly the database with the help of an entity, we are going to call the restful service.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_rpz_ucpdDqg/TFV-nggseYI/AAAAAAAAAH8/AKOS6vYVA5k/applicationRestful.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh4.ggpht.com/_rpz_ucpdDqg/TFV-nggseYI/AAAAAAAAAH8/AKOS6vYVA5k/applicationRestful.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;To create this application, we are going to create :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 39.0pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;a Music JavaFX Bean as model&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 39.0pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;a client to the RESTFul services (and its JSON parser) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 39.0pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;an JavaFX User Interface&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;u&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;The model&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;The model is a simple JavaFX Bean which maps one element of the JSON array which is returned when we call the RESTful service&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;An example of the JSON result when you call the service with: &lt;i&gt;Arc&lt;/i&gt; as parameter&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh6.ggpht.com/_rpz_ucpdDqg/TFV-nmqSnMI/AAAAAAAAAIA/Vm8ETXOGa_g/resultjson.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_rpz_ucpdDqg/TFV-nmqSnMI/AAAAAAAAAIA/Vm8ETXOGa_g/resultjson.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;the Music JavaFX Bean &lt;/span&gt;&lt;/div&gt;&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.comment {color: #969696}
.string {color: #ce7b00}
.keyword {color: #0000e6}
.ST0 {color: #0000e6; font-family: Monospaced; font-weight: bold}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-left: 35.45pt;"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Music.fx&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword"&gt;package&lt;/span&gt; model;

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; Music {
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; id: Long;
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; artisteName: String;
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; albumTitle: String;

    &lt;span class="keyword"&gt;overr&lt;/span&gt;&lt;span class="keyword"&gt;ide&lt;/span&gt; &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt; toString():String {
         &lt;span class="ST0"&gt;return&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;id: &lt;/span&gt;{id}&lt;span class="string"&gt; ,artisteName: &lt;/span&gt;{artisteName}&lt;span class="string"&gt; ,albumTitle: &lt;/span&gt;{albumTitle}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
  }
}&lt;/pre&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;u&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;The Client&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Now, let's write the client.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;The client is composed of 2 methods:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 36.0pt; mso-list: l2 level1 lfo3; tab-stops: list 36.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;getArtisteNameBeginningBy&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;, which calls the RESTful service by using the JavaFX's&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://java.sun.com/javafx/1.3/docs/api/javafx.io.http/javafx.io.http.HttpRequest.html"&gt; HttpRequest class&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 36.0pt; mso-list: l2 level1 lfo3; tab-stops: list 36.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;parse&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;, which parses the JSON flux. This method is called by the &lt;i&gt;onInput&lt;/i&gt; callback of the HttpRequest class.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;The parsing, in itself, uses the JavaFX &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://java.sun.com/javafx/1.3/docs/api/javafx.data.pull/javafx.data.pull.PullParser.html"&gt;PullParser&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&amp;nbsp;&lt;/span&gt;to parse the JSON stream and fill the &lt;i&gt;Music&lt;/i&gt; JavaFX Bean, and the array of &lt;i&gt;Music&lt;/i&gt; JavaFX Bean as the result of the &lt;i&gt;parse&lt;/i&gt; method.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 35.45pt;"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;MusicClient.fx&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword"&gt;package&lt;/span&gt; client.rest;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.data.pull.Event;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.data.pull.PullParser;
&lt;span class="keyword"&gt;import&lt;/span&gt; com.sun.javafx.data.pull.impl.StreamException;
&lt;span class="keyword"&gt;import&lt;/span&gt; java.io.InputStream;
&lt;span class="keyword"&gt;import&lt;/span&gt; model.Music;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.io.http.HttpRequest;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.io.http.URLConverter;

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; MusicClient {

 &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; musics:Music[];

 &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt; getArtisteNameBeginningBy(begining :String) {

     println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;begining &lt;/span&gt;{begining}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);

     &lt;span class="keyword"&gt;var&lt;/span&gt; urlConverter = URLConverter{encodeSpaceAsPercent:&lt;span class="ST0"&gt;true&lt;/span&gt;};
     &lt;span class="keyword"&gt;var&lt;/span&gt; beginings = urlConverter.encodeString(begining);

    &lt;span class="keyword"&gt;var&lt;/span&gt; request: HttpRequest = HttpRequest {

        location: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;http&lt;/span&gt;&lt;span class="string"&gt;://localhost:8080/RESTfulServices/rs/ArtisteNameBeginningBy/&lt;/span&gt;{beginings}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
        method: HttpRequest.GET

        onInput: &lt;span class="keyword"&gt;function&lt;/span&gt;(input: java.io.InputStream) {
            &lt;span class="ST0"&gt;try&lt;/span&gt; {
                musics = parse(input);
                &lt;span class="comment"&gt;//println(&amp;quot;musics {musics}&amp;quot;);&lt;/span&gt;
            } &lt;span class="ST0"&gt;finally&lt;/span&gt; {
                input.close();
            }
        }
    }

    request.start();

}

  &lt;span class="keyword"&gt;function&lt;/span&gt; parse(input: InputStream): Music[] {

    &lt;span class="keyword"&gt;var&lt;/span&gt; musics: Music[];
    &lt;span class="keyword"&gt;var&lt;/span&gt; music: Music;

    &lt;span class="keyword"&gt;d&lt;/span&gt;&lt;span class="keyword"&gt;ef&lt;/span&gt; parser = PullParser {

        documentType:PullParser.JSON
        input: input

        onEvent: &lt;span class="keyword"&gt;function&lt;/span&gt;(event: Event) {

            &lt;span class="ST0"&gt;if&lt;/span&gt; (event.type == PullParser.START_ARRAY_ELEMENT) {
                &lt;span class="ST0"&gt;if&lt;/span&gt;(event.name == &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;music&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;and&lt;/span&gt; event.level == 0) {
                    music = Music { };
                }
            } &lt;span class="ST0"&gt;else&lt;/span&gt;
            &lt;span class="ST0"&gt;if&lt;/span&gt; (event.type == PullParser.END_ARRAY_ELEMENT) {
                &lt;span class="ST0"&gt;if&lt;/span&gt;(event.name == &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;music&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;and&lt;/span&gt; event.level == 0) {
                   &lt;span class="keyword"&gt;insert&lt;/span&gt; music &lt;span class="keyword"&gt;into&lt;/span&gt; musics;
                }
            } &lt;span class="ST0"&gt;else&lt;/span&gt; {
                &lt;span class="ST0"&gt;if&lt;/span&gt;(event.name == &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;id&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;and&lt;/span&gt;
                   event.level == 1 &lt;span class="keyword"&gt;and&lt;/span&gt;
                   event.type == PullParser.TEXT ) {

                    music.id = java.lang.Long.parseLong (event.text);

                } &lt;span class="ST0"&gt;else&lt;/span&gt;
                &lt;span class="ST0"&gt;if&lt;/span&gt;(event.name == &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;artisteName&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;and&lt;/span&gt;
                   event.level == 1 &lt;span class="keyword"&gt;and&lt;/span&gt;
                   event.type == PullParser.TEXT  ) {

                    music.artisteName = event.text;

                } &lt;span class="ST0"&gt;else&lt;/span&gt;
                &lt;span class="ST0"&gt;if&lt;/span&gt;(event.name == &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;albumTitle&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;and&lt;/span&gt;
                   event.level == 1 &lt;span class="keyword"&gt;and&lt;/span&gt;
                   event.type == PullParser.TEXT ) {

                    music.albumTitle = event.text;
                }
            }
        }
    }
    &lt;span class="ST0"&gt;try&lt;/span&gt;{
        parser.parse();
    }&lt;span class="ST0"&gt;catch&lt;/span&gt; (e: StreamException){
       println(e.getMessage())
    }
    &lt;span class="ST0"&gt;return&lt;/span&gt; musics;
  }
}
&lt;/pre&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;u&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;The UI&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;The UI is the same as the UI used in the post: the JavaFX and JPA 2.0 with my custom component[2] , except the calls to the client of the service by the SearchTextBox component.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 35.45pt;"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Main.fx&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword"&gt;package&lt;/span&gt; javafxrestfulclient;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Text;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Font;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.ListView;
&lt;span class="keyword"&gt;import&lt;/span&gt; customcomponent.SearchTextBox;
&lt;span class="keyword"&gt;import&lt;/span&gt; client.rest.MusicClient;

&lt;span class="keyword"&gt;var&lt;/span&gt; mc:MusicClient = MusicClient{};

Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Application title&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    width: 600
    height: 250
    scene: Scene {
        stylesheets : [&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;{__DIR__}&lt;span class="string"&gt;resources/mac.css&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;]
        content: [
            Text {
                font: Font {
                    size: 16
                }
                x: 10
                y: 30
                content: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Search DB&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
            }
            SearchTextBox {
                styleClass : &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;searchTextBox&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                translateX: 10
                translateY: 40
                onResetSearch: &lt;span class="keyword"&gt;function&lt;/span&gt; () {
                   println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;reset !&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                   &lt;span class="keyword"&gt;delete&lt;/span&gt; mc.musics;
                }
                onSearch: &lt;span class="keyword"&gt;function&lt;/span&gt; (s: String) {
                    println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Search of : &lt;/span&gt;{s}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);

                    &lt;span class="keyword"&gt;delete&lt;/span&gt; mc.musics;
                    mc.getArtisteNameBeginningBy(s);
                    
                }
            }

            ListView {
                managed: &lt;span class="ST0"&gt;false&lt;/span&gt;
                layoutY: 75
                width: 575
                height: 100
                items: &lt;span class="keyword"&gt;bind&lt;/span&gt; mc.musics

            }
        ]
    }
}

&lt;/pre&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr//august/javafxClient/JavaFXRestfulClient.zip"&gt;Get the NetBeans project&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-5201258765246909165?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/5201258765246909165/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=5201258765246909165' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/5201258765246909165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/5201258765246909165'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/08/restful-client-in-javafx.html' title='RESTful client in JavaFX'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_rpz_ucpdDqg/TFV-nggseYI/AAAAAAAAAH8/AKOS6vYVA5k/s72-c/applicationRestful.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-1202886332310505349</id><published>2010-07-15T18:31:00.000+01:00</published><updated>2010-07-15T18:31:45.035+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Petition'/><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>Stephen Chin's Petition to Open Source JavaFX</title><content type='html'>If you like JavaFX , go to &amp;nbsp;sign the Stephen Chin’s Petition to Open Source JavaFX !&lt;br /&gt;
&lt;a href="http://steveonjava.com/javafx-petition/"&gt;http://steveonjava.com/javafx-petition/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-1202886332310505349?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/1202886332310505349/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=1202886332310505349' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1202886332310505349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1202886332310505349'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/07/stephen-chins-petition-to-open-source.html' title='Stephen Chin&apos;s Petition to Open Source JavaFX'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-7739901334221829571</id><published>2010-07-04T22:28:00.001+01:00</published><updated>2010-07-04T22:29:00.499+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JPA 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='RESTFul'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-RS'/><title type='text'>RESTful service with JAX-RS (and JPA 2 for the access to the data)</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;This is the first part of two, which have for purpose to create a RESTful service with JAX-RS (part 1) and to access it in JavaFX (part 2)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: 15px;"&gt;In this first part, we will create a RESTful service using JAX-RS and because this service will have&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;an access to a database, we will use JPA 2.0.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;To do that, we are going:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;to      create the database and one table&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;to      create a data source&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;to      create the JPA entity and the persistence.xml&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;and      to create the RESTful service which will call the entity&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;u&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;Create the database and the table&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;for the database and the the table, we'll re-use the derby database and the table created for the post : &lt;a href="http://paddyweblog.blogspot.com/2010/02/examples-using-jpa-20.html"&gt;Examples using JPA 2.0&lt;/a&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;u&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;Create a data source&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l1 level1 lfo2; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;Create      a data source named jdbc/javafxDB and connected to the database in your      application server. &lt;b&gt;&lt;u&gt;&lt;br /&gt;
&lt;/u&gt;&lt;/b&gt;For Glassfish V3, create :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal" style="margin-left: 54.0pt; mso-list: l1 level2 lfo2; tab-stops: list 54.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: OpenSymbol; font-size: 11.0pt; mso-bidi-font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;◦&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;One Connection pools for Derby named JavafxDBPool and with the parameters to access to the database. &lt;span style="background: yellow;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="background: white;"&gt;For the parameters you&lt;/span&gt; should have something like this.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 54.0pt; mso-list: l1 level2 lfo2; tab-stops: list 54.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;&lt;/span&gt;&lt;a href="http://lh5.ggpht.com/_rpz_ucpdDqg/TC5mm_jbzQI/AAAAAAAAAHg/PNOr74-b6v0/Additional%20Properties.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh5.ggpht.com/_rpz_ucpdDqg/TC5mm_jbzQI/AAAAAAAAAHg/PNOr74-b6v0/Additional%20Properties.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 54.0pt; mso-list: l1 level2 lfo2; tab-stops: list 54.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 54.0pt; mso-list: l1 level2 lfo2; tab-stops: list 54.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: OpenSymbol; font-size: 11.0pt; mso-bidi-font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;◦&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;One JDBC Resources with jdbc/javafxDB as JNDI Name and JavafxDBPool as Pool Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;u&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;The Entity and the persistance.xml&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo3; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;The      entity is almost the same one as the entity created for the post :     &lt;a href="http://paddyweblog.blogspot.com/2010/02/examples-using-jpa-20.html"&gt;Examples using JPA 2.0&lt;/a&gt;.&lt;br /&gt;
I just added &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal" style="margin-left: 54.0pt; mso-list: l2 level2 lfo3; tab-stops: list 54.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: OpenSymbol; font-size: 11.0pt; mso-bidi-font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;◦&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;One named query which will be used by the RESTful service &lt;style type="text/css"&gt;
&lt;!-- body {color: #000000; background-color: #ffffff; font-family: Monospaced} pre {color: #000000; background-color: #ffffff; font-family: Monospaced} table {color: #000000; background-color: #e9e8e2; font-family: Monospaced} .ST0 {color: #969696; font-family: Monospaced; font-weight: bold} .comment {color: #969696} .character {color: #ce7b00} .keyword-directive {color: #0000e6} .ST1 {color: #ce7b00; font-family: Monospaced; font-weight: bold} .xml-attribute {color: #009900} .xml-value {color: #ce7b00} .xml-tag {color: #0000e6} --&gt; &lt;/style&gt;&lt;br /&gt;
&lt;pre&gt;@NamedQuery(name = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;findAllAlbumWhereArtisteLike&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;,query=&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;select m from Music m where m.artisteName like :param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 54.0pt; mso-list: l2 level2 lfo3; tab-stops: list 54.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: OpenSymbol; font-size: 11.0pt; mso-bidi-font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;◦&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;And the annotation @XmlRootAnnotation for the JAXB serialization &lt;br /&gt;
&lt;span&gt;&lt;pre&gt;@XmlRootElement
&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; Music &lt;span class="keyword-directive"&gt;implements&lt;/span&gt; Serializable {
&lt;/pre&gt;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Music.java&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;      package&lt;/span&gt; paddy.entities;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.io.Serializable;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.Column;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.Entity;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.GeneratedValue;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.Id;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.NamedQueries;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.NamedQuery;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.xml.bind.annotation.XmlRootElement;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; *&lt;/span&gt;
&lt;span class="comment"&gt; * &lt;/span&gt;&lt;span class="ST0"&gt;@author&lt;/span&gt; &lt;span class="comment"&gt;Patrick&lt;/span&gt;
 &lt;span class="comment"&gt;*/&lt;/span&gt;
@Entity
@NamedQueries({
   @NamedQuery(name = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;findAllAlbum&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, query= &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;select m from Music m&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;),
   @NamedQuery(name = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;findAllAlbumWhereArtisteLike&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;,query=&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;select m from Music m where m.artisteName like :param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)
})

@XmlRootElement
&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; Music &lt;span class="keyword-directive"&gt;implements&lt;/span&gt; Serializable {

    @Id
    @GeneratedValue
    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; Long id;
    @Column(name = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artist_name&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)
    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; String artisteName;
    @Column(name = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;album_title&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)
    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; String albumTitle;

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Music() {
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; String getAlbumTitle() {
        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; albumTitle;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; setAlbumTitle(String albumTitle) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.albumTitle = albumTitle;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; String getArtisteName() {
        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; artisteName;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; setArtisteName(String artisteName) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.artisteName = artisteName;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Long getId() {
        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; id;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; setId(Long id) {
        &lt;span class="keyword-directive"&gt;this&lt;/span&gt;.id = id;
    }

    @Override
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; String toString(){

        StringBuilder sb = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; StringBuilder();
        sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;id : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);sb.append(id);sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt; ; &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artisteName : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);sb.append(artisteName);sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt; ; &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;albumTitle : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);sb.append(albumTitle);
        sb.append(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt; &lt;span class="ST1"&gt;\n&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);

        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; sb.toString();
    }
}
&lt;/pre&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo3; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;The      persistence.xml file is very simple, it contains only:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal" style="margin-left: 54.0pt; mso-list: l2 level2 lfo3; tab-stops: list 54.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: OpenSymbol; font-size: 11.0pt; mso-bidi-font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;◦&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;The name of the data source &lt;br /&gt;
&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;jta-data-source&gt;jdbc/javafxDB&lt;/jta-data-source&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 54.0pt; mso-list: l2 level2 lfo3; tab-stops: list 54.0pt; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: OpenSymbol; font-size: 11.0pt; mso-bidi-font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;◦&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;And the entity managed by the persistence unit.&lt;br /&gt;
&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;class&gt;paddy.entities.Music&lt;/class&gt;&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;persistence.xml&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="ST0"&gt;      &amp;lt;?&lt;/span&gt;&lt;span class="ST0"&gt;xml&lt;/span&gt; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&lt;span class="xml-tag"&gt;&amp;lt;persistence&lt;/span&gt; &lt;span class="xml-attribute"&gt;version&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="xml-attribute"&gt;xmlns&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;http://java.sun.com/xml/ns/persistence&amp;quot;&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="xml-tag"&gt;&amp;lt;persistence-unit&lt;/span&gt; &lt;span class="xml-attribute"&gt;name&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;MusicAndLight&amp;quot;&lt;/span&gt; &lt;span class="xml-attribute"&gt;transaction-&lt;/span&gt;&lt;span class="xml-attribute"&gt;type&lt;/span&gt;=&lt;span class="xml-value"&gt;&amp;quot;JTA&amp;quot;&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="xml-tag"&gt;&amp;lt;provider&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;org.eclipse.persistence.jpa.PersistenceProvider&lt;span class="xml-tag"&gt;&amp;lt;/provider&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="xml-tag"&gt;&amp;lt;jta-data-source&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;jdbc/javafxDB&lt;span class="xml-tag"&gt;&amp;lt;/jta-data-source&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="xml-tag"&gt;&amp;lt;class&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;paddy.entities.Music&lt;span class="xml-tag"&gt;&amp;lt;/class&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="xml-tag"&gt;&amp;lt;/persistence-unit&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="xml-tag"&gt;&amp;lt;/persistence&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;u&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;The RESTful service&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;The service is very simple; it returns a list of all the records from the table where the field artisteName begin by the parameter "beginby".&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div  style="margin-left: 54.0pt"&gt;&lt;span lang="EN-US"  style=" font-size: 11.0pt;"&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;MusicServices.java&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; services.restful;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.List;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.ejb.Stateless;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.EntityManager;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.PersistenceContext;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.Query;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.ws.rs.GET;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.ws.rs.Path;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.ws.rs.PathParam;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.ws.rs.Produces;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; paddy.entities.Music;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; *&lt;/span&gt;
&lt;span class="comment"&gt; * &lt;/span&gt;&lt;span class="ST0"&gt;@author&lt;/span&gt; &lt;span class="comment"&gt;patrick&lt;/span&gt;
 &lt;span class="comment"&gt;*/&lt;/span&gt;

&lt;span class="comment"&gt;// curl http://localhost:8080/RESTfulServices/rs/ArtisteNameBeginni&lt;/span&gt;&lt;span class="comment"&gt;ngBy/Arc&lt;/span&gt;

@Path(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;/ArtisteNameBeginningBy&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)
@Stateless
@Produces (&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;application/json&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)
&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; MusicServices {

    @PersistenceContext(unitName=&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;MusicAndLight&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)
    EntityManager em;

    @GET
    @Path(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;{beginBy}/&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; List&amp;lt;Music&amp;gt; getArtisteNameBeginningBy(@PathParam(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;beginBy&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;) String beginBy){

       System.out.println(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;beginBy : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;+beginBy);

       String param = beginBy+&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;%&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;;
 
       Query  query = em.createNamedQuery(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;findAllAlbumWhereArtisteLike&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
       query.setParameter(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, param);
       List&amp;lt;Music&amp;gt; musicsDB = query.getResultList();

       System.out.println(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;musi&lt;/span&gt;&lt;span class="character"&gt;csDB : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;+musicsDB);

       &lt;span class="keyword-directive"&gt;return&lt;/span&gt; musicsDB;

    }
}
&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;The key points :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l3 level1 lfo4; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;@Path&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh6.ggpht.com/_rpz_ucpdDqg/TC5mm-FUPsI/AAAAAAAAAHc/DdQ4gEqjd5E/%40path.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_rpz_ucpdDqg/TC5mm-FUPsI/AAAAAAAAAHc/DdQ4gEqjd5E/%40path.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l3 level1 lfo4; tab-stops: list 36.0pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: 15px;"&gt;&lt;span style="background: yellow;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: 15px;"&gt;@Produce,      the service produces a JSON output with the help of JAXB&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l3 level1 lfo4; tab-stops: list 36.0pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: 15px;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: 15px;"&gt;@GET,      the service is accessible by the method GET&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l3 level1 lfo4; tab-stops: list 36.0pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: 15px;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: 15px;"&gt;@PersistenceContext,      the entity manager is created and injected by the container&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;u&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;The web.xml&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;And of course you have to configure the Jersey Servlet in the web.xml&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div  style="margin-left: 54.0pt"&gt;&lt;span lang="EN-US"  style=" font-size: 11.0pt;"&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;web.xml&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="xml-tag"&gt;&amp;lt;servlet&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="xml-tag"&gt;&amp;lt;servlet-name&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;Jersey&lt;span class="xml-tag"&gt;&amp;lt;/servlet-name&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="xml-tag"&gt;&amp;lt;servlet-class&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;com.sun.jersey.spi.container.servlet.ServletContainer&lt;span class="xml-tag"&gt;&amp;lt;/servle&lt;/span&gt;&lt;span class="xml-tag"&gt;t-class&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="xml-tag"&gt;&amp;lt;/servlet&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="xml-tag"&gt;&amp;lt;servlet-mapping&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="xml-tag"&gt;&amp;lt;servlet-name&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;Jersey&lt;span class="xml-tag"&gt;&amp;lt;/servlet-name&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="xml-tag"&gt;&amp;lt;url-pattern&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;/rs/*&lt;span class="xml-tag"&gt;&amp;lt;/url-pattern&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="xml-tag"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="xml-tag"&gt;servlet-mapping&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: medium;"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;u&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;Now, let's test the service with:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l4 level1 lfo5; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US" style="background: white; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;curl&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="background: white; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;curl http://localhost:8080/RESTfulServices/rs/ArtisteNameBeginningBy/Arc&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l4 level1 lfo5; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US" style="background: white; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;or your browser&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt; mso-ansi-language: #00FF; mso-bidi-language: #00FF; mso-fareast-language: #00FF;"&gt;http://localhost:8080/RESTfulServices/rs/ArtisteNameBeginningBy/Arc&lt;/span&gt;&lt;span lang="EN-US" style="background: white; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="background: white; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;&lt;b&gt;and the result should be :&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_rpz_ucpdDqg/TC5mm6Y7kuI/AAAAAAAAAHk/5Q00LD6zI78/resuljson.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh5.ggpht.com/_rpz_ucpdDqg/TC5mm6Y7kuI/AAAAAAAAAHk/5Q00LD6zI78/resuljson.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri, sans-serif; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/july/RESTfulServices/RESTfulServices.zip"&gt;Get the NetBeans project&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-7739901334221829571?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/7739901334221829571/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=7739901334221829571' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7739901334221829571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7739901334221829571'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/07/restful-service-with-jax-rs-and-jpa-2.html' title='RESTful service with JAX-RS (and JPA 2 for the access to the data)'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_rpz_ucpdDqg/TC5mm_jbzQI/AAAAAAAAAHg/PNOr74-b6v0/s72-c/Additional%20Properties.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-14034179274257365</id><published>2010-06-25T21:27:00.000+01:00</published><updated>2010-06-25T21:27:06.463+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Reference Guide'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>JavaFX CSS Reference Guide</title><content type='html'>The &lt;a href="http://java.sun.com/javafx/1.3/docs/api/javafx.scene/doc-files/cssref.html"&gt;JavaFX CSS Reference Guide&lt;/a&gt; is available&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-14034179274257365?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/14034179274257365/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=14034179274257365' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/14034179274257365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/14034179274257365'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/06/javafx-css-reference-guide.html' title='JavaFX CSS Reference Guide'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-7004166683274129963</id><published>2010-06-16T22:42:00.017+01:00</published><updated>2010-10-06T23:15:46.721+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Slimshady:D5'/><category scheme='http://www.blogger.com/atom/ns#' term='Slimshady:D5- JavaFX'/><title type='text'>Slimshady:D5- JavaFX</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;I don’t know what is Slimshady&amp;nbsp;:D5- JavaFX in comparison with the actual JavaFX, but I think it should be a great technology ! :)&lt;br /&gt;
See yourself &lt;/span&gt;&lt;a href="http://blogs.sun.com/ant/"&gt;&lt;span lang="EN-US"&gt;http://blogs.sun.com/ant/&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;
And if you have some information about Slimshady:D5, let me know ;)&lt;/span&gt;&lt;br /&gt;
&lt;span lang="EN-US"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, sans-serif;"&gt;&lt;span lang="EN-US" style="color: #333333; font-family: Verdana, sans-serif; font-size: 10pt; line-height: 115%;"&gt;&lt;b&gt;[Update: October 6, 2010&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, sans-serif;"&gt;&lt;b&gt;]&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, sans-serif;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 14px;"&gt;I don't know why (may be because of &lt;a href="http://groups.google.com/group/visage-dev/msg/3b03016484745cc5"&gt;that&lt;/a&gt;) , but the &lt;a href="http://blogs.sun.com/ant/"&gt;Anthony Rogers's blog&lt;/a&gt; is down...&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 14px;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, sans-serif;"&gt;&lt;span lang="EN-US" style="color: #333333; font-family: Verdana, sans-serif; font-size: 10pt; line-height: 115%;"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US" style="color: #333333; font-family: Verdana, sans-serif; font-size: 10pt; line-height: 115%;"&gt;However, you could always see some videos of Slimshady&lt;/span&gt; on YouTube&lt;/span&gt;&amp;nbsp;you could always see some &lt;a href="http://www.youtube.com/user/yourlookingatanother#p/u"&gt;videos of Slimshady&lt;/a&gt;&lt;/span&gt; on YouTube&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-7004166683274129963?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/7004166683274129963/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=7004166683274129963' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7004166683274129963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7004166683274129963'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/06/slimshadyd5-javafx.html' title='Slimshady:D5- JavaFX'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-4985519654474375984</id><published>2010-05-26T23:01:00.007+01:00</published><updated>2010-05-26T23:34:24.150+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='distortion effect'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX 1.3'/><title type='text'>Distortion effect</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;After the &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2009/12/old-school-scroll-line.html"&gt;simple scrolltexts&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; and &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2010/01/scrolling-with-displacementmap-effect.html"&gt;scrolltexts with a sinusoidal&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; effect, here is just another old bitmap effect used in the demos written for home computers in the 1980s.&lt;span style="mso-bidi-font-style: italic;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;script src="http://dl.javafx.com/1.3/dtfx.js"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
    javafx(
        {
       codebase : "http://pagesperso-orange.fr/paddy.fr/applet/distortion",
              archive: "Distortion.jar",
              draggable: true,
              width: 168,
              height: 129,
              code: "distortion.Distortion",
              name: "Distortion"
        }
    );
&lt;/script&gt;&lt;br /&gt;
For standalone mode&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/applet/distortion/Distortion.jnlp"&gt;&lt;img src="http://lh6.ggpht.com/_rpz_ucpdDqg/S_2XytuSpRI/AAAAAAAAAHI/jtFblPQDvec/jws-launch-button.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;/span&gt;&lt;/div&gt;If you want to try with a bigger image, you can use the glassfish.jpg image instead of the fc-barcelone-logo.jpg and, for a better effect with a bigger image, &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;use this lines&lt;br /&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.comment {color: #969696}
.string {color: #ce7b00}
.keyword {color: #0000e6}
.ST0 {color: #0000e6; font-family: Monospaced; font-weight: bold}
.time {color: #ff00ff}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span class="keyword"&gt;var&lt;/span&gt; factor = (6 * Math.PI) / imageHeight;
    &lt;span class="keyword"&gt;var&lt;/span&gt; v = (Math.sin(j * factor) * 20) + 20;
&lt;/pre&gt;instead of this lines&lt;br /&gt;
&lt;pre&gt;&lt;span class="keyword"&gt;var&lt;/span&gt; factor = (2 * Math.PI) / imageHeight;
    &lt;span class="keyword"&gt;var&lt;/span&gt; v = (Math.sin(j * factor) * 10) + 20;
&lt;/pre&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Distortion.fx&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword"&gt;package&lt;/span&gt; distortion;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.image.Image;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.geometry.Rectangle2D;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.image.ImageView;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.util.Math;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.animation.KeyFrame;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.animation.Timeline;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.runtime.ConditionalFeature;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.runtime.Platform;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.shape.Rectangle;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.paint.Color;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author paddy&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;
println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Effect enabled: &lt;/span&gt;{Platform.isSupported(ConditionalFeature.EFFECT)}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Input Method enabled: &lt;/span&gt;{Platform.isSupported(ConditionalFeature.INPUT_METHOD)}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Scene 3D enabled: &lt;/span&gt;{Platform.isSupported(ConditionalFeature.SCENE3D)}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Shape Clip enabled: &lt;/span&gt;{Platform.isSupported(ConditionalFeature.SHAPE_CLIP)}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);

&lt;span class="keyword"&gt;var&lt;/span&gt; img = Image {
            &lt;span class="comment"&gt;//url: &amp;quot;{__&lt;/span&gt;&lt;span class="comment"&gt;DIR__}images/glassfish.jpg&amp;quot;&lt;/span&gt;
            url: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;{__DIR__}&lt;span class="string"&gt;images/fc-barcelone-logo.jpg&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
             }
&lt;span class="keyword"&gt;def&lt;/span&gt; imageWidth = &lt;span class="keyword"&gt;bind&lt;/span&gt; img.width &lt;span class="keyword"&gt;as&lt;/span&gt; Integer;
&lt;span class="keyword"&gt;def&lt;/span&gt; imageHeight = &lt;span class="keyword"&gt;bind&lt;/span&gt; img.height &lt;span class="keyword"&gt;as&lt;/span&gt; Integer;
&lt;span class="keyword"&gt;def&lt;/span&gt; lineWidth = imageWidth;
&lt;span class="keyword"&gt;def&lt;/span&gt; lineHeight = 1;
&lt;span class="keyword"&gt;var&lt;/span&gt; distortionMap: Float[];
&lt;span class="keyword"&gt;var&lt;/span&gt; index = 0;

&lt;span class="ST0"&gt;for&lt;/span&gt; (j &lt;span class="keyword"&gt;in&lt;/span&gt; [0..&amp;lt;imageHeight * 2]) {

    &lt;span class="keyword"&gt;var&lt;/span&gt; factor = (2 * Math.PI) / imageHeight;
    &lt;span class="keyword"&gt;var&lt;/span&gt; v = (Math.sin(j * factor) * 10) + 20;
    &lt;span class="comment"&gt;//var factor = (6 * Math.PI) / imageHeight;&lt;/span&gt;
    &lt;span class="comment"&gt;//var v = (Math.sin(j * factor&lt;/span&gt;&lt;span class="comment"&gt;) * 20) + 20;&lt;/span&gt;

    &lt;span class="keyword"&gt;insert&lt;/span&gt; v &lt;span class="keyword"&gt;into&lt;/span&gt; distortionMap;
}

&lt;span class="keyword"&gt;def&lt;/span&gt; lineViewports = &lt;span class="ST0"&gt;for&lt;/span&gt; (row &lt;span class="keyword"&gt;in&lt;/span&gt; [0..imageHeight]) {
            Rectangle2D {
                minX: 0, minY: row, width: lineWidth, height: lineHeight
            }
        }
&lt;span class="keyword"&gt;var&lt;/span&gt; distortionImg = &lt;span class="keyword"&gt;bind&lt;/span&gt;
        &lt;span class="ST0"&gt;for&lt;/span&gt; (row &lt;span class="keyword"&gt;in&lt;/span&gt; [0..imageHeight]) {
            ImageView {
                x: &lt;span class="keyword"&gt;bind&lt;/span&gt; distortionMap[row + index]
                y:  row
                viewport: &lt;span class="keyword"&gt;bind&lt;/span&gt; lineViewports[row]
                image:  img
            }
        }
&lt;span class="keyword"&gt;va&lt;/span&gt;&lt;span class="keyword"&gt;r&lt;/span&gt; t = Timeline {
            repeatCount: Timeline.INDEFINITE
            keyFrames: KeyFrame {
                time: &lt;span class="time"&gt;8ms&lt;/span&gt;
                canSkip: &lt;span class="ST0"&gt;true&lt;/span&gt;
                action: &lt;span class="keyword"&gt;function&lt;/span&gt; (): Void {
                    index = index + 1;
                    &lt;span class="ST0"&gt;if&lt;/span&gt; (index &amp;gt; imageHeight) {
                        index = 0;
                    }
                }
            }
        }

t.play();

Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Application title&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    scene: Scene {
        width: imageWidth +40
        height: imageHeight + 1

        content: [
            Rectangle {
                x: 0, y: 0
                width: imageWidth +40 , height: imageHeight + 1
                fill: Color.BLACK
                &lt;span class="comment"&gt;//fill: Color.&lt;/span&gt;&lt;span class="comment"&gt;GHOSTWHITE&lt;/span&gt;
            }
            distortionImg
        ]
    }
}
&lt;/pre&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;span style="color: windowtext; text-decoration: none; text-underline: none;"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/may/distortion/Distortion.zip"&gt;Get the Netbeans projects&lt;/a&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Note&amp;nbsp;: The scrolltexts and the scrolltexts with sinusoidal effect work without migration on JavaFX 1.3 with AWT/Java2D/Swing toolkit.&lt;br /&gt;
On prism toolkit the animation is very fluid but you have to use a jpeg image instead of png for the font because the png is not supported in this early version of prism&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-4985519654474375984?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/4985519654474375984/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=4985519654474375984' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4985519654474375984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4985519654474375984'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/05/distortion-effect.html' title='Distortion effect'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_rpz_ucpdDqg/S_2XytuSpRI/AAAAAAAAAHI/jtFblPQDvec/s72-c/jws-launch-button.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-5247485243333731916</id><published>2010-05-08T23:19:00.009+01:00</published><updated>2010-08-08T21:29:09.603+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search TextBox'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom component'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX 1.3'/><title type='text'>JavaFX custom component in JavaFX 1.3</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;In JavaFX 1.2&lt;i style="mso-bidi-font-style: normal;"&gt;, &lt;/i&gt;&lt;/span&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="color: windowtext; mso-ansi-language: EN-US; text-decoration: none; text-underline: none;"&gt;Control&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; extended &lt;/span&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="color: windowtext; mso-ansi-language: EN-US; text-decoration: none; text-underline: none;"&gt;CustomNode&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; then we could override the &lt;i style="mso-bidi-font-style: normal;"&gt;create&lt;/i&gt; function to customize an existing component.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
With JavaFX 1.3&lt;i style="mso-bidi-font-style: normal;"&gt;, Control&lt;/i&gt; now extends &lt;/span&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="color: windowtext; mso-ansi-language: EN-US; text-decoration: none; text-underline: none;"&gt;Parent&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; directly then we do not have any more the &lt;i style="mso-bidi-font-style: normal;"&gt;create&lt;/i&gt; function and &lt;a href="http://paddyweblog.blogspot.com/2009/10/javafx-custom-component.html"&gt;my custom component&lt;/a&gt; doesn’t compile any more … (because I used the create function to customize my components)&lt;br /&gt;
&lt;br /&gt;
Then, to customize an existing component in JavaFX 1.3, I tried another way &lt;br /&gt;
&lt;script src="http://dl.javafx.com/1.3/dtfx.js"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
    javafx(
        {
              codebase : "http://pagesperso-orange.fr/paddy.fr/applet/searchsextbox1_3",
               archive: "SearchTextBox13.jar",
              draggable: true,
              width: 200,
              height: 200,
              code: "searchtextbox.Main",
              name: "SearchTextBox13"
        }
    );
&lt;/script&gt;&lt;br /&gt;
I use the &lt;i style="mso-bidi-font-style: normal;"&gt;initBlock &lt;/i&gt;to create the nodes that I want to add to the existing component to customize it &lt;br /&gt;
and then I add these nodes to the &lt;i style="mso-bidi-font-style: normal;"&gt;children&lt;/i&gt; sequence of the existing component.&lt;br /&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.comment {color: #969696}
.string {color: #ce7b00}
.keyword {color: #0000e6}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;pre&gt;...
   &lt;span class="keyword"&gt;init&lt;/span&gt; {
          &lt;span class="keyword"&gt;var&lt;/span&gt; g = Group {
                    content: [
                                Group {
                                    ...
                                    content: [
                                        Circle {
                                               ...
                                        }
                                        Rectangle {
                                               ....
                                        }
                                     ...
                                    ]
                                    ...
                    ]
                }
           &lt;span class="keyword"&gt;insert&lt;/span&gt; g &lt;span class="keyword"&gt;into&lt;/span&gt; children;
        }
   ...&lt;/pre&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Now, I have a problem with the css, I want to have a default css for my &lt;i style="mso-bidi-font-style: normal;"&gt;SearchTextBox&lt;/i&gt; which is loaded by default by my component (not in the &lt;i style="mso-bidi-font-style: normal;"&gt;Scene&lt;/i&gt; by the developer) and which can be overridden by the developer.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;If you have a solution, please let me know!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;This example works on: Windows (Seven), Linux (Ubuntu 10.04) and Mac OS X (10.6.3)&amp;nbsp;&amp;nbsp;with the Default toolkit and the Prism toolkit (JVM argument: -Xtoolkit prism) but there is one bug when you run it as an applet on Mac OS X. &lt;br /&gt;
The button have a wrong size, the text is too long….&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh3.ggpht.com/_rpz_ucpdDqg/S-XXPBPR9PI/AAAAAAAAAG0/0RDO1LBeiX0/CustomComponentAppletMacOSX.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://lh3.ggpht.com/_rpz_ucpdDqg/S-XXPBPR9PI/AAAAAAAAAG0/0RDO1LBeiX0/CustomComponentAppletMacOSX.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;[update August 8, 2010]&lt;/b&gt;this issue is fixed in JavaFX 1.3.1&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;
&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;SearchTextBox.fx&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword"&gt;package&lt;/span&gt; customcomponent;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Group;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.paint.Color;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.shape.Circle;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.shape.Rectangle;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.input.MouseEvent;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.TextBox;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.input.KeyEvent;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author P&lt;/span&gt;&lt;span class="comment"&gt;atrick&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;
&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; SearchTextBox &lt;span class="keyword"&gt;extends&lt;/span&gt; TextBox {

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; onResetSearch: &lt;span class="keyword"&gt;function&lt;/span&gt;(): Void;
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; onSearch: &lt;span class="keyword"&gt;funct&lt;/span&gt;&lt;span class="keyword"&gt;ion&lt;/span&gt;(s: String): Void;

    &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; style = &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;-fx-padding: 0 16 0 0; &lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="comment"&gt;//override var styleClass = &amp;quot;searchTextBox text-box&amp;quot;;&lt;/span&gt;
    &lt;span class="comment"&gt;//override va&lt;/span&gt;&lt;span class="comment"&gt;r styleClass = &amp;quot;searchTextBox&amp;quot;;&lt;/span&gt;

    &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; onKeyTyped = &lt;span class="keyword"&gt;function&lt;/span&gt;(event:KeyEvent){
        &lt;span class="ST0"&gt;if&lt;/span&gt; (&lt;span class="keyword"&gt;this&lt;/span&gt;.rawText!=&lt;span class="string"&gt;&amp;quot;&amp;quot;&lt;/span&gt;){
            onSearch(&lt;span class="keyword"&gt;this&lt;/span&gt;.rawText);
        }&lt;span class="ST0"&gt;else&lt;/span&gt;{
            onResetSearch();
        }
    }

    &lt;span class="keyword"&gt;init&lt;/span&gt; {
          &lt;span class="keyword"&gt;var&lt;/span&gt; g = Group {
                    content: [
                                Group {
                                    &lt;span class="keyword"&gt;var&lt;/span&gt; crossWidth = &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.height * 0.45;
                                    &lt;span class="keyword"&gt;v&lt;/span&gt;&lt;span class="keyword"&gt;ar&lt;/span&gt; crossHeight = &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.height * 0.05;
                                    visible: &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.rawText.length() &amp;gt; 0
                                    layoutX: &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;th&lt;/span&gt;&lt;span class="keyword"&gt;is&lt;/span&gt;.layoutBounds.width - (&lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.height / 2.0)
                                    layoutY: &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.height / 2.0
                                    content: [
                                        Circle {
                                            fill: Color.GRAY
                                            radius: &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.height * 0.325 &lt;span class="comment"&gt;// 65% of the texbox height and div 2 for the radius&lt;/span&gt;
                                        }
                                        Rectangle {
                                            width: &lt;span class="keyword"&gt;bind&lt;/span&gt; crossWidth
                                            height: &lt;span class="keyword"&gt;bind&lt;/span&gt; crossHeight
                                            translateX: &lt;span class="keyword"&gt;bin&lt;/span&gt;&lt;span class="keyword"&gt;d&lt;/span&gt; 0 - crossWidth / 2.0
                                            translateY: &lt;span class="keyword"&gt;bind&lt;/span&gt; 0 - crossHeight / 2.0
                                            fill: Color.WHITE
                                            rotate: 45
                                        }
                                        Rectangle {
                                            width: &lt;span class="keyword"&gt;bind&lt;/span&gt; crossWidth
                                            height: &lt;span class="keyword"&gt;bind&lt;/span&gt; crossHeight
                                            translateX: &lt;span class="keyword"&gt;bind&lt;/span&gt; 0 - crossWidth / 2.0
                                            translateY: &lt;span class="keyword"&gt;bind&lt;/span&gt; 0 - crossHeight / 2.0
                                            fill: Color.WHITE
                                            rotate: -45
                                        }
                                    ]
                                    onMouseClicked: &lt;span class="keyword"&gt;function&lt;/span&gt; (event: MouseEvent) {
                                        &lt;span class="keyword"&gt;this&lt;/span&gt;.commit();
                                        &lt;span class="keyword"&gt;this&lt;/span&gt;.text = &lt;span class="string"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
                                        onResetSearch();
                                    }
                                }
                    ]
                }           
           &lt;span class="keyword"&gt;insert&lt;/span&gt; g &lt;span class="keyword"&gt;into&lt;/span&gt; children;
        }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Main.fx&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword"&gt;package&lt;/span&gt; searchtextbox;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Text;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Font;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.Button;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.RadioButton;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.ToggleGroup;
&lt;span class="keyword"&gt;import&lt;/span&gt; customcomponent.SearchTextBox;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author Patrick&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

&lt;span class="keyword"&gt;class&lt;/span&gt; ExtRadioButton &lt;span class="keyword"&gt;extends&lt;/span&gt; RadioButton {
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; action:&lt;span class="keyword"&gt;function&lt;/span&gt;();

    &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;v&lt;/span&gt;&lt;span class="keyword"&gt;ar&lt;/span&gt; selected &lt;span class="keyword"&gt;on&lt;/span&gt; &lt;span class="keyword"&gt;replace&lt;/span&gt; {
        &lt;span class="ST0"&gt;if&lt;/span&gt; (selected) {
            action();
        }
    }
}

&lt;span class="keyword"&gt;def&lt;/span&gt; macStyleSheet=&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;{__DIR__}&lt;span class="string"&gt;resources/mac.css&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;;
&lt;span class="keyword"&gt;def&lt;/span&gt; defaultStyleSheet = &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/customcomponent/stbcaspian.css&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;;
&lt;span class="keyword"&gt;var&lt;/span&gt; stylesheets:String = macStyleSheet;

Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Application title&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    width: 250
    height: 200

    &lt;span class="keyword"&gt;var&lt;/span&gt; cssToggleGroup = ToggleGroup {};

    scene: Scene {
        stylesheets : &lt;span class="keyword"&gt;bind&lt;/span&gt; stylesheets
        content: [
            Text {
                font : Font {
                    size : 16
                }
                x: 10
                y: 30
                content: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Search &lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
            }
            SearchTextBox {
                    styleClass : &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;searchTextBox&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                    translateX :10
                    translateY :40


                    onResetSearch:&lt;span class="keyword"&gt;function&lt;/span&gt;(){
                        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;reset !&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                    }
                    onSearch:&lt;span class="keyword"&gt;function&lt;/span&gt;(s: String){
                        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Search of : &lt;/span&gt;{s}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                    }
            }
            Button {
                    text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;just a button to change focus&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                    translateX :10
                    translateY :80
                    action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Hello !&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;)
                   }
            }

            ExtRadioButton {
                            text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;use the default CSS&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                            translateX :10
                            translateY :110
                            toggleGroup: cssToggleGroup

                            action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                                stylesheets = defaultStyleSheet;
                            }
            }

            ExtRadioButton {
                            text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;use the mac CSS&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                            translateX :10
                            translateY :130
                            toggleGroup: cssToggleGroup
                            selected: &lt;span class="ST0"&gt;true&lt;/span&gt;

                            action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                                stylesheets = macStyleSheet;
                            }
            }
        ]
    }
}&lt;/pre&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span style="color: windowtext; text-decoration: none; text-underline: none;"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/may/searchsextbox1_3/SearchTextBox1.3.zip"&gt;Get the Netbeans projects&lt;/a&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-5247485243333731916?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/5247485243333731916/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=5247485243333731916' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/5247485243333731916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/5247485243333731916'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/05/javafx-custom-component-in-javafx-13.html' title='JavaFX custom component in JavaFX 1.3'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_rpz_ucpdDqg/S-XXPBPR9PI/AAAAAAAAAG0/0RDO1LBeiX0/s72-c/CustomComponentAppletMacOSX.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-4930052518087242892</id><published>2010-04-27T23:15:00.009+01:00</published><updated>2010-04-28T12:33:46.893+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='evaluateKeyValues'/><category scheme='http://www.blogger.com/atom/ns#' term='timeline'/><category scheme='http://www.blogger.com/atom/ns#' term='Duke Anim'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX 1.3'/><title type='text'>Duke Anim in JavaFX 1.3</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;In JavaFX 1.3 the evaluation of the KeyValues in the Timeline changed. Now, the KeyValues are evaluated once before the Timeline starts (see &lt;i style="mso-bidi-font-style: normal;"&gt;"Animation: Changed semantics of &lt;/i&gt;&lt;/span&gt;&lt;code&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;KeyValue&lt;/span&gt;&lt;/i&gt;&lt;/code&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; evaluation&lt;/span&gt;&lt;/i&gt;&lt;code&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"&gt;"&lt;/span&gt;&lt;/i&gt;&lt;/code&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; in &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://javafx.com/docs/articles/porting-guide-javafx1-3.jsp"&gt;Java FX 1.3 Migration Guide&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;) and thus &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2009/09/duke-anim-javafx.html"&gt;my Duke Anim&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; doesn’t work in Java FX 1.3 :(.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;To correct it, the function &lt;a href="http://java.sun.com/javafx/1.3/docs/api/javafx.animation/javafx.animation.Timeline.html#methods-summary"&gt;Timeline.evaluateKeyValues()&lt;/a&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;has been added. This function has to be used for re-evaluates all the keyValues when it is called.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Now, let us correct Duke Anim :)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;To correct Duke Anim, I have made only 2 changes: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="margin-left: 53.4pt; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;I call the function Timeline.evaluateKeyValues()&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;at the end of the action function of KeyFrame at 1s.&lt;br /&gt;
&lt;i style="mso-bidi-font-style: normal;"&gt;anim.evaluateKeyValues();&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 53.4pt; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;And I declare the variable anim with his type to be able to call the function Timeline.evaluateKeyValues()&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;in the action function of the KeyFrame.&lt;br /&gt;
&lt;i style="mso-bidi-font-style: normal;"&gt;public var anim:Timeline = Timeline { …&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;script src="http://dl.javafx.com/1.3/dtfx.js"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
    javafx(
        {
              codebase : "http://pagesperso-orange.fr/paddy.fr/applet/dukeanim1_3",
              archive: "DukeAnim.jar",
              draggable: true,
              width: 240,
              height: 320,
              code: "dukeanim.Main",
              name: "DukeAnim"
        }
    );
&lt;/script&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;This Duke Anim's version works on : Windows (Seven), Linux (Ubuntu 9.10) and Mac OS X (10.6.3)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;with the Default toolkit and the Prism toolkit (JVM argument: -Xtoolkit prism)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.string {color: #ce7b00}
.keyword {color: #0000e6}
.ST0 {color: #0000e6; font-family: Monospaced; font-weight: bold}
.time {color: #ff00ff}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Main.fx&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword"&gt;package&lt;/span&gt; dukeanim;

&lt;span class="keyword"&gt;import&lt;/span&gt; java.util.Random;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.animation.Interpolator;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.animation.KeyFrame;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.animation.Timeline;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.image.Image;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.image.ImageView;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.transform.Translate;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.runtime.ConditionalFeature;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.runtime.Platform;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;

&lt;span class="keyword"&gt;class&lt;/span&gt; DukeAnimModel {
  
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; imageURL = &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;{__DIR__}&lt;span class="string"&gt;images/duke.png&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;;
  
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; x = 0;
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; y = 0;

    &lt;span class="keyword"&gt;var&lt;/span&gt; xTarget = 0;
    &lt;span class="keyword"&gt;var&lt;/span&gt; yTarget = 0;

    &lt;span class="keyword"&gt;var&lt;/span&gt; xTemp = 0;
    &lt;span class="keyword"&gt;var&lt;/span&gt; yTemp = 0;

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; anim:Timeline =
    Timeline {
        autoReverse: &lt;span class="ST0"&gt;false&lt;/span&gt;
        keyFrames: [
            KeyFrame {
                time: &lt;span class="time"&gt;0s&lt;/span&gt;
                values: [x =&amp;gt; xTemp, y =&amp;gt; yTemp]

            },
            KeyFrame {
                time: &lt;span class="time"&gt;1s&lt;/span&gt;
                values: [x =&amp;gt; xTarget &lt;span class="keyword"&gt;tween&lt;/span&gt;
                    Interpolator.SPLINE(0,.5,.5,1),y =&amp;gt; yTarget &lt;span class="keyword"&gt;tween&lt;/span&gt;
                    Interpolator.SPLINE(0,.5,.5,1)]

                action: &lt;span class="keyword"&gt;function&lt;/span&gt;(): Void{

                    &lt;span class="keyword"&gt;var&lt;/span&gt; generator = &lt;span class="keyword"&gt;new&lt;/span&gt; Random();
                    xTarget = (generator.nextFloat() * 240 + 1) &lt;span class="keyword"&gt;as&lt;/span&gt; Integer;
                    yTarget = (generator.nextFloat() * 320 + 1) &lt;span class="keyword"&gt;as&lt;/span&gt; Integer;
                  
                    xTemp=x;
                    yTemp=y;

                    anim.evaluateKeyValues();
                }
            },
        ]
        repeatCount: Timeline.INDEFINITE
    };
}

println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Effect enabled: &lt;/span&gt;{Platform.isSupported(ConditionalFeature.EFFECT)}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Input Method enabled: &lt;/span&gt;{Platform.isSupported(ConditionalFeature.INPUT_METHOD)}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Scene 3D enabled: &lt;/span&gt;{Platform.isSupported(ConditionalFeature.SCENE3D)}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Shape Clip enabled: &lt;/span&gt;{Platform.isSupported(ConditionalFeature.SHAPE_CLIP)}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);

&lt;span class="keyword"&gt;var&lt;/span&gt; dukeAnimModel = DukeAnimModel {}
dukeAnimModel.anim.play();

Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Application title&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    width: 240  
    height: 320 
    scene: Scene {
        content: ImageView {
            transforms: Translate {
                x: &lt;span class="keyword"&gt;bind&lt;/span&gt; dukeAnimModel.x
                y: &lt;span class="keyword"&gt;bind&lt;/span&gt; dukeAnimModel.y
            }
            image: Image {
                url: dukeAnimModel.imageURL
            }
        }
    }
    onClose: &lt;span class="keyword"&gt;function&lt;/span&gt;(){
        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;exit&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
    }
}

&lt;/pre&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/april/DukeAnim1_3.zip"&gt;Get the Netbeans projects&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-4930052518087242892?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/4930052518087242892/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=4930052518087242892' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4930052518087242892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4930052518087242892'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/04/duke-anim-in-javafx-13.html' title='Duke Anim in JavaFX 1.3'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-2728888468388141193</id><published>2010-04-22T20:28:00.005+01:00</published><updated>2010-04-22T23:08:49.118+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Composer'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX 1.3'/><title type='text'>JavaFX 1.3 is there!!!!</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://javafx.com/downloads/all.jsp"&gt;JavaFX 1.3&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt; is there!!!!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;
I haven’t tested it yet, but visibly we have some &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://learnjavafx.typepad.com/weblog/2010/04/your-calendar-pwn3d-leveraging-the-javafx-scene3d-conditionalfeature.html"&gt;3D functions&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;, &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://javafx.com/docs/articles/javafx1-3.jsp#ui_controls"&gt;new UI components&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;, CSS, &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://blogs.sun.com/javafx/entry/javafx_1_3_released_delivers"&gt;the performance and user experience are improved&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;, etc…&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt; And with&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://netbeans.org/community/releases/69/"&gt; NetBeans 6.9 beta&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;, you have a new version of &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://wiki.netbeans.org/JavaFXComposerNewIn69Beta"&gt;JavaFX Composer&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US"&gt;Some interesting links :&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span lang="EN-US" style="font-family: Symbol;"&gt;&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://javafx.com/docs/articles/javafx1-3.jsp"&gt;What’s new in JavaFX 1.3&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span lang="EN-US"&gt;&lt;span lang="EN-US" style="font-family: Symbol;"&gt;&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://www.javafx.com/docs/articles/porting-guide-javafx1-3.jsp"&gt;Migration Guide to JavaFX 1.3&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span lang="EN-US"&gt;&lt;span lang="EN-US"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://steveonjava.com/javafx-1-3-top-10/"&gt;JavaFX 1.3 Top 10&lt;/a&gt;&lt;/span&gt;&lt;span class="apple-converted-space"&gt;&lt;span style="color: #333333; font-family: Arial, sans-serif; font-size: 9pt;"&gt;&lt;a href="http://steveonjava.com/javafx-1-3-top-10/"&gt;&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-2728888468388141193?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/2728888468388141193/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=2728888468388141193' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/2728888468388141193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/2728888468388141193'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/04/javafx-13-is-there.html' title='JavaFX 1.3 is there!!!!'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-1201671085017749237</id><published>2010-04-15T21:10:00.007+01:00</published><updated>2010-04-15T21:23:46.625+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EJB 3.1'/><category scheme='http://www.blogger.com/atom/ns#' term='Asynchronous'/><category scheme='http://www.blogger.com/atom/ns#' term='Asynchronous Session Beans'/><title type='text'>EJB 3.1 Asynchronous Session Beans</title><content type='html'>&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.keyword-directive {color: #0000e6}
.character {color: #ce7b00}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Before EJB 3.1, if you want to execute an asynchronous processing you had to use JMS and a MDB, not so easy and rather heavy in most cases.&lt;br /&gt;
Now with EJB 3.1, you can use a simple session EJB with the @Asynchronous annotation on the method which must be called asynchronously.&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;@Stateless
@Remote(HelloEjbAsynchronousRemote.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;)
&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; HelloEjbAsynchronous &lt;span class="keyword-directive"&gt;implements&lt;/span&gt; HelloEjbAsynchronousRemote {

    @Asynchronous
    @Override
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Future&amp;lt;String&amp;gt; ejbAsynchronousSayHello(String name){&lt;/pre&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;If your method has a return value, your method has to return an AsyncResult&lt;v&gt; object which is an implementation of Future&lt;v&gt;.&lt;/v&gt;&lt;/v&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;return&lt;/span&gt; &lt;span class="keyword-directive"&gt;new&lt;/span&gt; AsyncResult&amp;lt;String&amp;gt;(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Hello &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;+name);&lt;/pre&gt;&lt;span lang="EN-US"&gt;For the client, you just have to call the remote ejbAsynchronousSayHello by using the new portable global JNDI names.&lt;br /&gt;
The EJB container returns the control to the client immediately, in my case with a Future object in return, and then executes the method.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;pre&gt;HelloEjbAsynchronousRemote ha = 
            (HelloEjbAsynchronousRemote)ic.lookup(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;java:global/EjbAsynchronous/HelloEjbAsynchronous&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
            Future future = ha.ejbAsynchronousSayHello(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Patrick&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;&lt;span lang="EN-US"&gt;The client can retrieve the result value with Future.get() and can get the state of the processing with Future.isDone().&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;pre&gt;String ret = (String)future.get();&lt;/pre&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td&gt;Full source code of the EJB - HelloEjbAsynchronous.java&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; fr.paddy.ejb31;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.Date;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.concurrent.Future;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.ejb.AsyncResult;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.ejb.Asynchronous;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.ejb.Remote;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.ejb.Stateless;

@Stateless
@Remote(HelloEjbAsynchronousRemote.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;)
&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; HelloEjbAsynchronous &lt;span class="keyword-directive"&gt;implements&lt;/span&gt; HelloEjbAsynchronousRemote {

    @Asynchronous
    @Override
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Future&amp;lt;String&amp;gt; ejbAsynchronousSayHello(String name){
        System.out.println(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Date().toString()+&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt; - Begin - HelloEjbAsynchronos-&amp;gt;ejbAsynchronousSayHello &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;+name);

        &lt;span class="keyword-directive"&gt;try&lt;/span&gt;{
           Thread.sleep(5*1000);
        }&lt;span class="keyword-directive"&gt;catch&lt;/span&gt; (Exception e){
            e.printStackTrace();
        }

        System.out.println(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Date().toString()+&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt; - End - HelloEjbAsynchronos-&amp;gt;ejbAsynchronousSayHello &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;+name);

        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; &lt;span class="keyword-directive"&gt;new&lt;/span&gt; AsyncResult&amp;lt;String&amp;gt;(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Hello &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;+name);
        
    }
}
&lt;/pre&gt;&lt;span lang="EN-US"&gt;The ejbAsynchronousSayHello method, which is declared asynchronous, just wait 5 seconds to simulate a long processing and return the String&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;"Hello "+name, the variable name being passed as parameter.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td&gt;Full source code of the remote interface - HelloEjbAsynchronousRemote.java&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; fr.paddy.ejb31;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.concurrent.Future;

&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;interface&lt;/span&gt; HelloEjbAsynchronousRemote {    
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Future&amp;lt;String&amp;gt; ejbAsynchronousSayHello(String name);
}


&lt;/pre&gt;&lt;/div&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td&gt;Full source code of the EJB Client - ClientMain.java&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.Properties;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.concurrent.ExecutionException;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.concurrent.Future;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.naming.InitialContext;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.naming.NamingException;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; fr.paddy.ejb31.HelloEjbAsynchronousRemote;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.Date;

&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; ClientMain {

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;static&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; main(String[] args) {
        Properties props = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; Properties();
        props.setProperty(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;java.naming.factory.initial&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;,
                             &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;com.sun.enterprise.naming.SerialInitContextFactory&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        props.setProperty(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;java.naming.factory.url.pkgs&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;,
                             &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;com.sun.enterprise.naming&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        props.setProperty(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;java.naming.factory.state&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;,
                             &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        props.setProperty(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;org.omg.&lt;/span&gt;&lt;span class="character"&gt;CORBA.ORBInitialHost&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;localhost&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        props.setProperty(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;org.omg.CORBA.ORBInitialPort&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;3700&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);

        &lt;span class="keyword-directive"&gt;try&lt;/span&gt;{
            InitialContext ic = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; InitialContext(props);
            String ret=&lt;span class="character"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;

            HelloEjbAsynchronousRemote ha =
            (HelloEjbAsynchronousRemote)ic.lookup(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;java:&lt;/span&gt;&lt;span class="character"&gt;global/EjbAsynchronous/HelloEjbAsynchronous&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
            Future future = ha.ejbAsynchronousSayHello(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Patrick&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);

            &lt;span class="keyword-directive"&gt;while&lt;/span&gt; (!future.isDone()){
                Thread.sleep(1000);
                System.out.println(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Date().toString()+&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt; - I do other things ...&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
            }

            ret = (String)future.get();
            System.out.println(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Date().toString()+&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt; - ret : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;+ret);

        }&lt;span class="keyword-directive"&gt;catch&lt;/span&gt; (NamingException ne){
            ne.printStackTrace();
        }&lt;span class="keyword-directive"&gt;catch&lt;/span&gt; (InterruptedException ie){
            ie.printStackTrace();
        }&lt;span class="keyword-directive"&gt;catch&lt;/span&gt; (ExecutionException ee){
            ee.printStackTrace();
        }
    }
}&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh3.ggpht.com/_rpz_ucpdDqg/S8Y3xgC-5aI/AAAAAAAAAGQ/PWmQwMhJPlI/Console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh3.ggpht.com/_rpz_ucpdDqg/S8Y3xgC-5aI/AAAAAAAAAGQ/PWmQwMhJPlI/Console.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Get the Netbeans projects:&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/april/EjbAsynchronous.zip"&gt;EJB&lt;/a&gt; , &lt;a href="http://pagesperso-orange.fr/paddy.fr/april/ClientEjbAsynchronous.zip"&gt;Client&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Because of this &lt;a href="https://glassfish.dev.java.net/issues/show_bug.cgi?id=11503"&gt;issue&lt;/a&gt;, you must use &lt;a href="http://download.java.net/glassfish/v3.0.1/promoted/"&gt;GlassFish V3.0.1 promoted build 12&lt;/a&gt; to test this example.&lt;br&gt;Or used this workaround&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;while&lt;/span&gt; (!future.isDone()){
                Thread.sleep(1000);
                System.out.println(&lt;span class="keyword-directive"&gt;new&lt;/span&gt; Date().toString()+&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt; - I do other things ...&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
                &lt;span class="comment"&gt;// System.out.println(&amp;quot;futur.isDone&amp;quot;+future.isDone());&lt;/span&gt;
                &lt;span class="comment"&gt;// just a hack, because at the moment future.isDone doesn&amp;#39;t work !&lt;/span&gt;
                &lt;span class="keyword-directive"&gt;try&lt;/span&gt;{
                    Object o = future.get(10,TimeUnit.MILLISECONDS);
                }&lt;span class="keyword-directive"&gt;catch&lt;/span&gt; (TimeoutException te){
                   &lt;span class="comment"&gt;// te.printStackTrace();&lt;/span&gt;
                }
                &lt;span class="comment"&gt;// e&lt;/span&gt;&lt;span class="comment"&gt;nd of the hack&lt;/span&gt;
                &lt;span class="comment"&gt;// System.out.println(&amp;quot;futur.isDone&amp;quot;+future.isDone());&lt;/span&gt;
            }&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-1201671085017749237?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/1201671085017749237/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=1201671085017749237' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1201671085017749237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1201671085017749237'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/04/ejb-31-asynchronous-session-beans.html' title='EJB 3.1 Asynchronous Session Beans'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_rpz_ucpdDqg/S8Y3xgC-5aI/AAAAAAAAAGQ/PWmQwMhJPlI/s72-c/Console.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-4908344379555586579</id><published>2010-04-01T23:18:00.004+01:00</published><updated>2010-04-07T23:09:18.249+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CriteriaBuilder'/><category scheme='http://www.blogger.com/atom/ns#' term='JPA 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Criteria API'/><category scheme='http://www.blogger.com/atom/ns#' term='CriteriaQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='JPA'/><title type='text'>Some examples of the criteria API (JPA 2.0)</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;When I wrote my examples on how to use JavaFX and JPA 2.0 &lt;/span&gt;&lt;span lang="EN-US"&gt;(&lt;a href="http://paddyweblog.blogspot.com/2010/03/title-javafx-and-databases-with-jpa-20.html"&gt;part II&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; and &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2010/03/javafx-and-jpa-20-with-my-custom.html"&gt;III&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;), I made some other tries using Criteria API. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Of course, these examples use the table and the entity described in "&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2010/02/examples-using-jpa-20.html"&gt;Examples using JPA 2.0&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;u&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Example using &lt;span style="color: #6261fe;"&gt;like&lt;/span&gt; and a &lt;span style="color: #6261fe;"&gt;JPA parameter&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.character {color: #ce7b00}
.keyword-directive {color: #0000e6}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align=""&gt;In JPQL&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;String param = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Arc%&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;;

        Query query = em.createQuery(
             &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;select m from Music m where m.artisteName like :param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        query.setParameter(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, param);
        List&amp;lt;Music&amp;gt; musics = query.getResultList();

        &lt;span class="keyword-directive"&gt;for&lt;/span&gt; (Music music : musics){
            System.out.println(music);
        }&lt;/pre&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align=""&gt;Equivalent with Criteria API&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;String param = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Arc%&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;;

        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery&amp;lt;Music&amp;gt; query = cb.createQuery(Music.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);

        Root&amp;lt;Music&amp;gt; music3 = query.from(Music.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);
        query.where(cb.like(music3.&amp;lt;String&amp;gt;get(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artisteName&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;),
                            cb.parameter(String.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;, &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)));

        TypedQuery&amp;lt;Music&amp;gt; tq = em.createQuery(query);
        tq.setParameter(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, param);
        List&amp;lt;Music&amp;gt; musics = tq.getResultList();

        &lt;span class="keyword-directive"&gt;for&lt;/span&gt; (Music music : musics){
            System.out.println(music);
        }&lt;/pre&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;u&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Example of criteria API using &lt;span style="color: #6261fe;"&gt;count&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align=""&gt;In JPQL&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;String param = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Archive&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;;

        Query query = em.createQuery(
             &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;select count(m) from Music m where m.artisteName = :artisteNameParam&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        query.setParameter(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artisteNameParam&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, param);
        Long count1 = (Long)query.getSingleResult();

        System.out.println(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;count : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;+count1);
&lt;/pre&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align=""&gt;Equivalent with Criteria API&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;String param = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Archive&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;;

        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery&amp;lt;Long&amp;gt; query = cb.createQuery(Long.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);

        Root&amp;lt;Music&amp;gt; music = query.from(Music.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);
        query.select(cb.count(music));
        query.where(cb.equal(music.&amp;lt;String&amp;gt;get(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artisteName&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;),
                             cb.parameter(String.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;,&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artisteNameParam&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)));

        TypedQuery&amp;lt;Long&amp;gt; tq = em.createQuery(query);
        tq.setParameter(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artisteNameParam&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, param);

        Long count = tq.getSingleResult();

        System.out.println(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;count : &lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;+count);&lt;/pre&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;u&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Example of criteria using &lt;span style="color: #6261fe;"&gt;distinct&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align=""&gt;In JPQL&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;String param = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Arc%&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;;

        Query query = em.createQuery(
             &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;select distinct m.artisteName from Music m where m.artisteName like :param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        query.setParameter(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, param);
        List&amp;lt;String&amp;gt; artistes= query.getResultList();

        &lt;span class="keyword-directive"&gt;for&lt;/span&gt; (String artiste : artistes){
            System.out.println(artiste);
        }&lt;/pre&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align=""&gt;Equivalent with Criteria API&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;String param = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;Arc%&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;;

        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery&amp;lt;String&amp;gt; query = cb.createQuery(String.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);

        Root&amp;lt;Music&amp;gt; music = query.from(Music.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);
        query.select(music.&amp;lt;String&amp;gt;get(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artisteName&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;));
        query.distinct(&lt;span class="keyword-directive"&gt;true&lt;/span&gt;);

        query.where(cb.like(music.&amp;lt;String&amp;gt;get(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artisteName&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;),
                            cb.parameter(String.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;, &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)));

        TypedQuery&amp;lt;String&amp;gt; tq = em.createQuery(query);
        tq.setParameter(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, param);

        List&amp;lt;String&amp;gt; artistes = tq.getResultList();


        &lt;span class="keyword-directive"&gt;for&lt;/span&gt; (String artiste : artistes){
            System.out.println(artiste);
        }&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-4908344379555586579?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/4908344379555586579/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=4908344379555586579' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4908344379555586579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4908344379555586579'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/04/some-examples-of-criteria-api-jpa-20.html' title='Some examples of the criteria API (JPA 2.0)'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-192034406940269008</id><published>2010-03-20T14:04:00.000+01:00</published><updated>2010-03-20T14:04:27.830+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='soma'/><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='next release'/><title type='text'>More UI controls for the next release</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;I don’t know who is Sungmoon Cho, but according to &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://www.linkedin.com/in/sungmoon"&gt;linkedin&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; he is JavaFX Product Line Manager at Sun Microsystems. &lt;br /&gt;
Some time ago, he has opened &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://javafx.uservoice.com/forums/33584-official-javafx-feedback-forum"&gt;Official JavaFX Feedback Forum&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; to ask us what we are suggesting for JavaFX.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;My answers were (the number before the item, is my number of vote for this item):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_rpz_ucpdDqg/S6TGrwGJ-_I/AAAAAAAAAFY/wSmM9A-GQ3Q/myvotes.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh5.ggpht.com/_rpz_ucpdDqg/S6TGrwGJ-_I/AAAAAAAAAFY/wSmM9A-GQ3Q/myvotes.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;And recently (on Friday 19th), Sungmoon Cho updated the the JavaFX FeedBack Forum for the following items:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="margin-bottom: .0001pt; margin-bottom: 0cm; margin-left: 38.1pt; margin-right: 0cm; margin-top: 0cm; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Create more native components, like form items, grids and menus.&lt;br /&gt;
with the status &lt;i style="mso-bidi-font-style: normal;"&gt;planned&lt;/i&gt; and the comment &lt;br /&gt;
&lt;/span&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri;"&gt;"&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;We are adding a lot more UI controls for the next release. Please stay tuned&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri;"&gt; "&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; margin-left: 38.1pt; margin-right: 0cm; margin-top: 0cm; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Quick application &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; margin-left: 38.1pt; margin-right: 0cm; margin-top: 0cm; mso-add-space: auto;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;with the status &lt;i style="mso-bidi-font-style: normal;"&gt;planned&lt;/i&gt; and the comment&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; margin-left: 38.1pt; margin-right: 0cm; margin-top: 0cm; mso-add-space: auto;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri;"&gt;"&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;We have a dedicated team of people who work on startup performance. We see significant improvement so far, but we know that it should be much faster. &lt;/span&gt;We will update you when we have more data&lt;/i&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri;"&gt; &lt;span lang="EN-US"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-bottom: .0001pt; margin-bottom: 0cm; margin-left: 38.1pt; margin-right: 0cm; margin-top: 0cm; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;span lang="EN-US" style="font-family: Symbol; mso-ansi-language: EN-US; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Quick application startup&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-bottom: .0001pt; margin-bottom: 0cm; margin-left: 38.1pt; margin-right: 0cm; margin-top: 0cm; mso-add-space: auto;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;with the status &lt;i style="mso-bidi-font-style: normal;"&gt;under review&lt;/i&gt; and the comment&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 35.4pt;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri;"&gt;"&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Many people asked this so we are reviewing this item&lt;/span&gt;&lt;/i&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri;"&gt; "&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_rpz_ucpdDqg/S6TGrowOOsI/AAAAAAAAAFU/FRj-EagJfWA/s1600/JavaFXUserVox.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh5.ggpht.com/_rpz_ucpdDqg/S6TGrowOOsI/AAAAAAAAAFU/FRj-EagJfWA/s320/JavaFXUserVox.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 35.4pt;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-192034406940269008?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/192034406940269008/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=192034406940269008' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/192034406940269008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/192034406940269008'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/03/more-ui-controls-for-next-release.html' title='More UI controls for the next release'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_rpz_ucpdDqg/S6TGrwGJ-_I/AAAAAAAAAFY/wSmM9A-GQ3Q/s72-c/myvotes.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-1124737053642451241</id><published>2010-03-15T00:23:00.002+01:00</published><updated>2010-03-18T22:54:46.498+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom component'/><category scheme='http://www.blogger.com/atom/ns#' term='JPA 2.0'/><title type='text'>JavaFX and JPA 2.0 with my custom component</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;In this third and last part, we are going to create a small application which dynamically updates the results in the result list when the user types the search word(s) in a text box.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_rpz_ucpdDqg/S51s9XEZIpI/AAAAAAAAAEc/syvrqQTR22Y/JavaFXJPACustomComponent.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166" src="http://lh4.ggpht.com/_rpz_ucpdDqg/S51s9XEZIpI/AAAAAAAAAEc/syvrqQTR22Y/JavaFXJPACustomComponent.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; To do that we will re-use the table and the entity created in the &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2010/02/examples-using-jpa-20.html"&gt;part one&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;, the java class MusicServices.java created in the&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2010/03/title-javafx-and-databases-with-jpa-20.html"&gt; part two&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; and &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2009/10/javafx-custom-component.html"&gt;my search text box&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; that &lt;/span&gt;&lt;span lang="EN-US"&gt;I've &lt;a href="http://paddyweblog.blogspot.com/2009/11/javafx-style-sheet-with-my-custom.html"&gt;created some time ago&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; (with a small correction).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.comment {color: #969696}
.string {color: #ce7b00}
.keyword {color: #0000e6}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Main.fx&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword"&gt;package&lt;/span&gt; javafxjpa2searchtextbox;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Text;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Font;
&lt;span class="keyword"&gt;import&lt;/span&gt; customcomponent.SearchTextBox;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.ListView;
&lt;span class="keyword"&gt;import&lt;/span&gt; paddy.domain.Music;
&lt;span class="keyword"&gt;import&lt;/span&gt; paddy.service.MusicServices;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author Patrick&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

&lt;span class="keyword"&gt;var&lt;/span&gt; listMusic;

&lt;span class="keyword"&gt;var&lt;/span&gt; seqMusic:Music[];

&lt;span class="keyword"&gt;var&lt;/span&gt; musicServices:MusicServices = MusicServices{};

Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Application titl&lt;/span&gt;&lt;span class="string"&gt;e&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    width: 600
    height: 250
    scene: Scene {
        stylesheets : [&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;{__DIR__}&lt;span class="string"&gt;resources/mac.css&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;]
        content: [
            Text {
                font: Font {
                    size: 16
                }
                x: 10
                y: 30
                content: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Search DB&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
            }
            SearchTextBox {
                translateX: 10
                translateY: 40
                onResetSearch: &lt;span class="keyword"&gt;function&lt;/span&gt; () {
                    println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;reset !&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                        &lt;span class="keyword"&gt;delete&lt;/span&gt; seqMusic;
                    }
                onSearch: &lt;span class="keyword"&gt;function&lt;/span&gt; (s: String) {
                    println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Search of : &lt;/span&gt;{s}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);

                    listMusic = musicServices.getArtisteNameBeginingBy(s);
                    &lt;span class="keyword"&gt;delete&lt;/span&gt; seqMusic;
                    seqMusic = listMusic.toArray(seqMusic);

                    }
            }
            ListView {
                layoutY: 75
                width: 575
                height: 100
                items: &lt;span class="keyword"&gt;bind&lt;/span&gt; seqMusic
            }
        ]
    }
}
&lt;/pre&gt;&lt;u&gt;&lt;br /&gt;
&lt;/u&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;The key points:&lt;/span&gt;&lt;u&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-list: l0 level1 lfo1;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Delete      the sequence on the onResetSearch event of the SearchTextBox component&lt;br /&gt;
&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;delete seqMusic;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-list: l0 level1 lfo1;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Call the getArtisteNameBeginningBy      method, delete the sequence and refill it on the onSearch event &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;of the SearchTextBox component&lt;br /&gt;
&lt;i style="mso-bidi-font-style: normal;"&gt;listMusic =      musicServices.getArtisteNameBeginningBy(s);&lt;br /&gt;
delete seqMusic;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;seqMusic = listMusic.toArray(seqMusic);&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; margin-left: 36.0pt; margin-right: 0cm; margin-top: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 15.6pt; margin-bottom: 9.0pt; tab-stops: 175.85pt;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: FR;"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/march/javafxjpa2searchtextbox/JavaFX-JPA2-SearchTextBox.zip"&gt;Get the NetBeans project&lt;/a&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 15.6pt; margin-bottom: 9.0pt;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Note: don’t forget to create (in NetBeans) a library containing the jar DerbyClient.jar and being called DerbyClient.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-1124737053642451241?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/1124737053642451241/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=1124737053642451241' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1124737053642451241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1124737053642451241'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/03/javafx-and-jpa-20-with-my-custom.html' title='JavaFX and JPA 2.0 with my custom component'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_rpz_ucpdDqg/S51s9XEZIpI/AAAAAAAAAEc/syvrqQTR22Y/s72-c/JavaFXJPACustomComponent.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-3780844600554407578</id><published>2010-03-02T23:10:00.006+01:00</published><updated>2010-03-07T23:37:30.745+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='JPA 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>JavaFX and the Databases with JPA 2.0</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;In the &lt;a href="http://paddyweblog.blogspot.com/2010/02/examples-using-jpa-20.html"&gt;first part&lt;/a&gt;, we have seen how to access data with JPA. In this second part we are going to see how to get data from database with JPA 2.0 and to display them with JavaFX.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_rpz_ucpdDqg/S4158i_IrrI/AAAAAAAAAD8/5j8RvjobJX4/JavaFXJPA20-basic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="105" src="http://lh4.ggpht.com/_rpz_ucpdDqg/S4158i_IrrI/AAAAAAAAAD8/5j8RvjobJX4/JavaFXJPA20-basic.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;To do that we will re-use the table and the entity created in the part one, and we will create a Java class which contains the code to execute the JPA requests.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Let’s go and create the Java class. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;The Java class contains one constructor to create the EntityManager and 2 methods: &lt;br /&gt;
&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;u&gt;findAll():&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
This method gets all the records from the table and uses the namedQuery findAllAlbum&lt;br /&gt;
&lt;br /&gt;
&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;u&gt;getArtisteNameBeginningBy(String begining):&lt;br /&gt;
&lt;/u&gt;&lt;/i&gt;This method get all the records from the table where the field artisteName begin by the parameter &lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri;"&gt;"&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;begining&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri;"&gt;"&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;For this second method, I use criteria API just because I wanted to test it…&lt;br /&gt;
Normally in this case, we don’t have to use criteria API because we don’t need to create dynamically a query and the criteria API was created to build dynamically and safely a query (without to concatenate strings to build a jpql request, like in JPA 1.0).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;The best way to do that, is to use directly a jpql request like this&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.comment {color: #969696}
.string {color: #ce7b00}
.keyword {color: #0000e6}
.ST0 {color: #969696; font-family: Monospaced; font-weight: bold}
.character {color: #ce7b00}
.keyword-directive {color: #0000e6}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;pre&gt;Query query = em.createQuery(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;select m from Music m where m.artisteName like :param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
query.setParameter(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, param);
List&amp;lt;Music&amp;gt; musics = query.getResultList();&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt; Or, if you want, create another namedQuery in the Entity &lt;br /&gt;
&lt;span &gt;&lt;br /&gt;
&lt;pre&gt;@NamedQueries({
   @NamedQuery(name = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;findAllAlbum&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, query= &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;select m from Music m&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;),
   @NamedQuery(name = &lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;findAllAlbumWhereArtisteLike&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;,query=&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;select m from Music m where m.artisteName like :param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;)
})&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;
And call it like that&lt;br /&gt;
&lt;span &gt;&lt;br /&gt;
&lt;pre&gt;Query  query = em.createNamedQuery(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;findAllAlbumWhereArtisteLike&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
query.setParameter(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;param&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;, param);
List&amp;lt;Music&amp;gt; musics = query.getResultList();
&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;
We will not use this method in this part but in the last part.&lt;br /&gt;
&lt;span &gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;MusicServices.java&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; paddy.service;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.util.List;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.EntityManager;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.EntityManagerFactory;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.Persistence;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.Query;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.criteria.CriteriaBuilder;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.criteria.CriteriaQuery;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.criteria.Root;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; paddy.domain.Music;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; *&lt;/span&gt;
&lt;span class="comment"&gt; * &lt;/span&gt;&lt;span class="ST0"&gt;@author&lt;/span&gt; &lt;span class="comment"&gt;Patrick&lt;/span&gt;
 &lt;span class="comment"&gt;*/&lt;/span&gt;
&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; MusicServices {

    EntityManagerFactory emf;
    EntityManager em;

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; MusicServices(){
        emf = Persistence.createEntityManagerFactory(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;MusicAndLight&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        em = emf.createEntityManager();
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; List&amp;lt;Music&amp;gt; findAll(){

        Query  query = em.createNamedQuery(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;findAllAlbum&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;);
        List&amp;lt;Music&amp;gt; musics = query.getResultList();

        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; musics;
    }

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; List&amp;lt;Music&amp;gt; getArtisteNameBeginningBy(String begining){

        String param = begining+&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;%&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;;

        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery&amp;lt;Music&amp;gt; query = cb.createQuery(Music.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);
        
        Root&amp;lt;Music&amp;gt; music = query.from(Music.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);
        query.where(cb.like(music.&amp;lt;String&amp;gt;get(&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;&lt;span class="character"&gt;artisteName&lt;/span&gt;&lt;span class="character"&gt;&amp;quot;&lt;/span&gt;), param));
        List&amp;lt;Music&amp;gt; musics = em.createQuery(query).getResultList();

        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; musics;
    }

    @Override
    &lt;span class="keyword-directive"&gt;protected&lt;/span&gt; &lt;span class="keyword-directive"&gt;void&lt;/span&gt; finalize() &lt;span class="keyword-directive"&gt;throws&lt;/span&gt; Throwable {
        &lt;span class="keyword-directive"&gt;try&lt;/span&gt; {
            em.close();
            emf.close();
        } &lt;span class="keyword-directive"&gt;finally&lt;/span&gt; {
            &lt;span class="keyword-directive"&gt;super&lt;/span&gt;.finalize();
        }
    }
}
&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;
Now, let’s call this class from javaFX to get the data from the database and to display them in JavaFX&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Main.fx&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword"&gt;package&lt;/span&gt; javafxjpa2basic;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.ListView;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.Button;
&lt;span class="keyword"&gt;import&lt;/span&gt; paddy.domain.Music;
&lt;span class="keyword"&gt;import&lt;/span&gt; paddy.service.MusicServices;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author Patrick&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

&lt;span class="keyword"&gt;var&lt;/span&gt; listMusic;
&lt;span class="keyword"&gt;var&lt;/span&gt; seqMusic:Music[];

&lt;span class="keyword"&gt;var&lt;/span&gt; musicServices:MusicServices = MusicServices{};

Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Application title&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    scene: Scene {
        width: 600
        height: 175
        content: [
            Button {
                text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Find all the musics&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                        &lt;span class="keyword"&gt;delete&lt;/span&gt; seqMusic;

                        listMusic = musicServices.findAll();
                        seqMusic = listMusic.toArray(seqMusic);                        

                        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;seqMusic: &lt;/span&gt;{seqMusic} &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                }
            }
            ListView {
                layoutY : 50
                 width: 575
                 height : 100
                 items: &lt;span class="keyword"&gt;bind&lt;/span&gt; seqMusic
            }
        ]
    }
}
&lt;/pre&gt;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
The key points :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-list: l0 level1 lfo1;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Creating an instance of the Java class in      JavaFX&lt;br /&gt;
&lt;i style="mso-bidi-font-style: normal;"&gt;var musicServices:MusicServices =      MusicServices{};&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-list: l0 level1 lfo1;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Calling      the findAll method&lt;br /&gt;
&lt;i style="mso-bidi-font-style: normal;"&gt;listMusic = musicServices.findAll();&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-list: l0 level1 lfo1;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Converting      the java list to a JavaFX sequence&lt;br /&gt;
&lt;i style="mso-bidi-font-style: normal;"&gt;seqMusic =      listMusic.toArray(seqMusic);&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-list: l0 level1 lfo1;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Binding      the sequence to the JavaFX GUI List&lt;br /&gt;
&lt;i style="mso-bidi-font-style: normal;"&gt;items: bind seqMusic&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal" style="line-height: 15.6pt; margin-bottom: 9.0pt;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: FR;"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/march/javafxjpa2basic/JavaFX-JPA2-Basic.zip"&gt;Get the NetBeans project&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 15.6pt; margin-bottom: 9.0pt;"&gt;&lt;u&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Note&lt;/span&gt;&lt;/u&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;: don’t forget to create (in NetBeans) a library containing the jar DerbyClient.jar and being called DerbyClient.&lt;/span&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: FR;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-3780844600554407578?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/3780844600554407578/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=3780844600554407578' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3780844600554407578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3780844600554407578'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/03/title-javafx-and-databases-with-jpa-20.html' title='JavaFX and the Databases with JPA 2.0'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_rpz_ucpdDqg/S4158i_IrrI/AAAAAAAAAD8/5j8RvjobJX4/s72-c/JavaFXJPA20-basic.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-2983431030558533141</id><published>2010-02-23T23:06:00.001+01:00</published><updated>2010-02-23T23:16:16.851+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Composer'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>JavaFX Composer, the blog!</title><content type='html'>The JavaFX Composer Team has opened a new blog about…&lt;br /&gt;
JavaFX Composer, of course ;)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://blogs.sun.com/javafxcomposer/"&gt;http://blogs.sun.com/javafxcomposer/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-2983431030558533141?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/2983431030558533141/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=2983431030558533141' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/2983431030558533141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/2983431030558533141'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/02/javafx-composer-blog.html' title='JavaFX Composer, the blog!'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-3600134638640630242</id><published>2010-02-22T23:15:00.018+01:00</published><updated>2010-02-24T22:42:19.867+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CriteriaBuilder'/><category scheme='http://www.blogger.com/atom/ns#' term='JPA 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Criteria API'/><category scheme='http://www.blogger.com/atom/ns#' term='CriteriaQuery'/><title type='text'>Examples using JPA 2.0</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;This is the first part of 3 that shows you how to get data from database with JPA 2.0 and display them with JavaFX.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;In this first part we are going: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US"&gt;to create the database and one      table&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US"&gt;to create the entity and the      persistence.xml file&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US"&gt;to use a namedQuery &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list 36.0pt;"&gt;&lt;span lang="EN-US"&gt;to use criteria query API&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;u&gt;&lt;span lang="EN-US" style="font-size: 10pt;"&gt;Create the database and the table&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l0 level1 lfo2;"&gt;&lt;span lang="EN-US"&gt;Create a derby database with :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul style="margin-top: 0cm;" type="circle"&gt;&lt;li class="MsoNormal" style="mso-list: l0 level2 lfo2;"&gt;&lt;span lang="EN-US"&gt;Database Name : javafxDB&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l0 level2 lfo2;"&gt;&lt;span lang="EN-US"&gt;UserName : APP&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l0 level2 lfo2;"&gt;&lt;span lang="EN-US"&gt;Password : paddy&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l0 level1 lfo2;"&gt;&lt;span lang="EN-US"&gt;Create the music table and fill it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal" style="margin-left: 36.0pt;"&gt;&lt;span lang="EN-US"&gt;Execute &lt;a href="http://pagesperso-orange.fr/paddy.fr/february/jpa20/Music.sql"&gt;this script&lt;/a&gt; to create the music table and fill it&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 36.0pt;"&gt;&lt;span lang="EN-US"&gt;The music table has 3 fields: an auto generated id, the name of the artist (artist_name) and the name of the album (album_title) …&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 36.0pt;"&gt;&lt;span lang="EN-US"&gt;And of course, it’s just for an example ;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;u&gt;&lt;span lang="EN-US" style="font-size: 10pt;"&gt;The Entity and the persistence unit&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l1 level1 lfo3;"&gt;&lt;span lang="EN-US"&gt;The Entity which is mapped to music table&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal" style="margin-left: 36.0pt;"&gt;&lt;/div&gt;&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.ST0 {color: #969696; font-family: Monospaced; font-weight: bold}
.comment {color: #969696}
.ST1 {color: #ce7b00; font-family: Monospaced; font-weight: bold}
.character {color: #ce7b00}
.keyword-directive {color: #0000e6}
.xml-attribute {color: #009900}
.xml-value {color: #ce7b00}
.xml-tag {color: #0000e6}
--&gt;
&lt;/style&gt;&lt;br /&gt;
&lt;table  width="100%"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align="center"&gt;Music.java&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;pre&gt;&lt;span class="keyword-directive"&gt;package&lt;/span&gt; paddy.domain;

&lt;span class="keyword-directive"&gt;import&lt;/span&gt; java.io.Serializable;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.Column;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.Entity;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.GeneratedValue;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.Id;
&lt;span class="keyword-directive"&gt;import&lt;/span&gt; javax.persistence.NamedQuery;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; *&lt;/span&gt;
&lt;span class="comment"&gt; * &lt;/span&gt;&lt;span class="ST0"&gt;@author&lt;/span&gt; &lt;span class="comment"&gt;Patrick&lt;/span&gt;
 &lt;span class="comment"&gt;*/&lt;/span&gt;
@Entity
@NamedQuery(name = &lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;fin&lt;/span&gt;&lt;span class="character"&gt;dAllAlbum&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;, query= &lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;select m from Music m&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;)

&lt;span class="keyword-directive"&gt;public&lt;/span&gt; &lt;span class="keyword-directive"&gt;class&lt;/span&gt; Music &lt;span class="keyword-directive"&gt;implements&lt;/span&gt; Serializable {

    @Id
    @GeneratedValue
    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; Long id;
    @Column(name = &lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;artist_name&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;)
    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; String artisteName;
    @Column(name = &lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;album_title&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;)
    &lt;span class="keyword-directive"&gt;private&lt;/span&gt; String albumTitle;

    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; Music() {
    }
    &lt;span class="comment"&gt;
    ...
    Getter and setter
    ...
    &lt;/span&gt;
    @Override
    &lt;span class="keyword-directive"&gt;public&lt;/span&gt; String toString(){

        StringBuffer sb = &lt;span class="keyword-directive"&gt;new&lt;/span&gt; StringBuffer();
        sb.append(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;id : &lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;);sb.append(id);sb.append(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt; ; &lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;);
        sb.append(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;artisteName : &lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;);sb.append(artisteName);sb.append(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt; ; &lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;);
        sb.append(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;albumTitle : &lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;);sb.append(albumTitle);
        sb.append(&lt;span class="character"&gt;"&lt;/span&gt; &lt;span class="ST1"&gt;\n&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;);

        &lt;span class="keyword-directive"&gt;return&lt;/span&gt; sb.toString();
    }

}
&lt;/pre&gt;&lt;div class="MsoNormal" style="margin-left: 0.0pt;"&gt;&lt;span lang="EN-US"&gt;Full source &lt;a href="http://pagesperso-orange.fr/paddy.fr/february/jpa20/Music.java"&gt;here&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;The entity is just a plain old Java object (pojo) with some annotations.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;
@Entity: &amp;nbsp;designate my pojo as an entity so I can use it with JPA services.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;@Id: designate the property as the entity's primary key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;@GeneratedValue: used with @Id, it defines that this value is generated automatically&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;@Column: is used, in my example, to mapped the property of the entity with the field of the table &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;@NamedQuery(name = "findAllAlbum", query= "select m from Music m")&amp;nbsp; is used &amp;nbsp;to create pre-defined queries which get all record from music table.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l1 level1 lfo3;"&gt;&lt;span lang="EN-US"&gt;The persistence.xml file&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;table  width="100%"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align="center"&gt;META-INF\persistence.xml&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;pre&gt;&lt;span class="ST0"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="ST0"&gt;xml&lt;/span&gt; version="1.0" encoding="UTF-8"?&amp;gt;
&lt;span class="xml-tag"&gt;&amp;lt;persistence&lt;/span&gt; &lt;span class="xml-attribute"&gt;version&lt;/span&gt;=&lt;span class="xml-value"&gt;"1.0"&lt;/span&gt; &lt;span class="xml-attribute"&gt;xmlns&lt;/span&gt;=&lt;span class="xml-value"&gt;"http://java.sun.com/xml/ns/persistence"&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="xml-tag"&gt;&amp;lt;persistence-unit&lt;/span&gt; &lt;span class="xml-attribute"&gt;name&lt;/span&gt;=&lt;span class="xml-value"&gt;"MusicAndLight"&lt;/span&gt; &lt;span class="xml-attribute"&gt;transaction-&lt;/span&gt;&lt;span class="xml-attribute"&gt;type&lt;/span&gt;=&lt;span class="xml-value"&gt;"RESOURCE_LOCAL"&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="xml-tag"&gt;&amp;lt;provider&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;org.eclipse.persistence.jpa.PersistenceProvider&lt;span class="xml-tag"&gt;&amp;lt;/provider&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="xml-tag"&gt;&amp;lt;class&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;paddy.domain.Music&lt;span class="xml-tag"&gt;&amp;lt;/class&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="xml-tag"&gt;&amp;lt;properties&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="xml-tag"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="xml-attribute"&gt;name&lt;/span&gt;=&lt;span class="xml-value"&gt;"eclipselink.target-database"&lt;/span&gt; &lt;span class="xml-attribute"&gt;value&lt;/span&gt;=&lt;span class="xml-value"&gt;"DERBY"&lt;/span&gt;&lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="xml-tag"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="xml-attribute"&gt;name&lt;/span&gt;=&lt;span class="xml-value"&gt;"javax.persistence.jdbc.driver"&lt;/span&gt; &lt;span class="xml-attribute"&gt;value&lt;/span&gt;=&lt;span class="xml-value"&gt;"org.apache.derby.jdbc.ClientDriver"&lt;/span&gt;&lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="xml-tag"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="xml-attribute"&gt;name&lt;/span&gt;=&lt;span class="xml-value"&gt;"javax.pe&lt;/span&gt;&lt;span class="xml-value"&gt;rsistence.jdbc.url"&lt;/span&gt; &lt;span class="xml-attribute"&gt;value&lt;/span&gt;=&lt;span class="xml-value"&gt;"jdbc:derby://localhost:1527/javafxDB"&lt;/span&gt;&lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="xml-tag"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="xml-attribute"&gt;name&lt;/span&gt;=&lt;span class="xml-value"&gt;"javax.persistence.jdbc.user"&lt;/span&gt; &lt;span class="xml-attribute"&gt;value&lt;/span&gt;=&lt;span class="xml-value"&gt;"APP"&lt;/span&gt;&lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="xml-tag"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="xml-attribute"&gt;name&lt;/span&gt;=&lt;span class="xml-value"&gt;"javax.persistence.jdbc.password"&lt;/span&gt; &lt;span class="xml-attribute"&gt;value&lt;/span&gt;=&lt;span class="xml-value"&gt;"p&lt;/span&gt;&lt;span class="xml-value"&gt;addy"&lt;/span&gt;&lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="xml-tag"&gt;&amp;lt;/properties&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="xml-tag"&gt;&amp;lt;/persistence-unit&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="xml-tag"&gt;&amp;lt;/persistence&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;div class="MsoNormal" style="margin-left: 0.0pt;"&gt;&lt;span lang="EN-US"&gt;The persistence.xml file defined:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;ul style="margin-top: 0cm;" type="circle"&gt;&lt;li class="MsoNormal" style="mso-list: l1 level2 lfo3;"&gt;&lt;span lang="EN-US"&gt;the persistence unit named MusicAndLight&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l1 level2 lfo3;"&gt;&lt;span lang="EN-US"&gt;the entity (paddy.domain.Music) managed       by the persistence unit&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l1 level2 lfo3;"&gt;&lt;span lang="EN-US"&gt;and how the persistence unit connects to       the database &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;u&gt;&lt;span lang="EN-US" style="font-size: 10pt;"&gt;Execute query by using a namedQuery &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;table  width="100%"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align="center"&gt;namedQuery&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;pre&gt;EntityManagerFactory emf = Persistence.createEntityManagerFactory(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;MusicAndLight&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;);
        EntityManager em = emf.createEntityManager();

        &lt;span class="comment"&gt;//get and create the namedQuery findAllBum&lt;/span&gt;
        Query  query = em.createNamedQuery(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;findAllAlbum&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;);
        &lt;span class="comment"&gt;//execute the query&lt;/span&gt;
        List&amp;lt;Music&amp;gt; musics = query.getResultList();

        &lt;span class="keyword-directive"&gt;for&lt;/span&gt; (Music music : musics){
            System.out.println(music);
        }

        em.close();
        emf.close();
    &lt;/pre&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;u&gt;&lt;span lang="EN-US" style="font-size: 10pt;"&gt;Execute query by using a criteria API&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;table  width="100%"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align="center"&gt;Criteria Api&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;pre&gt;EntityManagerFactory emf = Persistence.createEntityManagerFactory(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;MusicAndLight&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;);
        EntityManager em = emf.createEntityManager();

        String param = &lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;Arc%&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;;

        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery&amp;lt;Music&amp;gt; query2 = cb.createQuery(Music.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);
        &lt;span class="comment"&gt;//select * from Music&lt;/span&gt;
        Root&amp;lt;Music&amp;gt; music2 = query2.from(Music.&lt;span class="keyword-directive"&gt;class&lt;/span&gt;);
        &lt;span class="comment"&gt;//where artisteName like param&lt;/span&gt;
        &lt;span class="comment"&gt;//in my example where artisteName like Arc% (begining by Arc)&lt;/span&gt;
        query2.where(cb.like(music2.&amp;lt;String&amp;gt;get(&lt;span class="character"&gt;"&lt;/span&gt;&lt;span class="character"&gt;artisteName&lt;/span&gt;&lt;span class="character"&gt;"&lt;/span&gt;), param));
        &lt;span class="comment"&gt;//execute the query&lt;/span&gt;
        List&amp;lt;Music&amp;gt; musics2 = em.createQuery(query2).getResultList();

        &lt;span class="keyword-directive"&gt;for&lt;/span&gt; (Music music : musics2){
            System.out.println(music);
        }

        em.close();
        emf.close();
    &lt;/pre&gt;&lt;div class="MsoNormal"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/february/jpa20/result.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://pagesperso-orange.fr/paddy.fr/february/jpa20/result.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/february/jpa20/TestJpa20.zip"&gt;Get the NetBeans project&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;u&gt;&lt;span lang="EN-US"&gt;Note&lt;/span&gt;&lt;/u&gt;&lt;span lang="EN-US"&gt;: don’t forget to create (in NetBeans) a library containing the jar DerbyClient.jar and being called DerbyClient.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-3600134638640630242?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/3600134638640630242/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=3600134638640630242' title='6 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3600134638640630242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3600134638640630242'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/02/examples-using-jpa-20.html' title='Examples using JPA 2.0'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-7561491186680136766</id><published>2010-01-25T00:09:00.008+01:00</published><updated>2010-01-25T00:17:32.187+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu 9.10'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='GTK+'/><title type='text'>Eclipse et Ubuntu 9.10 …</title><content type='html'>&lt;div class="MsoNormal"&gt;Au départ, je voulais juste installer le plugin Android avec la dernière version d’Eclipse(3.5.1) sur mon Ubuntu 9.10.&amp;nbsp; &lt;br /&gt;
La chose parait assez simple de premier abord…&lt;br /&gt;
Mais impossible d’installer le plugin, les boutons ne produisent aucune action, les listes ne s’affichent pas, etc…&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;La cause du problème provient d’Eclipse qui utilise la bibliothèque UI SWT se basant les composants UI natif &amp;nbsp;GTK+ &lt;br /&gt;
et comme le comportement interne de GTK+ a changé dans la version de GTK+ (2.18) utilisée dans Ubuntu 9.10 et que SWT utilise très mal et bidouille trop GTK+, ca ne marche plus.&lt;br /&gt;
&lt;a href="https://bugs.launchpad.net/ubuntu/+source/gtk+2.0/+bug/442078/comments/28"&gt;https://bugs.launchpad.net/ubuntu/+source/gtk+2.0/+bug/442078/comments/28&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Heureusement les créateurs on prévu le coup et il existe une variable pour redonner le comportement d’avant avec cette version de GTK+.&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;La solution est donc de créer un script &amp;nbsp;pour lancer Eclipse avec la variable GDK_NATIVE_WINDOWS positionnée à&amp;nbsp; 1&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;div class="MsoNormal"&gt;&lt;u&gt;&lt;span lang="EN-US"&gt;launch_eclipse.sh&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: small;"&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: small;"&gt;export &amp;nbsp;GDK_NATIVE_WINDOWS=1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: small;"&gt;/home/patrick/patrick/program/eclipse.org/eclipse-javaEE-galileo/eclipse/eclipse&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span lang="EN-US"&gt;Ou &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: small;"&gt;/home/patrick/patrick/program/eclipse.org/eclipse-javaEE-galileo/eclipse/eclipse&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;est l’emplacement de votre exécutable Eclipse&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;Sinon NetBeans fonctionne très bien&amp;nbsp;;)&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Note&amp;nbsp;: Le problème existe aussi avec toutes les applications Eclipse RCP et je pense SWT&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Note2&amp;nbsp;: &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291257"&gt;La fiche de bug Eclipse&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-7561491186680136766?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/7561491186680136766/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=7561491186680136766' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7561491186680136766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7561491186680136766'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/01/au-depart-je-voulais-juste-installer-le.html' title='Eclipse et Ubuntu 9.10 …'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-1818299245875277660</id><published>2010-01-10T00:26:00.013+01:00</published><updated>2010-01-10T00:53:13.825+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='FloatMap'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrolling'/><category scheme='http://www.blogger.com/atom/ns#' term='DisplacementMap'/><title type='text'>Scrolling with DisplacementMap effect</title><content type='html'>&lt;script src="http://dl.javafx.com/1.2/dtfx.js"&gt;&lt;/script&gt;
&lt;script&gt;
    javafx(
        {
 codebase : "http://pagesperso-orange.fr/paddy.fr/applet/scrolllinesindemo",
              archive: "ScrollLineSinDemo.jar",
              draggable: true,
              width: 320,
              height: 150,
              code: "scrolllinesindemo.Main",
              name: "ScrollLineSinDemo"
        }
    );
&lt;/script&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;Bonne Année ! , Happy New Year !&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;For beginning this New Year, I added a sinusoidal effect to my &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://paddyweblog.blogspot.com/2009/12/old-school-scroll-line.html"&gt;scroll&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;.&lt;br&gt;
To do that, I added a &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://java.sun.com/javafx/1.2/docs/api/javafx.scene.effect/javafx.scene.effect.DisplacementMap.html"&gt;DisplacementMa&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://java.sun.com/javafx/1.2/docs/api/javafx.scene.effect/javafx.scene.effect.DisplacementMap.html"&gt;p&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;  effect to the scroll line.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
--&gt;
&lt;/style&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;DisplacementMap Effect&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
                    effect: DisplacementMap { mapData: map
                                              input:Reflection {
                                                   fraction: 0.75
                                                   topOffset: 0.0
                                                   topOpacity: 0.5
                                                   bottomOpacity: 0.0
                                               } 
                  } &lt;/pre&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;And I created a FloatMap to make the sinusoidal effect&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;FloatMap&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="keyword"&gt;var&lt;/span&gt; widthScroll = letterWidth * 10;    &lt;span class="comment"&gt;// 10 chars&lt;/span&gt;
&lt;span class="keyword"&gt;var&lt;/span&gt; map = FloatMap { width: widthScroll height: letterHeight }
&lt;span class="ST0"&gt;for&lt;/span&gt; (i:Integer &lt;span class="keyword"&gt;in&lt;/span&gt; [0..&amp;lt;widthScroll]) {
    &lt;span class="keyword"&gt;var&lt;/span&gt; v = (Math.sin(i/35.0*Math.PI)-0.5)/30.0;
    &lt;span class="ST0"&gt;for&lt;/span&gt; (j:Integer &lt;span class="keyword"&gt;in&lt;/span&gt; [0..&amp;lt;letterHeight]) {
        map.setSamples(i, j, 0.0, v);
    }
}&lt;/pre&gt;

As you see in the code, the DisplacementMap &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;effect&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;take a FloatMap as parameter.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;And each individual entry in the FloatMap contains per-pixel offset information in the x and y direction.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;For example if you have this image&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;img src="http://pagesperso-orange.fr/paddy.fr/applet/scrolllinesindemo/normalScroll.jpg" style="cursor:pointer; cursor:hand;width: 321px; height: 42px;" border="0" alt="" /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;My FloatMap contains offsets x and y to have&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;img src="http://pagesperso-orange.fr/paddy.fr/applet/scrolllinesindemo/floatMap.jpg" style="cursor:pointer; cursor:hand;width: 321px; height: 38px;" border="0" alt="" /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/applet/scrolllinesindemo/Main.fx"&gt;Download full Main.fx&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/applet/scrolllinesindemo/StringConverter.fx"&gt;Download &lt;/a&gt;&lt;span style="color:windowtext;text-decoration:none;text-underline:none"&gt;&lt;a href="http://pagesperso-orange.fr/paddy.fr/applet/scrolllinesindemo/StringConverter.fx"&gt;StringConverter.fx&lt;/a&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-1818299245875277660?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/1818299245875277660/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=1818299245875277660' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1818299245875277660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1818299245875277660'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2010/01/scrolling-with-displacementmap-effect.html' title='Scrolling with DisplacementMap effect'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-8380726474594263616</id><published>2009-12-19T01:12:00.006+01:00</published><updated>2009-12-19T01:19:23.693+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Scroll line'/><category scheme='http://www.blogger.com/atom/ns#' term='Old School'/><category scheme='http://www.blogger.com/atom/ns#' term='Scroll'/><title type='text'>Old School Scroll line</title><content type='html'>&lt;script src="http://dl.javafx.com/1.2/dtfx.js"&gt;&lt;/script&gt;
&lt;script&gt;
    javafx(
        {
       codebase : "http://pagesperso-orange.fr/paddy.fr/applet/scrolllinedemo",
              archive: "ScrollLineDemo.jar",
              draggable: true,
              width: 320,
              height: 150,
              code: "scrolllinedemo.Main",
              name: "ScrollLineDemo"
        }
    );
&lt;/script&gt;  

&lt;div&gt;&lt;span lang="EN-US"&gt;This is my first try to make an old school scroll line like on my old Atari ST.&lt;br&gt;
Normally this is a bitmap effect, but in JavaFx all is nodes…&lt;br&gt;
So I use Nodes :) and this image (from &lt;/span&gt;&lt;a href="http://forum.deltaforceteam.de/forum/viewtopic.php?f=3&amp;amp;t=127"&gt;&lt;span lang="EN-US"&gt;http://forum.deltaforceteam.de/forum/viewtopic.php?f=3&amp;amp;t=127&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;span lang="EN-US"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pagesperso-orange.fr/paddy.fr/applet/scrolllinedemo/font.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://pagesperso-orange.fr/paddy.fr/applet/scrolllinedemo/font.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;The viewports variable is a sequence which contains for each character the portion of the image corresponding to it.&lt;br&gt;
The line variable is a concatenation of the viewports of the letters to build the text shown in the screen.&lt;br&gt;
And the timeline is used to scroll the text&lt;br&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;I add a Reflection effect too :)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
pre {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.comment {color: #969696}
.string {color: #ce7b00}
.keyword {color: #0000e6}
.ST0 {color: #0000e6; font-family: Monospaced; font-weight: bold}
.time {color: #ff00ff}
--&gt;
&lt;/style&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Main.fx&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="keyword"&gt;package&lt;/span&gt; scrolllinedemo;

&lt;span class="comment"&gt;/*&lt;/span&gt;
&lt;span class="comment"&gt; * Main.fx&lt;/span&gt;
&lt;span class="comment"&gt; *&lt;/span&gt;
&lt;span class="comment"&gt; * Created on 12 dÃ©c. 2009, 00:08:52&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.geometry.Rectangle2D;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.image.ImageView;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.image.Image;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.animation.KeyFrame;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.animation.Timeline;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.effect.Reflection;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Group;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.shape.Rectangle;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.TextBox;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.Button;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author Patrick&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

&lt;span class="keyword"&gt;def&lt;/span&gt; letterWidth = 32;
&lt;span class="keyword"&gt;def&lt;/span&gt; letterHeight = 32;

&lt;span class="keyword"&gt;var&lt;/span&gt; blankLine = [   0,   0,   0,   0,   0,   0,   0,  0,  0,  0 ];

&lt;span class="keyword"&gt;var&lt;/span&gt; text = &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Hello, this is my first old school scroll line demo. by Patrick ! &lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;;

&lt;span class="keyword"&gt;var&lt;/span&gt; textFont = StringConverter.stringToFont(text);
&lt;span class="keyword"&gt;insert&lt;/span&gt; blankLine &lt;span class="keyword"&gt;before&lt;/span&gt; textFont[0];
&lt;span class="keyword"&gt;var&lt;/span&gt; textLength = &lt;span class="keyword"&gt;sizeof&lt;/span&gt;(textFont)-1;
&lt;span class="keyword"&gt;insert&lt;/span&gt; blankLine &lt;span class="keyword"&gt;into&lt;/span&gt; textFont;

&lt;span class="keyword"&gt;var&lt;/span&gt; textIncrement = 0;

&lt;span class="keyword"&gt;var&lt;/span&gt; font = Image {
   url: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;{__DIR__}&lt;span class="string"&gt;img/font.png&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
}

&lt;span class="keyword"&gt;def&lt;/span&gt; viewports = &lt;span class="ST0"&gt;for&lt;/span&gt; (row &lt;span class="keyword"&gt;in&lt;/span&gt; [0..5]) {
   &lt;span class="ST0"&gt;for&lt;/span&gt; (col &lt;span class="keyword"&gt;in&lt;/span&gt; [0..9]) {
       Rectangle2D{
           minX: col * letterWidth, minY: row * letterHeight, height: letterWidth, width: letterHeight
       }
   }
}

&lt;span class="keyword"&gt;var&lt;/span&gt; line = &lt;span class="keyword"&gt;bind&lt;/span&gt;
   &lt;span class="ST0"&gt;for&lt;/span&gt; (col &lt;span class="keyword"&gt;in&lt;/span&gt; [0..10]) {   &lt;span class="comment"&gt;//10 chars (320 = 32*10)&lt;/span&gt;
      ImageView {
         x: &lt;span class="keyword"&gt;bind&lt;/span&gt; (col * letterWidth) -scrollX , y:  0,
         viewport: &lt;span class="keyword"&gt;bind&lt;/span&gt; viewports[textFont[col+textIncrement]]
         image: font
      }
   }

&lt;span class="keyword"&gt;var&lt;/span&gt; scrollX =0;

&lt;span class="keyword"&gt;var&lt;/span&gt; t = Timeline {
                repeatCount: Timeline.INDEFINITE
                keyFrames : [
                        KeyFrame {
                                time : &lt;span class="time"&gt;0s&lt;/span&gt;
                                canSkip : &lt;span class="ST0"&gt;true&lt;/span&gt;
                        },
                        KeyFrame {

                                time : &lt;span class="time"&gt;8ms&lt;/span&gt;
                                canSkip : &lt;span class="ST0"&gt;true&lt;/span&gt;
                                action: &lt;span class="keyword"&gt;function&lt;/span&gt;(): Void{

                                  &lt;span class="keyword"&gt;var&lt;/span&gt; tempX = scrollX+1;
                                  &lt;span class="keyword"&gt;var&lt;/span&gt; tempTextIncrement = textIncrement;

                                   &lt;span class="ST0"&gt;if&lt;/span&gt; (tempX&amp;gt;=32){
                                       tempX = 0;
                                     &lt;span class="ST0"&gt;if&lt;/span&gt; (textIncrement&amp;lt;textLength)
                                        &lt;span class="keyword"&gt;then&lt;/span&gt; tempTextIncrement++
                                        &lt;span class="ST0"&gt;else&lt;/span&gt; tempTextIncrement = 0;

                                   }
                                   textIncrement = tempTextIncrement;
                                   scrollX = tempX;

                                }
                        }
                ]
        }

t.play();

&lt;span class="keyword"&gt;var&lt;/span&gt; tb:TextBox;

Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Application title&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    width: 335
    height: 150
    scene: Scene {
        content: [
                Group {
                    content:Group{
                        clip:Rectangle {
                                width:  320
                                height: 64
                            }
                        content: line
                    }
                    effect:Reflection {
                         fraction: 0.75
                         topOffset: 0.0
                         topOpacity: 0.5
                         bottomOpacity: 0.0
                    }
                  }
                
                tb = TextBox {
                        text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;try to type your text here... and press on GO!&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                        columns: 30
                        selectOnFocus: &lt;span class="ST0"&gt;true&lt;/span&gt;
                        translateY:70
                }
                Button {
                        text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;GO!&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                        action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                            &lt;span class="keyword"&gt;var&lt;/span&gt; textFontTemp = StringConverter.stringToFont(tb.text);
                            &lt;span class="keyword"&gt;insert&lt;/span&gt; blankLine &lt;span class="keyword"&gt;before&lt;/span&gt; textFontTemp[0];
                            textLength = &lt;span class="keyword"&gt;sizeof&lt;/span&gt;(textFontTemp)-1;
                            &lt;span class="keyword"&gt;insert&lt;/span&gt; blankLine &lt;span class="keyword"&gt;into&lt;/span&gt; textFontTemp;

                            textFont = textFontTemp;
                            textIncrement =0;
                        }
                        translateY:70
                        translateX:275
                }
        ]
    }
}

&lt;/pre&gt;

&lt;a href="http://pagesperso-orange.fr/paddy.fr/applet/scrolllinedemo/StringConverter.fx"&gt;download StringConverter.fx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-8380726474594263616?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/8380726474594263616/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=8380726474594263616' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8380726474594263616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8380726474594263616'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2009/12/old-school-scroll-line.html' title='Old School Scroll line'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-6954641383200056820</id><published>2009-12-13T20:50:00.007+01:00</published><updated>2009-12-13T21:05:20.953+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='référence'/><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Vancouver 2010'/><title type='text'>Les jeux olympiques d’hiver de Vancouver choisissent JavaFX</title><content type='html'>&lt;p class="MsoNormal"&gt;J’entends dire ou des personnes me disent, ouais, JavaFx c’est bien mais il n’y a personne qui l’utilise, &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;il n’y a pas de vraie référence, etc, &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;etc …&lt;/p&gt;  &lt;p class="MsoNormal"&gt;C’est vrai que JavaFx est une technologie récente (la versions 1.0 n’est sortie que l’année dernière&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;à cette même époque) et qu’il n’y a pas encore beaucoup de référence…
&lt;br&gt;
Mais cela commence à arriver, et cela commence avec les jeux olympiques d’hiver de Vancouver 2010 qui ont choisi JavaFX comme technologie de client riche !&lt;/p&gt;  &lt;p class="MsoNormal"&gt;On peut même déjà voir le résultat et essayer la première application disponible sur le site Vancouver2010 à l’adresse suivante :
&lt;a href="http://www.vancouver2010.com/olympic-medals/geo-view/"&gt;http://www.vancouver2010.com/olympic-medals/geo-view/&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Cette application sert à montrer :&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;les médailles qui &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;ont été gagné par les différents pays durant les différentes éditions des jeux olympiques d’hiver&lt;/li&gt;&lt;li&gt;quel athlète a gagné quelle médaille&lt;/li&gt;&lt;li&gt;Et plein d'autres choses...&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;C’est plutôt pas mal et ca marche super bien sur mon Mac (Snow Leopard), mon Linux (Ubuntu 9.10) et &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;Windows Vista et Seven.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-6954641383200056820?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/6954641383200056820/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=6954641383200056820' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6954641383200056820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6954641383200056820'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2009/12/les-jeux-olympiques-dhiver-de-vancouver.html' title='Les jeux olympiques d’hiver de Vancouver choisissent JavaFX'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-7973667029899417620</id><published>2009-12-10T23:01:00.008+01:00</published><updated>2009-12-10T23:11:44.563+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GlassFish V3'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans 6.8'/><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Composer'/><title type='text'>Glassfish V3, NetBeans 6.8, JavaFX Composer Preview</title><content type='html'>C’est noël avant l’heure ! :)
&lt;br&gt;&lt;br&gt;
&lt;a href="https://glassfish.dev.java.net/downloads/v3-final.html"&gt;GlassFish V3&lt;/a&gt; et &lt;a href="http://netbeans.org/downloads/index.html"&gt;NetBeans 6.8&lt;/a&gt; sont sorties aujourd’hui …&lt;div&gt;
Mais en plus, pour les personnes s’intéressant à JavaFX, la preview  de &lt;a href="http://netbeans.org/features/javafx/index.html"&gt;JavaFX Composer&lt;/a&gt; (&lt;a href="http://wiki.netbeans.org/JavaFXComposer"&gt;GUI Builder pour JavaFX&lt;/a&gt;) devrait être disponible le 15 décembre !!!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-7973667029899417620?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/7973667029899417620/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=7973667029899417620' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7973667029899417620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7973667029899417620'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2009/12/glassfish-v3-netbeans-68-javafx.html' title='Glassfish V3, NetBeans 6.8, JavaFX Composer Preview'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-6287992343836017572</id><published>2009-11-29T21:13:00.006+01:00</published><updated>2009-11-30T08:31:51.883+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Stylesheet'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom component'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>JavaFX Style Sheet with my custom component</title><content type='html'>&lt;p class="MsoNormal"&gt;
&lt;script src="http://dl.javafx.com/1.2/dtfx.js"&gt;&lt;/script&gt;
&lt;script&gt;
    javafx(
        {
       codebase : "http://pagesperso-orange.fr/paddy.fr/applet/customcomponent2",
              archive: "CustomComponentCSSDemo.jar",
              draggable: true,
              width: 200,
              height: 200,
              code: "customcomponentcssdemo.Main",
              name: "CustomComponentCSSDemo"
        }
    );
&lt;/script&gt;


&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;Because my &lt;a href="http://paddyweblog.blogspot.com/2009/10/javafx-custom-component.html"&gt;custom component&lt;/a&gt; doesn’t have a Mac look and feel (the rounded corners of the TextBox) and because I don’t want to change the code of my component, I decided to create a Mac Style Sheet.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;Now, let us study the Mac style sheet and the code to use this style sheet&lt;p&gt;
the Mac style sheet&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;- mac.css&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;
&lt;pre&gt;
.searchTextBox {corner-radius: 25;padding-left: 10}&lt;/pre&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;/p&gt;  
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;To have a rounded corners of the textbox, I use the CSS attribute corner-radius
and to move the position of the input cursor (because of the rounded corners), I use the CSS attribute padding-left&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;To use this CSS just set the style sheets attribute of your Scene with the location of your CSS file.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.string {color: #ce7b00}
--&gt;
&lt;/style&gt;
&lt;pre&gt;
    scene: Scene {
        stylesheets : [&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;{__DIR__}&lt;span class="string"&gt;resources/mac.css&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;]&lt;/pre&gt;
&lt;/p&gt;  
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;The code of the demo (the code of the custom component doesn’t change)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;resources\mac.css&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="comment"&gt;/* &lt;/span&gt;
&lt;span class="comment"&gt;    Document   : style&lt;/span&gt;
&lt;span class="comment"&gt;    Created on : 3 oct. 2009, 00:34:05&lt;/span&gt;
&lt;span class="comment"&gt;    Author     : paddy&lt;/span&gt;
&lt;span class="comment"&gt;    Description:&lt;/span&gt;
&lt;span class="comment"&gt;        Purpose of the sty&lt;/span&gt;&lt;span class="comment"&gt;lesheet follows.&lt;/span&gt;
&lt;span class="comment"&gt;*/&lt;/span&gt;

.searchTextBox {corner-radius: 25;padding-left: 10}
.searchTextBoxRed{corner-radius: 25;padding-left: 10;border-fill:#FF0000;}

&lt;/pre&gt;

&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Main.fx&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="comment"&gt;/*&lt;/span&gt;
&lt;span class="comment"&gt; * Main.fx&lt;/span&gt;
&lt;span class="comment"&gt; *&lt;/span&gt;
&lt;span class="comment"&gt; * Created on 3 oct. 2009, 00:44:05&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

&lt;span class="keyword"&gt;package&lt;/span&gt; customcomponentcssdemo;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Text;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Font;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.Button;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.RadioButton;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.ToggleGroup;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author Patrick&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

&lt;span class="keyword"&gt;class&lt;/span&gt; ExtRadioButton &lt;span class="keyword"&gt;extends&lt;/span&gt; RadioButton {
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; action:&lt;span class="keyword"&gt;function&lt;/span&gt;();

    &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; selected &lt;span class="keyword"&gt;on&lt;/span&gt; &lt;span class="keyword"&gt;replace&lt;/span&gt; {
        &lt;span class="ST0"&gt;if&lt;/span&gt; (selected) {
            action();
        }
    }
}

&lt;span class="keyword"&gt;def&lt;/span&gt; macStyleSheet=&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;{__DIR__}&lt;span class="string"&gt;resources/mac.css&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;;
&lt;span class="keyword"&gt;var&lt;/span&gt; stylesheets:String = macStyleSheet;

Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Application title&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    width: 250
    height: 200

    &lt;span class="keyword"&gt;var&lt;/span&gt; cssToggleGroup = ToggleGroup {};

    scene: Scene {
        &lt;span class="comment"&gt;//stylesheets : [&amp;quot;{__DIR__}resources/mac.css&amp;quot;]&lt;/span&gt;
        stylesheets : &lt;span class="keyword"&gt;bind&lt;/span&gt; stylesheets
        content: [
            Text {
                font : Font {
                    size : 16
                }
                x: 10
                y: 30
                content: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Search &lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
            }
            SearchTextBox {
                    &lt;span class="comment"&gt;//styleClass : &amp;quot;searchTextBoxRe&lt;/span&gt;&lt;span class="comment"&gt;d&amp;quot;&lt;/span&gt;
                    translateX :10
                    translateY :40
                    

                    onResetSearch:&lt;span class="keyword"&gt;fu&lt;/span&gt;&lt;span class="keyword"&gt;nction&lt;/span&gt;(){
                        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;reset !&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                    }
                    onSearch:&lt;span class="keyword"&gt;function&lt;/span&gt;(s: String){
                        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Search of : &lt;/span&gt;{s}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                    }
            }
            Button {
                    text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;just a button to change focus&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                    translateX :10
                    translateY :80
                    action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Hello !&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;)
                   }
            }

            ExtRadioButton {
                            text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;do not use the CSS&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                            translateX :10
                            translateY :110
                            toggleGroup: cssToggleGroup
                           &lt;span class="comment"&gt;/&lt;/span&gt;&lt;span class="comment"&gt;/ selected: true&lt;/span&gt;

                            action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                                stylesheets = &lt;span class="string"&gt;&amp;quot;&amp;nbsp;&amp;quot;&lt;/span&gt;;
                            }
            }

            ExtRadioButton {
                            text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;use the CSS&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                            translateX :10
                            translateY :130
                            toggleGroup: cssToggleGroup
                            selected: &lt;span class="ST0"&gt;true&lt;/span&gt;

                            action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                                stylesheets = macStyleSheet;
                            }
            }
        ]
    }
}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-6287992343836017572?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/6287992343836017572/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=6287992343836017572' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6287992343836017572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6287992343836017572'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2009/11/javafx-style-sheet-with-my-custom.html' title='JavaFX Style Sheet with my custom component'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-6001532838296706724</id><published>2009-11-15T23:58:00.018+01:00</published><updated>2009-11-16T23:56:52.085+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Les technologies RIA (Flex/Silvelight/JavaFX) hors et dans le navigateur</title><content type='html'>Toujours dans l'article sur les RIA du magazine Programmez n°124, il est dit que les 3 technologies RIA (Flex, Silverlight et JavaFX) peuvent fonctionner hors du navigateur et même que Silverlight hors du navigateur et équivalent à Adobe Air.
&lt;br&gt;
Que ces 3 technologies puissent fonctionner hors du navigateur est vrai, par contre dire que Silverlight hors du navigateur et équivalent à Adobe Air ce n'est pas vraiment exact.
&lt;br&gt;
Aussi, j'aimerais apporter quelques  précisions (non exhaustives) sur ces technologies RIA hors du navigateur (et dans le navigateur aussi pour comparer ;) ).
&lt;br&gt;


&lt;br&gt;
&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Silverlight&lt;/span&gt;&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;


Le mode hors du navigateur de Silverlight 3 est très limité, en effet une application Silverlight 3 s'exécutant hors du navigateur s'exécute aussi dans une sandbox,  la même sandbox (et même runtime) que celle utilisé par le navigateur quand l'application s'exécute dans le navigateur.&lt;br&gt;

L'application ne peut donc pas accéder aux ressources la machine ce qui est très limitant pour écrire une application desktop.&lt;br&gt;

Pour écrire une vraie application desktop avec accès aux ressources de la machine, il faut utiliser  WPF (uniquement Windows) qui diffère de Silverlight.&lt;br&gt;

Microsoft propose d'ailleurs un très bon whitepaper comparant les WPF et Silverlight.
&lt;a href="http://wpfslguidance.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28278"&gt;http://wpfslguidance.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28278&lt;/a&gt;&lt;br&gt;




&lt;br&gt;
&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Flex AIR et Browser&lt;/span&gt;&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;


Flex étant à la base une technologie pour écrire des applications s'exécutant dans le navigateur, Adobe a dû créer AIR pour pouvoir écrire des applications hors du navigateur.&lt;br&gt;

Adobe AIR permet d'utiliser les ressources de la machine, contrairement à Silverlight, et d'écrire de vraies applications desktop en Flex.&lt;br&gt;

Pourtant, il ne faut pas croire qu'une application écrite en Flex pour le navigateur va pourvoir fonctionner directement sur le desktop (hors du navigateur) car :
&lt;ul&gt;&lt;li&gt; Le runtime Air est différents du player Flash pour le navigateur&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Une application Flex/AIR est différente d'une application Flex pour le navigateur comme le montre ces 2 petits exemples de l'application Hello World pour Flex/AIR et Flex/navigateur.&lt;br&gt;
&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;(Air utilise le tag WindowedApplication pour créer sa fenêtre alors qu'une application Flex &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;utilise le tag Application)&lt;/li&gt;&lt;/ul&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;!-- body {color: #000000; background-color: #ffffff; font-family: Monospaced} table {color: #000000; background-color: #e9e8e2; font-family: Monospaced} .xml-cdata-section {color: #7c6200} .xml-attribute {color: #009900} .xml-value {color: #ce7b00} .ST0 {color: #00007c; font-family: Monospaced; font-weight: bold} .xml-tag {color: #0000e6} --&gt;&lt;br /&gt;&lt;/style&gt;
&lt;div&gt;
&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center"&gt;Application Flex/AIR&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="ST0"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="ST0"&gt;xml&lt;/span&gt; version="1.0" encoding="utf-8"?&amp;gt;
&lt;span class="xml-tag"&gt;&amp;lt;mx:WindowedApplication&lt;/span&gt; &lt;span class="xml-attribute"&gt;xmlns:mx&lt;/span&gt;=&lt;span class="xml-value"&gt;"http://www.adobe.com/2006/mxml"&lt;/span&gt; &lt;span class="xml-attribute"&gt;layout&lt;/span&gt;=&lt;span class="xml-value"&gt;"absolute"&lt;/span&gt; &lt;span class="xml-attribute"&gt;title&lt;/span&gt;=&lt;span class="xml-value"&gt;"Hello World"&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="xml-tag"&gt;&amp;lt;mx:Script&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="xml-cdata-section"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="xml-cdata-section"&gt;[CDATA[&lt;/span&gt;
&lt;span class="xml-cdata-section"&gt;         private function hello():void{&lt;/span&gt;
&lt;span class="xml-cdata-section"&gt;              myText.text = "Hello world !";&lt;/span&gt;
&lt;span class="xml-cdata-section"&gt;         }&lt;/span&gt;
&lt;span class="xml-cdata-section"&gt;      ]]&amp;gt;&lt;/span&gt;

&lt;span class="xml-tag"&gt;&amp;lt;/mx:Script&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="xml-tag"&gt;&amp;lt;mx:Text&lt;/span&gt; &lt;span class="xml-attribute"&gt;id&lt;/span&gt;=&lt;span class="xml-value"&gt;"myText"&lt;/span&gt; &lt;span class="xml-attribute"&gt;x&lt;/span&gt;=&lt;span class="xml-value"&gt;"10"&lt;/span&gt; &lt;span class="xml-attribute"&gt;y&lt;/span&gt;=&lt;span class="xml-value"&gt;"10"&lt;/span&gt; &lt;span class="xml-attribute"&gt;text&lt;/span&gt;=&lt;span class="xml-value"&gt;"..."&lt;/span&gt; &lt;span class="xml-attribute"&gt;width&lt;/span&gt;=&lt;span class="xml-value"&gt;"209"&lt;/span&gt;&lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="xml-tag"&gt;&amp;lt;mx:Button&lt;/span&gt; &lt;span class="xml-attribute"&gt;x&lt;/span&gt;=&lt;span class="xml-value"&gt;"154"&lt;/span&gt; &lt;span class="xml-attribute"&gt;y&lt;/span&gt;=&lt;span class="xml-value"&gt;"36"&lt;/span&gt; &lt;span class="xml-attribute"&gt;label&lt;/span&gt;=&lt;span class="xml-value"&gt;"Click me"&lt;/span&gt; &lt;span class="xml-attribute"&gt;enabled&lt;/span&gt;=&lt;span class="xml-value"&gt;"true"&lt;/span&gt; &lt;span class="xml-attribute"&gt;click&lt;/span&gt;=&lt;span class="xml-value"&gt;"hello()"&lt;/span&gt;&lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="xml-tag"&gt;&amp;lt;/mx:WindowedApplication&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;



&lt;/pre&gt;
&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center"&gt;Application Flex Brower&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="ST0"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="ST0"&gt;xml&lt;/span&gt; version="1.0" encoding="utf-8"?&amp;gt;
&lt;span class="xml-tag"&gt;&amp;lt;mx:Application&lt;/span&gt; &lt;span class="xml-attribute"&gt;xmlns:mx&lt;/span&gt;=&lt;span class="xml-value"&gt;"http://www.adobe.com/2006/mxml"&lt;/span&gt; &lt;span class="xml-attribute"&gt;layout&lt;/span&gt;=&lt;span class="xml-value"&gt;"absolute"&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="xml-tag"&gt;&amp;lt;mx:Script&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="xml-cdata-section"&gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;span class="xml-cdata-section"&gt;         private fun&lt;/span&gt;&lt;span class="xml-cdata-section"&gt;ction hello():void{&lt;/span&gt;
&lt;span class="xml-cdata-section"&gt;              myText.text = "Hello world !";&lt;/span&gt;
&lt;span class="xml-cdata-section"&gt;         }&lt;/span&gt;
&lt;span class="xml-cdata-section"&gt;      ]]&amp;gt;&lt;/span&gt;

&lt;span class="xml-tag"&gt;&amp;lt;/mx:Script&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="xml-tag"&gt;&amp;lt;mx:Text&lt;/span&gt; &lt;span class="xml-attribute"&gt;id&lt;/span&gt;=&lt;span class="xml-value"&gt;"myText"&lt;/span&gt; &lt;span class="xml-attribute"&gt;x&lt;/span&gt;=&lt;span class="xml-value"&gt;"10"&lt;/span&gt; &lt;span class="xml-attribute"&gt;y&lt;/span&gt;=&lt;span class="xml-value"&gt;"10"&lt;/span&gt; &lt;span class="xml-attribute"&gt;text&lt;/span&gt;=&lt;span class="xml-value"&gt;"..."&lt;/span&gt; &lt;span class="xml-attribute"&gt;width&lt;/span&gt;=&lt;span class="xml-value"&gt;"209"&lt;/span&gt;&lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="xml-tag"&gt;&amp;lt;mx:Button&lt;/span&gt; &lt;span class="xml-attribute"&gt;x&lt;/span&gt;=&lt;span class="xml-value"&gt;"154"&lt;/span&gt; &lt;span class="xml-attribute"&gt;y&lt;/span&gt;=&lt;span class="xml-value"&gt;"36"&lt;/span&gt; &lt;span class="xml-attribute"&gt;label&lt;/span&gt;=&lt;span class="xml-value"&gt;"Click me"&lt;/span&gt; &lt;span class="xml-attribute"&gt;enabled&lt;/span&gt;=&lt;span class="xml-value"&gt;"true"&lt;/span&gt; &lt;span class="xml-attribute"&gt;click&lt;/span&gt;=&lt;span class="xml-value"&gt;"hello()"&lt;/span&gt;&lt;span class="xml-tag"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="xml-tag"&gt;&amp;lt;/mx:Application&lt;/span&gt;&lt;span class="xml-tag"&gt;&amp;gt;&lt;/span&gt;

&lt;/pre&gt;
&lt;ul&gt;&lt;li&gt;La compilation se fait avec la commande mxmlc pour une application Flex navigateur, alors qu'il faut utiliser amxmlc pour une application AIR.&lt;br&gt;
En fait amxml n'est qu'un batch qui exécute mxmlc avec l'option +configname=air pour compiler une application Flex/AIR avec ses spécificités.
&lt;/li&gt;&lt;/ul&gt;



&lt;br&gt;
&lt;span style="font-weight:bold;"&gt;JavaFX&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;


JavaFX est la technologie la plus en avance sur l'exécution dans le navigateur et hors du navigateur.
En effet, JavaFX  :
&lt;ul&gt;&lt;li&gt; utilise le même runtime (JRE) que se soit pour une application desktop ou pour une application dans le navigateur. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;peut accéder, pour une application desktop, aux ressources de la machine comme une application java classique (lors son exécution dans le navigateur, il utilise une sandbox comme une applet java classique)&lt;/li&gt;&lt;li&gt; utilise le même SDK et les mêmes APIs que l'on écrive une application desktop ou une application pour le navigateur web. (le code JavaFx est identique dans les 2 cas) &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;utilise le même compilateur pour compiler une application JavaFX desktop ou navigateur (javafxc)&lt;/li&gt;&lt;/ul&gt;


&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Récapitulatif&lt;/span&gt;&lt;/span&gt;




&lt;table width="100%" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;  &lt;td&gt;
&lt;/td&gt;  &lt;td&gt;
Runtimes navigateur et
hors navigateur
identiques
&lt;/td&gt;   &lt;td&gt;
Accès aux ressources de la machine en mode hors du navigateur
&lt;/td&gt;   &lt;td&gt;
Code identique pour écrire une application navigateur web  ou desktop
&lt;/td&gt;   &lt;td&gt;
Compilateur/ SDK
identiques
&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;
Silverlight
&lt;/td&gt;  &lt;td&gt;
oui
&lt;/td&gt;   &lt;td&gt;
non
&lt;/td&gt;   &lt;td&gt;
oui
&lt;/td&gt;   &lt;td&gt;
oui
&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;
Flex
&lt;/td&gt;  &lt;td&gt;
non
&lt;/td&gt;   &lt;td&gt;
oui
&lt;/td&gt;   &lt;td&gt;
non
&lt;/td&gt;   &lt;td&gt;
non
&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;
JavaFX
&lt;/td&gt;  &lt;td&gt;
oui
&lt;/td&gt;   &lt;td&gt;
oui
&lt;/td&gt;   &lt;td&gt;
oui
&lt;/td&gt;   &lt;td&gt;
oui
&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-6001532838296706724?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/6001532838296706724/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=6001532838296706724' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6001532838296706724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6001532838296706724'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2009/11/les-technologies-ria.html' title='Les technologies RIA (Flex/Silvelight/JavaFX) hors et dans le navigateur'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-3328984060760796260</id><published>2009-11-05T23:52:00.016+01:00</published><updated>2009-11-06T00:14:25.290+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Programmez'/><category scheme='http://www.blogger.com/atom/ns#' term='Magazine'/><title type='text'>A propos de l'article sur les RIA du magazine Programmez n° 124</title><content type='html'>Je viens de lire l'article du magazine Programmez n°124 sur les RIA...&lt;br&gt;Et il y a plein de choses avec lesquelles je ne suis pas d'accord …&lt;br&gt;
Mais le plus gros problème est l'exemple Hello World en JavaFX&lt;br&gt;
Je ne sais pas ce qu'a voulu faire l'auteur, mais c'est clair qu'il ne connait pas JavaFX !&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt;Pour pouvoir comparer un minimum les technos, j'ai donc réécrit cet exemple de deux manières différentes :&lt;/o:p&gt;&lt;/p&gt;  &lt;ul style="margin-top:0cm" type="disc"&gt;  &lt;li class="MsoNormal" style="mso-list:l0 level1 lfo1;tab-stops:list 36.0pt"&gt;en      utilisant le biding&lt;/li&gt;  &lt;li class="MsoNormal" style="mso-list:l0 level1 lfo1;tab-stops:list 36.0pt"&gt;en      utilisant une méthode proche des exemples Flex et Silverlight&lt;/li&gt; &lt;/ul&gt;  &lt;p class="MsoNormal"&gt;Et bien sûr, ces 2 exemples fonctionnent aussi bien dans le browser que en en dehors du browser &lt;/p&gt;  &lt;o:p&gt;Méthode utilisant le binding&lt;/o:p&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.comment {color: #969696}
.string {color: #ce7b00}
.keyword {color: #0000e6}
--&gt;
&lt;/style&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Main.fx&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="keyword"&gt;package&lt;/span&gt; helloworldprogrammez;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Text;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Font;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.Button;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author patrick&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;
&lt;span class="keyword"&gt;var&lt;/span&gt; text=&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;...&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;;

Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Hello World&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    width: 400
    height: 200
    scene: Scene {
        content: [
            Text {
                font : Font {
                    size : 12
                }
                x: 10
                y: 10
                content: &lt;span class="keyword"&gt;bind&lt;/span&gt; text
            }
            Button {
                text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Click me&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                translateX: 154
                translateY: 36
                action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                    text=&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Hello world !&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                }
            }
        ]
    }
}

&lt;/pre&gt;
&lt;p class="MsoNormal"&gt;Méthode proche des exemples Flex et Silverlight&lt;/p&gt;&lt;p&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Main2.fx&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="keyword"&gt;package&lt;/span&gt; helloworldprogrammez;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Text;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Font;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.Button;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author patrick&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

Stage {
    &lt;span class="keyword"&gt;var&lt;/span&gt; t:Text;

    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Hello World&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    width: 400
    height: 200
    scene: Scene {
        content: [
            t = Text {
                font : Font {
                    size : 12
                }
                x: 10
                y: 10
                content: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;...&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
            }
            Button {
                text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Click me&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                translateX: 154
                translateY: 36
                action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                    t.content=&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Hello world !&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                }
            }
        ]
    }
}

&lt;/pre&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-3328984060760796260?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/3328984060760796260/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=3328984060760796260' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3328984060760796260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3328984060760796260'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2009/11/propos-de-larticle-sur-les-ria-du.html' title='A propos de l&apos;article sur les RIA du magazine Programmez n° 124'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-2862047516078875407</id><published>2009-10-28T20:23:00.013+01:00</published><updated>2009-10-29T00:33:30.520+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GlassFish'/><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Acquisition de Sun par Oracle – des news !</title><content type='html'>Oracle publie, &lt;a href="http://www.oracle.com/us/sun/index.htm"&gt;sur son site&lt;/a&gt;, un nouveau document concernant l’acquisition de Sun.&lt;div&gt;Ce document  parle entre autre :&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;• Du  futur des produits (incluant NetBeans, GlassFish, OpenOffice, VirtualBox , MySQL, …)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;• De l’offre Hardware et Software&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;• Et de l’open source.&lt;/div&gt;&lt;div&gt;
Vous pouvez lire ce document &lt;a href="http://www.oracle.com/ocom/groups/public/documents/webcontent/038563.pdf"&gt;ici&lt;/a&gt; &lt;/div&gt;&lt;div&gt;
Tant que j’y suis, d’autres news de produits Sun (En Early Access ou Beta)&lt;/div&gt;&lt;div&gt;
&lt;a href="http://java.sun.com/javame/downloads/sdk30_mac.jsp"&gt;Java ME SDK 3.0 pour Mac OS&lt;/a&gt; est disponible &lt;a href="http://java.sun.com/javame/downloads/sdk30_mac.jsp"&gt;ici&lt;/a&gt; .
On peut enfin tester nos applications JavaFX mobile sur le mac ;)&lt;/div&gt;&lt;div&gt;
Et &lt;a href="http://www.netbeans.org/community/releases/68/"&gt;NetBeans 6.8  Beta&lt;/a&gt; est disponible &lt;a href="http://www.netbeans.org/community/releases/68/"&gt;ici&lt;/a&gt;. Il supporte entre autre GlassFish V3 / Java EE 6 et JavaFX &lt;/div&gt;&lt;div&gt;Je vais enfin pouvoir faire des tests sur Java EE 6 (et GlassFish V3) sans avoir a bidouiller mon NetBeans 6.7.1 ;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-2862047516078875407?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/2862047516078875407/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=2862047516078875407' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/2862047516078875407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/2862047516078875407'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2009/10/acquisition-de-sun-par-oracle-des-news.html' title='Acquisition de Sun par Oracle – des news !'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-3703498627951720064</id><published>2009-10-14T22:26:00.007+01:00</published><updated>2009-10-28T19:47:44.924+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Search TextBox'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom component'/><title type='text'>JavaFX Custom Component</title><content type='html'>&lt;div&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;This is just an example to show how you can create your own component from an existing component (here a TextBox).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;For that, I wrote a new UI component which is a search text box like you can have it on Mac OS X.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;This search text box is just a TextBox enhanced with one method which is called each time you enter or delete a character and a small button to reset the criteria in the search text box.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;The only problem is this line&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style:normal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;override var style = "padding-right: 25 ";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;which is not compatible with common profile, but I don’t know how to do that differently. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;You can try this JavaFX custom component in the applet below&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;
&lt;script src="http://dl.javafx.com/1.2/dtfx.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
    javafx(
        {
              codebase : "http://pagesperso-orange.fr/paddy.fr/applet/customcomponent1",
              archive: "CustomCompoent.jar",
              draggable: true,
              width: 200,
              height: 200,
              code: "customcomponent.Main",
              name: "CustomCompoent"
        }
    );
&lt;/script&gt;
&lt;div&gt;
&lt;style type="text/css"&gt;
&lt;!--
body {color: #000000; background-color: #ffffff; font-family: Monospaced}
table {color: #000000; background-color: #e9e8e2; font-family: Monospaced}
.comment {color: #969696}
.string {color: #ce7b00}
.keyword {color: #0000e6}
--&gt;
&lt;/style&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;SearchTextBox.fx&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="comment"&gt;/*&lt;/span&gt;
&lt;span class="comment"&gt; * StatusField.fx&lt;/span&gt;
&lt;span class="comment"&gt; *&lt;/span&gt;
&lt;span class="comment"&gt; * Created on 3 oct. 2009, 00:44:26&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

&lt;span class="keyword"&gt;package&lt;/span&gt; customcomponent;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Group;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Node;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.TextBox;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.paint.Color;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.shape.Circle;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.shape.Rectangle;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.input.MouseEvent;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.input.KeyEvent;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author Patrick&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; SearchTextBox &lt;span class="keyword"&gt;extends&lt;/span&gt; TextBox {

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; onResetSearch:&lt;span class="keyword"&gt;function&lt;/span&gt;() : Void;
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; onSearch:&lt;span class="keyword"&gt;function&lt;/span&gt;(s: String) : Void;
    &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; style = &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;p&lt;/span&gt;&lt;span class="string"&gt;adding-right: 25 &lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;;

    &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; styleClass = &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;searchTextBox&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;;

    &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; onKeyTyped = &lt;span class="keyword"&gt;function&lt;/span&gt;(event:KeyEvent){
        &lt;span class="ST0"&gt;if&lt;/span&gt; (&lt;span class="keyword"&gt;this&lt;/span&gt;.rawText!=&lt;span class="string"&gt;&amp;quot;&amp;quot;&lt;/span&gt;){
            onSearch(&lt;span class="keyword"&gt;this&lt;/span&gt;.rawText);
        }
    }
   
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt; create():Node {
        &lt;span class="keyword"&gt;var&lt;/span&gt; t = &lt;span class="keyword"&gt;super&lt;/span&gt;.create();
        &lt;span class="keyword"&gt;var&lt;/span&gt; resetButton:Group;

        &lt;span class="keyword"&gt;var&lt;/span&gt; g = Group {
            content: [
                t,
                resetButton = Group {

                  &lt;span class="keyword"&gt;var&lt;/span&gt; crossWidth = &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.height * 0.45;
                  &lt;span class="keyword"&gt;var&lt;/span&gt; crossHeight = &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.height * 0.05;

                  visible : &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.rawText.length() &amp;gt; 0
                  layoutX: &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.width - (&lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.height / 2.0)
                  layoutY: &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.height / 2.0

                  content: 
                  [
                    Circle {
                        fill: Color.GRAY
                        radius:  &lt;span class="keyword"&gt;bind&lt;/span&gt; &lt;span class="keyword"&gt;this&lt;/span&gt;.layoutBounds.height * 0.325 &lt;span class="comment"&gt;// 65% of the te&lt;/span&gt;&lt;span class="comment"&gt;xbox height and div 2 for the radius&lt;/span&gt;
                    }
                    Rectangle {
                        width: &lt;span class="keyword"&gt;bind&lt;/span&gt; crossWidth
                        height:&lt;span class="keyword"&gt;bind&lt;/span&gt; crossHeight

                        translateX: &lt;span class="keyword"&gt;bind&lt;/span&gt; 0 - crossWidth / 2.0
                        translateY: &lt;span class="keyword"&gt;bind&lt;/span&gt; 0 - crossHeight / 2.0

                        fill : Color.WHITE
                        rotate: 45
                    }
                    Rectangle {
                        width: &lt;span class="keyword"&gt;bind&lt;/span&gt; crossWidth
                        height:&lt;span class="keyword"&gt;bind&lt;/span&gt; crossHeight

                        translateX: &lt;span class="keyword"&gt;bind&lt;/span&gt; 0 - crossWidth / 2.0
                        translateY: &lt;span class="keyword"&gt;bind&lt;/span&gt; 0 - crossHeight / 2.0

                        fill : Color.WHITE
                        rotate: -45
                    }
                 ]

                 onMouseClicked: &lt;span class="keyword"&gt;function&lt;/span&gt; (event:MouseEvent ){
                     commit();
                     &lt;span class="keyword"&gt;this&lt;/span&gt;.text=&lt;span class="string"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
                     onResetSearch();
                 }

             }
           ]
       }
       
       &lt;span class="ST0"&gt;return&lt;/span&gt; g;
   }
}


&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;Main.fx&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;pre&gt;
&lt;span class="comment"&gt;/*&lt;/span&gt;
&lt;span class="comment"&gt; * Main.fx&lt;/span&gt;
&lt;span class="comment"&gt; *&lt;/span&gt;
&lt;span class="comment"&gt; * Created on 3 oct. 2009, 00:44:05&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

&lt;span class="keyword"&gt;package&lt;/span&gt; customcomponent;

&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Text;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.text.Font;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.control.Button;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author Patrick&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Application title&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    width: 250
    height: 200
    
    scene: Scene {
        content: [
            Text {
                font : Font {
                    size : 16
                }
                x: 10
                y: 30
                content: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Search &lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
            }
            SearchTextBox {
                    translateX :10
                    translateY :40
                    

                    onResetSearch:&lt;span class="keyword"&gt;function&lt;/span&gt;(){
                        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;reset !&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                    }
                    onSearch:&lt;span class="keyword"&gt;function&lt;/span&gt;(s: String){
                        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Search of : &lt;/span&gt;{s}&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                    }
            }
            Button {
                    text: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;just a button to change focus&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
                    translateX :10
                    translateY :80
                    action: &lt;span class="keyword"&gt;function&lt;/span&gt;() {
                        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Hello !&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;)
                   }
            }
        ]
    }
}

&lt;/pre&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-3703498627951720064?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/3703498627951720064/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=3703498627951720064' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3703498627951720064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3703498627951720064'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2009/10/javafx-custom-component.html' title='JavaFX Custom Component'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-265008469702106600</id><published>2009-09-24T23:07:00.009+01:00</published><updated>2009-10-28T19:47:10.867+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Duke'/><category scheme='http://www.blogger.com/atom/ns#' term='Animation'/><title type='text'>Duke Anim JavaFX</title><content type='html'>&lt;script src="http://dl.javafx.com/1.2/dtfx.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
    javafx(
        {
              codebase : "http://pagesperso-orange.fr/paddy.fr/applet/dukeanim",  
              archive: "DukeAnim.jar",
              draggable: true,
              width: 240,
              height: 320,
              code: "dukeanim.Main",
              name: "DukeAnim"
        }
    );
&lt;/script&gt;
&lt;br&gt;
&lt;pre&gt;
&lt;span class="keyword"&gt;import&lt;/span&gt; java.util.Random;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.animation.Interpolator;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.animation.KeyFrame;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.animation.Timeline;
&lt;span class="comment"&gt;//import javafx.scene.&lt;/span&gt;&lt;span class="comment"&gt;effect.Reflection;&lt;/span&gt;
&lt;span class="comment"&gt;//import javafx.scene.effect.SepiaTone;&lt;/span&gt;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.image.Image;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.image.ImageView;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.Scene;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.scene.transform.Translate;
&lt;span class="keyword"&gt;import&lt;/span&gt; javafx.stage.Stage;

&lt;span class="comment"&gt;/**&lt;/span&gt;
&lt;span class="comment"&gt; * @author paddy&lt;/span&gt;
&lt;span class="comment"&gt; */&lt;/span&gt;

&lt;span class="keyword"&gt;class&lt;/span&gt; DukeAnimModel {
  
    &lt;span class="keyword"&gt;publ&lt;/span&gt;&lt;span class="keyword"&gt;ic&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; imageURL = &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;{__DIR__}&lt;span class="string"&gt;images/duke.png&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;;
  
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; x = 0;
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; y = 0;

    &lt;span class="keyword"&gt;var&lt;/span&gt; xTarget = 0;
    &lt;span class="keyword"&gt;var&lt;/span&gt; yTarget = 0;

    &lt;span class="keyword"&gt;var&lt;/span&gt; xTemp = 0;
    &lt;span class="keyword"&gt;var&lt;/span&gt; yTemp = 0;

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; anim =
    Timeline {
        autoReverse: &lt;span class="ST0"&gt;false&lt;/span&gt;
        keyFrames: [
            KeyFrame {
                time: &lt;span class="time"&gt;0s&lt;/span&gt;
                values: [x =&amp;gt; xTemp, y =&amp;gt; yTemp]

            },
            KeyFrame {
                time: &lt;span class="time"&gt;1s&lt;/span&gt;
                &lt;span class="comment"&gt;//values: [x =&amp;gt; 300 tween Interpolator.LINEAR,y =&amp;gt; yTarget tween Interpolator.LINEAR]&lt;/span&gt;
                values: [x =&amp;gt; xTarget &lt;span class="keyword"&gt;tween&lt;/span&gt;
                    Interpolator.SPLINE(0,.5,.5,1),y =&amp;gt; yTarget &lt;span class="keyword"&gt;tween&lt;/span&gt;
                    Interpolator.SPLINE(0,.5,.5,1)]

                action: &lt;span class="keyword"&gt;function&lt;/span&gt;(): Void{
                    println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;at 1 second ...&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);

                    &lt;span class="keyword"&gt;var&lt;/span&gt; generator = &lt;span class="keyword"&gt;new&lt;/span&gt; Random();
                
                    &lt;span class="comment"&gt;//xTarget = (generator.nextFloat() * 400 + 1) as Integer;&lt;/span&gt;
                    xTarget = (
                    generator.nextFloat() * 240 + 1) &lt;span class="keyword"&gt;as&lt;/span&gt; Integer;
                    println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;xNext &lt;/span&gt;{xTarget} &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                    &lt;span class="comment"&gt;//yTarget = (generator.nextFloat() * 300 + 1) as Integer;&lt;/span&gt;
                    yTarget = (
                    generator.nextFloat() * 320 + 1) &lt;span class="keyword"&gt;as&lt;/span&gt; Integer;
                    println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;yNext &lt;/span&gt;{yTarget} &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
                    xTemp=x;
                    yTemp=y;

                }
            },
        ]
        repeatCount: Timeline.INDEFINITE
    };
}

&lt;span class="keyword"&gt;var&lt;/span&gt; dukeAnimModel = DukeAnimModel {}

dukeAnimModel.anim.play();


Stage {
    title: &lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Application title&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;
    width: 240  &lt;span class="comment"&gt;//400&lt;/span&gt;
    height: 320 &lt;span class="comment"&gt;//300&lt;/span&gt;
    scene: Scene {
        content: ImageView {
            transforms: Translate {
                x: &lt;span class="keyword"&gt;bind&lt;/span&gt; dukeAnimModel.x
                y: &lt;span class="keyword"&gt;bind&lt;/span&gt; dukeAnimModel.y
            }
            image: Image {
                url: dukeAnimModel.imageURL

            }
          &lt;span class="comment"&gt;/*  effect:Reflect&lt;/span&gt;&lt;span class="comment"&gt;ion{&lt;/span&gt;
&lt;span class="comment"&gt;                input: SepiaTone{&lt;/span&gt;
&lt;span class="comment"&gt;                }&lt;/span&gt;
&lt;span class="comment"&gt;            }&lt;/span&gt;
&lt;span class="comment"&gt;           */&lt;/span&gt;

        }
    }
    onClose: &lt;span class="keyword"&gt;function&lt;/span&gt;(){
        println(&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;exit&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;);
    }
}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-265008469702106600?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/265008469702106600/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=265008469702106600' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/265008469702106600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/265008469702106600'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2009/09/duke-anim-javafx.html' title='Duke Anim JavaFX'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-7509909988067237970</id><published>2008-02-16T14:03:00.003+01:00</published><updated>2008-02-17T11:41:25.283+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Mac Os X 10.5, une nouvelle preview(9) de java SE 6 !</title><content type='html'>Une nouvelle &lt;a href="http://developer.apple.com/java/"&gt;Java SE 6 Developer Preview (9)&lt;/a&gt; est disponible sur ADC et elle inclus java SE 6 version 1.6.0_04
pour voir ce qu’il ya de nouveau, la &lt;a href="http://adcdownload.apple.com/Java/java_se_6_developer_preview_9/javase6dp9releasenotes.html"&gt;realese note &lt;/a&gt;!

Et sinon, vous pouvez aussi allez lire ce que j’écris de temps en temps sur le &lt;a href="http://blogexpertease.alti.com/"&gt;blog de la boite ou je bosse actuellement &lt;/a&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-7509909988067237970?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/7509909988067237970/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=7509909988067237970' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7509909988067237970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7509909988067237970'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2008/02/mac-os-x-105-une-nouvelle-preview9-de.html' title='Mac Os X 10.5, une nouvelle preview(9) de java SE 6 !'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-4427641571740731829</id><published>2007-12-19T22:42:00.000+01:00</published><updated>2007-12-19T22:47:07.939+01:00</updated><title type='text'>Java 6 on Mac Os X Leopard !!!!</title><content type='html'>Ca y est, on a une version de &lt;a href="http://developer.apple.com/java/"&gt;Java 6 pour Leopard &lt;/a&gt;(Mac OS X 10.5) …

Bon ok c’est qu’une version Developper (Preview 8) de Java 1.6.0_01 et c’est pas la release …
Mais ca marche nickel chrome ;)

Les exemples de &lt;a href="https://scenegraph.dev.java.net/"&gt;Scene Graph&lt;/a&gt;, qui nécessitent Java 6, tournent super bien…
ainsi que les prog &lt;a href="https://openjfx.dev.java.net/"&gt;JavaFX Script &lt;/a&gt;qui avaient quelques petits problèmes d’affichage en Java 5.

Par contre je comprend pas pourquoi Java Web Start ne fonctionne pas avec Safari alors qu’il marche super bien avec Firefox !!! (en Java 6 bien sur ;) )
Un problème de configuration du Type MIME JNLP je pense …&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-4427641571740731829?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/4427641571740731829/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=4427641571740731829' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4427641571740731829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4427641571740731829'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/12/java-6-on-mac-os-x-leopard.html' title='Java 6 on Mac Os X Leopard !!!!'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-4808297652285631459</id><published>2007-11-05T10:23:00.001+01:00</published><updated>2007-11-05T10:24:41.312+01:00</updated><title type='text'>13949712720901ForOSX</title><content type='html'>13949712720901ForOSX

I want Java 6 on Leopard&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-4808297652285631459?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/4808297652285631459/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=4808297652285631459' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4808297652285631459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4808297652285631459'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/11/13949712720901forosx.html' title='13949712720901ForOSX'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-938876540808873376</id><published>2007-09-05T23:35:00.000+02:00</published><updated>2007-09-05T23:43:03.110+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAX-WS'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Script'/><title type='text'>Apprendre JavaFX Script part III</title><content type='html'>Et &lt;a href="http://java.sun.com/developer/technicalArticles/scripting/javafxpart3/"&gt;la troisième partie &lt;/a&gt;qui explique comment accéder à un Web Service JAX-WS 2.1 à partir de JavaFX Script&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-938876540808873376?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/938876540808873376/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=938876540808873376' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/938876540808873376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/938876540808873376'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/09/apprendre-javafx-script-part-iii.html' title='Apprendre JavaFX Script part III'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-8458569491446088461</id><published>2007-08-21T23:43:00.000+02:00</published><updated>2007-08-21T23:49:09.712+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Script'/><category scheme='http://www.blogger.com/atom/ns#' term='RMI'/><title type='text'>Apprendre JavaFX Script part  II</title><content type='html'>Après &lt;a href="http://java.sun.com/developer/technicalArticles/scripting/javafxpart1/"&gt;la première partie &lt;/a&gt;qui introduisait la syntaxe et la sémantique du langage JavaFX Script,
voici   &lt;a href="http://java.sun.com/developer/technicalArticles/scripting/javafxpart2/"&gt;la deuxième partie &lt;/a&gt;qui explique comment connecter un client (JavaFX Script) et des objets distants en utilisant RMI&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-8458569491446088461?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/8458569491446088461/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=8458569491446088461' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8458569491446088461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8458569491446088461'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/08/apprendre-javafx-script-part-ii.html' title='Apprendre JavaFX Script part  II'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-4944870829749084047</id><published>2007-08-02T15:47:00.000+02:00</published><updated>2007-08-21T23:50:13.033+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Script'/><title type='text'>Un autre article intéressant d’introduction à JavaFX Script</title><content type='html'>&lt;a href="http://www.onjava.com/pub/a/onjava/2007/07/27/introduction-to-javafx-script.html"&gt;http://www.onjava.com/pub/a/onjava/2007/07/27/introduction-to-javafx-script.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-4944870829749084047?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/4944870829749084047/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=4944870829749084047' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4944870829749084047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4944870829749084047'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/08/un-autre-article-intressant.html' title='Un autre article intéressant d’introduction à JavaFX Script'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-4012322135543069616</id><published>2007-08-02T15:06:00.000+02:00</published><updated>2007-08-02T15:27:28.883+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Script'/><title type='text'>Une introduction à JavaFX Script pour les programmeurs Java</title><content type='html'>&lt;a href="http://java.sun.com/developer/technicalArticles/scripting/javafxpart1/"&gt;Cet article de Sun Developer Network&lt;/a&gt; est la première partie d’une série de trois pour apprendre JavaFX Script.

Les deux autres ne seront pas moins intéressants, puisqu’ils parleront de la connexion entre une application JavaFX Script et des objets distants en utilisant RMI et JAX-WS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-4012322135543069616?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/4012322135543069616/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=4012322135543069616' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4012322135543069616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4012322135543069616'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/08/une-introduction-javafx-script-pour-les.html' title='Une introduction à JavaFX Script pour les programmeurs Java'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-6460267881613239681</id><published>2007-07-26T23:41:00.000+02:00</published><updated>2007-07-26T23:49:18.852+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GlassFish'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eclipse Europa, GlassFish et JSF</title><content type='html'>Après avoir réussi à ajouter GlassFish dans Eclipse, j’ai voulu faire un projet JSF …
Et la encore un petit souci, il n’y a pas les Tags JSF dans la palette …
Une petite recherche sur le Web plus loin, et je suis tombé sur ce lien
&lt;a href="http://weblogs.java.net/blog/cayhorstmann/archive/2007/07/jsf_support_in.html"&gt;http://weblogs.java.net/blog/cayhorstmann/archive/2007/07/jsf_support_in.html &lt;/a&gt;
Mais toujours pas de Tag JSF :(
J’ai donc cherché un peu et voici ma solution …

Donc il faut bien installer les libs JSF dans Eclipse
•    Dans Preference&gt;Web and XML&gt;JavaServer Faces Tools&gt;Libraries faire &lt;span style="font-style: italic; font-weight: bold;"&gt;new&lt;/span&gt;
•    Libray Name : GlassFishJSF
•    Version Supported : &lt;span style="font-weight: bold;"&gt;v1_2&lt;/span&gt;.
•    Ajouter seulement &lt;span style="font-style: italic; font-weight: bold;"&gt;jsf-impl.jar&lt;/span&gt; qui se trouve dans le répertoire lib de GlassFish
(Si je mets javaee.jar ça pose un problème de librairies dupliquées par la suite)
•    Cocher &lt;span style="font-weight: bold;"&gt;isJSFImplementation&lt;/span&gt;.
Ensuite, j’ai ajouté la lib GlassFishJSF à mon projet JSF et j’ai redémarré Eclipse avec l’option –clean
Et, oh miracle ;), j’ai les Tags JSF dans la palette!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-6460267881613239681?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/6460267881613239681/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=6460267881613239681' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6460267881613239681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6460267881613239681'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/07/eclipse-europa-glassfish-et-jsf.html' title='Eclipse Europa, GlassFish et JSF'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-6683665144730727678</id><published>2007-07-25T15:44:00.000+02:00</published><updated>2007-07-25T15:57:23.572+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GlassFish'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eclipse Europa et GlassFish</title><content type='html'>En voulant tester les fonctionnalités Java EE et surtout JSF d’Eclipse Europa, j’ai voulu ajouter  un nouveau serveur d’App à Eclipse et j’ai choisi celui que je préfère GlassFish !
J’ai donc suivi la procédure suivante …
&lt;a href="https://glassfishplugins.dev.java.net/"&gt;GlassFish Plugin for Eclipse IDE 3.3 (Europa) and WTP 2.0 RC3 or later&lt;/a&gt;
J’ai eu aucun souci sous Mac OS , par contre sous Windows  ça ne marchait pas …
je ne voyais pas apparaître GlassFish dans la liste des types de serveur.
La solution est, juste après l’installation du plugin, de redémarrer Eclipse avec l’option –clean

C:\eclipse&gt;eclipse -clean

Et ça marche !
Pour JSF, à suivre …. ;)

Note : visiblement ce problème n’est pas un problème de plugin GlassFish, j’ai eu le même problème avec le plugin Bea que j’ai résolu de la même manière …&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-6683665144730727678?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/6683665144730727678/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=6683665144730727678' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6683665144730727678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6683665144730727678'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/07/eclipse-europa-et-glassfish.html' title='Eclipse Europa et GlassFish'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-8479867722489778798</id><published>2007-07-23T11:23:00.000+02:00</published><updated>2007-07-23T11:32:14.847+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Script'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenJFX'/><title type='text'>News JavaFX de juillet !</title><content type='html'>Ça bouge pas mal en ce moment autour de &lt;a href="https://openjfx.dev.java.net/"&gt;JavaFX &lt;/a&gt;!
Alors les news de juillet …

La &lt;a href="https://openjfx.dev.java.net/servlets/ProjectDocumentList"&gt;dernière version d’OpenJFX&lt;/a&gt; (du 20 juillet 2007) contient 2 nouvelles démos
•    &lt;a href="http://download.java.net/general/openjfx/demos/casual.jnlp"&gt;Casual&lt;/a&gt;, un client Jabber (Messagerie instantanée) écrit en JavaFX script
•    &lt;a href="http://download.java.net/general/openjfx/demos/svg.jnlp"&gt;SVG to JavaFX translator&lt;/a&gt;, un convertisseur de fichiers SVG en classes JavaFX script.

La création d’un &lt;a href="https://openjfx-incubator.dev.java.net/"&gt;incubateur&lt;/a&gt; pour les projets émergeants autour d’OpenJFX …
Et surtout &lt;a href="https://openjfx-compiler.dev.java.net/source/browse/openjfx-compiler/"&gt;les sources&lt;/a&gt; du &lt;a href="https://openjfx-compiler.dev.java.net/"&gt;compilateur JavaFX Script&lt;/a&gt; sont disponibles !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-8479867722489778798?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/8479867722489778798/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=8479867722489778798' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8479867722489778798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8479867722489778798'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/07/news-javafx-de-juillet.html' title='News JavaFX de juillet !'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-4445562819427292484</id><published>2007-07-20T22:12:00.000+02:00</published><updated>2007-07-20T22:21:14.421+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Mac OS X : MS Office et la MAJ QuickTime 7.2</title><content type='html'>&lt;a href="http://bp2.blogger.com/_rpz_ucpdDqg/RqEZICT7mZI/AAAAAAAAABo/6WxksyjZYC4/s1600-h/logo_osx.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5089376679755487634" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp2.blogger.com/_rpz_ucpdDqg/RqEZICT7mZI/AAAAAAAAABo/6WxksyjZYC4/s320/logo_osx.jpg" border="0" /&gt;&lt;/a&gt;
&lt;div&gt;Vous venez de mettre à jour votre mac préféré (QuickTime 7.2, Itunes 7.3.1(3)) et MS Office ne démarre plus :(
C’est juste un p’tit problème d’ update_prebinding

Et la solution ...
&lt;a href="http://www.macfixit.com/article.php?story=20070720111621279"&gt;http://www.macfixit.com/article.php?story=20070720111621279&lt;/a&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-4445562819427292484?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/4445562819427292484/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=4445562819427292484' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4445562819427292484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4445562819427292484'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/07/mac-os-x-ms-office-et-la-maj-quicktime.html' title='Mac OS X : MS Office et la MAJ QuickTime 7.2'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_rpz_ucpdDqg/RqEZICT7mZI/AAAAAAAAABo/6WxksyjZYC4/s72-c/logo_osx.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-6020684183463209353</id><published>2007-07-02T23:34:00.000+02:00</published><updated>2007-07-02T23:52:51.246+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>eclipse europa</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipse.org/eclipse.org-common/themes/Phoenix/images/header_logo.gif"&gt;&lt;img dragover="true" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 112px; height: 46px;" src="http://www.eclipse.org/eclipse.org-common/themes/Phoenix/images/header_logo.gif" alt="" border="0" /&gt;&lt;/a&gt;L’année dernière la fondation eclipse sortait &lt;a href="http://www.eclipse.org/callisto/"&gt;callisto&lt;/a&gt;, incluant 10 projet …
Cette année, c’est autour d’&lt;a href="http://www.eclipse.org/europa/"&gt;europa&lt;/a&gt;, avec &lt;a href="http://www.eclipse.org/europa/projects.php"&gt;21 projets&lt;/a&gt; !!
et eclipse en version 3.3  .

Dans les principales nouveautés d’&lt;a href="http://www.eclipse.org/europa/"&gt;europa&lt;/a&gt;:
•    Support de Java EE 5
•    SOA
•    Le support de Ruby

Test en cours…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-6020684183463209353?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/6020684183463209353/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=6020684183463209353' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6020684183463209353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/6020684183463209353'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/07/eclipse-europa.html' title='eclipse europa'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-9036053220361575843</id><published>2007-06-25T10:30:00.000+02:00</published><updated>2007-06-25T10:32:05.354+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sun Tech Days'/><title type='text'>Les Sun Tech Days 2007 en Vidéo !</title><content type='html'>Si vous aviez loupé les Sun Tech Days 2007 à Paris, aller faire un tour par &lt;a href="http://java.developpez.tv/suntechdays2007/"&gt;ici&lt;/a&gt; !
Devellopez.com a pensé à vous et a mis en ligne une partie des présentations en vidéos …&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-9036053220361575843?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/9036053220361575843/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=9036053220361575843' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/9036053220361575843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/9036053220361575843'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/06/les-sun-tech-days-2007-en-vido.html' title='Les Sun Tech Days 2007 en Vidéo !'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-9112631902382067405</id><published>2007-06-19T15:44:00.000+02:00</published><updated>2007-06-19T15:47:27.109+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>JRuby et la plateforme Java</title><content type='html'>Un article intéressant sur l’interaction entre &lt;a href="http://java.sun.com/developer/technicalArticles/scripting/jruby/"&gt;JRuby et la plateforme Java&lt;/a&gt;
avec entre autres :
&lt;ul&gt;&lt;li&gt; comment  faire du Swing en Ruby &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; comment exécuter du Script Ruby depuis Java à l’aide de la nouvelle fonctionnalité de  scripting de Java SE 6 (jsr 223)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;l’utilisation de NetBeans avec JRuby&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;etc…&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-9112631902382067405?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/9112631902382067405/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=9112631902382067405' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/9112631902382067405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/9112631902382067405'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/06/un-article-intressant-sur-linteraction.html' title='JRuby et la plateforme Java'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-3196454769657489342</id><published>2007-06-11T23:36:00.000+02:00</published><updated>2007-06-11T23:37:46.245+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='JRuby'/><title type='text'>JRuby passe en version 1.0 !</title><content type='html'>&lt;a href="http://headius.blogspot.com/2007/06/jruby-10-released.html"&gt;http://headius.blogspot.com/2007/06/jruby-10-released.html&lt;/a&gt;

et ça download ici !
&lt;a href="http://dist.codehaus.org/jruby/"&gt;http://dist.codehaus.org/jruby/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-3196454769657489342?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/3196454769657489342/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=3196454769657489342' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3196454769657489342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3196454769657489342'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/06/jruby-passe-en-version-10.html' title='JRuby passe en version 1.0 !'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-3118629375067191171</id><published>2007-06-07T15:52:00.000+02:00</published><updated>2007-06-07T15:57:06.001+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='GlassFish'/><category scheme='http://www.blogger.com/atom/ns#' term='AAC'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Web Start'/><category scheme='http://www.blogger.com/atom/ns#' term='JPA'/><title type='text'>2 articles intéressants sur Sun Developper Network</title><content type='html'>Le premier, &lt;a href="http://java.sun.com/developer/technicalArticles/J2SE/Desktop/persistenceapi/?feed=JSC"&gt;Using the Persistence API in Desktop Applications&lt;/a&gt;, explique comment utiliser JPA dans une application Desktop en utilisant TopLink Essentials comme implémentation JPA
Et le second, &lt;a href="http://java.sun.com/developer/technicalArticles/J2EE/jws-glassfish/"&gt;Java Web Start Technology and Application Clients in the GlassFish Application Server&lt;/a&gt;, montre comment faire une application riche en utilisant ACC (Application Client Container) de JEE et Java Web Start avec le serveur d’application GlassFish de Sun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-3118629375067191171?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/3118629375067191171/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=3118629375067191171' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3118629375067191171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3118629375067191171'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/06/2-articles-intressants-sur-sun.html' title='2 articles intéressants sur Sun Developper Network'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-57811634189015200</id><published>2007-06-05T11:16:00.000+02:00</published><updated>2007-06-05T14:01:05.749+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Script'/><title type='text'>2 petits scripts JavaFX Script</title><content type='html'>Le premier fait tourner un bouton sur lui-même lorsque l’on appuie dessus et le second montre comment changer le look &amp; feel d’une frame JavaFX Script

Script 1
&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style="background-color:#EEEEEE;border:1px solid #CCCCCC;padding:5px;"&gt;
&lt;pre style="font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;
font-size:9px;margin-bottom:0pt;margin-top:0pt;"&gt;
import javafx.ui.*;
import javafx.ui.canvas.*;
import java.lang.System;

class AnimationExample {
  attribute rotationValue: Number;
}

var animationExample = new AnimationExample();

var f = Frame {
     title: "Animation - Rotate Button JavaFX Script"
     width: 800
     height: 600    
     content:
Canvas {
  content:
  [
  View {
      transform: bind [ translate(350, 54),
            rotate(animationExample.rotationValue, 40,11) ]
      size: {width: 80, height: 22}
      content: Button {
          text: "Rotate"
          font: new Font("Arial", "PLAIN", 11)
          action: operation() {
              animationExample.rotationValue = [1..360] dur 1000 linear;
          }
      }
  }
  ]
}
  visible: true
};
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
Script 2
&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="background-color:#EEEEEE;border:1px solid #CCCCCC;padding:5px;"&gt;
&lt;pre style="font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;
font-size:9px;margin-bottom:0pt;margin-top:0pt;"&gt;
import javafx.ui.*;
import javafx.ui.canvas.*;
import java.lang.System;

import javax.swing.SwingUtilities;
import javax.swing.UIManager;

var f = Frame {
     title: "Change Look &amp; Feel JavaFX Scrit"
     width: 800
     height: 600
     content:

Canvas {
  content:
  [
  View {
      transform: bind [ translate(350, 54), ]
      size: {width: 80, height: 22}
      content: Button {
          text: "Button"
          font: new Font("Arial", "PLAIN", 11)
          action: operation() {
          println("Operation");
          }
      }
  },
  View {
          transform: bind [ translate(350, 84) ]
          size: {width: 80, height: 22}
          content: TextField {
          font: new Font("Arial", "PLAIN", 11)
          }
      }
      ]
  }

  visible: true
};
//f.pack();

UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");

SwingUtilities.updateComponentTreeUI(f.frame);


&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-57811634189015200?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/57811634189015200/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=57811634189015200' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/57811634189015200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/57811634189015200'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/06/2-petits-scripts-javafx-script.html' title='2 petits scripts JavaFX Script'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-7840781672346250815</id><published>2007-05-28T10:56:00.000+02:00</published><updated>2007-05-28T16:00:42.981+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='JFXBuilder'/><title type='text'>JavaFX les news du jour !</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_rpz_ucpdDqg/Rlqb8ejJJDI/AAAAAAAAABg/BKhBLyRE4fA/s1600-h/JFXBScreenShot.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_rpz_ucpdDqg/Rlqb8ejJJDI/AAAAAAAAABg/BKhBLyRE4fA/s320/JFXBScreenShot.jpg" alt="" id="BLOGGER_PHOTO_ID_5069535793853834290" border="0" /&gt;&lt;/a&gt;
On commence par le tout premier éditeur WYSIWYG pour JavaFX, &lt;a href="http://www.reportmill.com/jfx/"&gt;JFXBuilder&lt;/a&gt;

On continue avec l&lt;a href="http://weblogs.java.net/blog/javakiddy/archive/2007/05/making_javafx_s.html"&gt;es sources d’un playeur de MP3 en JavaFX Script&lt;/a&gt;
L’interface utilisateur de ce playeur est écrite totalement en JavaFX Script, mais sans utilisation de la partie script de description UI


Et on finit par un petit éclaircissement sur cette histoire de licence

&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Nandini Ramani (Sun) clears up any confusion on the JavaFX user list&lt;/span&gt;
&lt;span style="font-style: italic;"&gt;I would like to reiterate that it is perfectly fine to distribute your JavaFX applications, in fact we encourage it. I was just pointing out that it is not yet ready for commercial use. [Developers] are welcome to distribute their applications.&lt;/span&gt;
&lt;span style="font-style: italic;"&gt;Unlike other proprietary companies, we at Sun really do believe in open source and community involvement. I am sorry we do not have a licensing model in place yet, but I assure you that we are working on it and I will keep you all posted as soon as we have one in place.&lt;/span&gt;


&lt;span style="font-style: italic;"&gt;Q: Is the JavaFX Runtime the same thing as the JavaFX Script which is to be “open sourced” as per the FAQ?&lt;/span&gt;
&lt;span style="font-style: italic;"&gt;Nandini R: Yes, it is and the runtime will be open sourced.&lt;/span&gt;&lt;/span&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-7840781672346250815?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/7840781672346250815/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=7840781672346250815' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7840781672346250815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7840781672346250815'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/05/on-commence-par-le-tout-premier-diteur.html' title='JavaFX les news du jour !'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_rpz_ucpdDqg/Rlqb8ejJJDI/AAAAAAAAABg/BKhBLyRE4fA/s72-c/JFXBScreenShot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-7071471761546100598</id><published>2007-05-25T10:59:00.000+02:00</published><updated>2007-05-25T11:06:52.803+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>NetBeans passe à la version 5.5.1 !</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_rpz_ucpdDqg/RlanC-jJJCI/AAAAAAAAABY/ebXKOFLdGa8/s1600-h/lnetbeans5.5.1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_rpz_ucpdDqg/RlanC-jJJCI/AAAAAAAAABY/ebXKOFLdGa8/s320/lnetbeans5.5.1.png" alt="" id="BLOGGER_PHOTO_ID_5068422100244046882" border="0" /&gt;&lt;/a&gt;Elle permet entre autres, en plus des corrections de bug, d’utiliser GlassFish V2 et ajoute le support de Windows Vista.

&lt;a href="http://www.netbeans.info/downloads/index.php?rs=22"&gt;NetBeans 5.5.1 &lt;/a&gt;, &lt;a href="https://glassfish.dev.java.net//downloads/v2-b41d.html"&gt;GlassFish V2 Beta2&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-7071471761546100598?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/7071471761546100598/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=7071471761546100598' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7071471761546100598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/7071471761546100598'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/05/netbeans-passe-la-version-551.html' title='NetBeans passe à la version 5.5.1 !'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_rpz_ucpdDqg/RlanC-jJJCI/AAAAAAAAABY/ebXKOFLdGa8/s72-c/lnetbeans5.5.1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-8119507275167570381</id><published>2007-05-23T17:45:00.001+02:00</published><updated>2007-05-23T17:54:46.755+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Script'/><title type='text'>JavaFx Script, un p’tit problème de licence peut-être ?</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:85%;"&gt;Date: Tue, 22 May 2007 14:52:58 -0700
From: nandini &lt;/span&gt;&lt;nandini.ramani@sun.com&gt;&lt;span style="font-size:85%;"&gt;
Content-type: text/plain; format=flowed; charset=ISO-8859-1
Subject: Current legal status of JavaFX

Guillaume,
The licensing terms for JavaFX are still under discussion.  So, you
cannot redistribute JavaFXPad or any of the jars. I will keep you posted
once we have something in place.

-Nandini

&gt; Hi, I would like to know what is the current legal status of JavaFX.
&gt; In particular:
&gt; - Can I redistribute javafxrt.jar, Filters.jar and swing-layout.jar
&gt; with a GPL application? With a commercial application?
&gt; - Can I redistribute JavaFXPad?
&gt; - Can I distribute a modified version of JavaFXPad? Under which license?
&gt;
&gt; Regards,
&gt; g
&gt;&lt;/span&gt;
&lt;/nandini.ramani@sun.com&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Source :
&lt;a href="https://openjfx.dev.java.net/servlets/ReadMsg?list=users&amp;msgNo=264"&gt;https://openjfx.dev.java.net/servlets/ReadMsg?list=users&amp;amp;msgNo=264&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-8119507275167570381?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/8119507275167570381/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=8119507275167570381' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8119507275167570381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8119507275167570381'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/05/javafx-script-un-ptit-problme-de.html' title='JavaFx Script, un p’tit problème de licence peut-être ?'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-1539351029863895675</id><published>2007-05-23T15:38:00.000+02:00</published><updated>2007-05-23T15:49:31.130+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX Script'/><title type='text'>JavaFX Script – premier retour</title><content type='html'>J’ai commencé à faire quelques trucs avec JavaFX Script et ce que je pensais être au départ un simple langage de script orienté UI, va en fait un peu plus loin.
C’est un véritable langage de script !

Pour effectuer mes tests j’ai utilisé Netbeans 6 M9 avec le plugin adéquat.
Malheureusement, après l’installation du plugin, je ne peux plus faire que du JavaFX … ,
le reste des wizards de création (projet, classe, etc…) se bloquant avant la fin et ne générant pas ce qu’ils doivent générer.
En plus le plugin, ne propose pas la coloration syntaxique, ni la complétion :(

Donc après ces quelques tests, j’ai collecté quelques liens intéressants, enfin ceux qui m’ont servi à commencer.

le language JavaFX Script
&lt;a href="https://openjfx.dev.java.net/JavaFX_Programming_Language.html"&gt;https://openjfx.dev.java.net/JavaFX_Programming_Language.html&lt;/a&gt;

les widgets JavaFX
&lt;a href="http://blogs.sun.com/chrisoliver/resource/widgets.html"&gt;http://blogs.sun.com/chrisoliver/resource/widgets.html&lt;/a&gt;

Tutorial pour bien commencer !
&lt;a href="https://openjfx.dev.java.net/Getting_Started_With_JavaFX.html"&gt;https://openjfx.dev.java.net/Getting_Started_With_JavaFX.html&lt;/a&gt;

le blog de Chris Oliver
&lt;a href="http://blogs.sun.com/chrisoliver/"&gt;http://blogs.sun.com/chrisoliver/&lt;/a&gt;

Les sources ainsi que les sources et des exemples
&lt;a href="https://openjfx.dev.java.net/servlets/ProjectDocumentList"&gt;https://openjfx.dev.java.net/servlets/ProjectDocumentList&lt;/a&gt;
à noter que dans se package se trouve aussi les sources de :
JavaFXPad demo, Script 2D Graphics Tutorial, Tesla Demo, Studiomoto Demo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-1539351029863895675?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/1539351029863895675/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=1539351029863895675' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1539351029863895675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/1539351029863895675'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/05/javafx-script-premier-retour.html' title='JavaFX Script – premier retour'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-8360322363041369432</id><published>2007-05-16T11:17:00.000+02:00</published><updated>2007-05-21T00:21:14.644+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='applet'/><category scheme='http://www.blogger.com/atom/ns#' term='swing'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='mashup'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Non, les applets ne sont pas mortes !</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_rpz_ucpdDqg/RkrNuujJJBI/AAAAAAAAABQ/QJyA2NAER2k/s1600-h/liris.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5065086933584651282" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://bp3.blogger.com/_rpz_ucpdDqg/RkrNuujJJBI/AAAAAAAAABQ/QJyA2NAER2k/s200/liris.png" border="0" /&gt;&lt;/a&gt;
&lt;a href="http://www.jasperpotts.com/blog/2007/05/iris-java-one-demo/"&gt;Iris&lt;/a&gt; est une démo (montrée à Java One) assez impressionnante mixant applet, Swing, HTML, JavaScript et AJAX !


&lt;span style="font-size:85%;"&gt;&lt;span style="FONT-STYLE: italic"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="FONT-STYLE: italic"&gt;Iris shows the power of modern Java applets, highlighting the following major features of the Java platform:&lt;/span&gt; &lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="FONT-STYLE: italic"&gt;Next-generation web integration: Java applets interoperate well with JavaScript in all major web browsers.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="FONT-STYLE: italic"&gt;Multithreading support in the Java platform and libraries hides network latency from the end user, and increases the application’s throughput.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="FONT-STYLE: italic"&gt;Native desktop integration supports concepts like drag-and-drop "on to the web".&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="FONT-STYLE: italic"&gt;The Java platform’s powerful and flexible security model allows true web service mashups to be created which connect simultaneously to many web services.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="FONT-STYLE: italic"&gt;The rich image handling and graphics capabilities of the Java core libraries facilitate development of advanced graphical applets and applications.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="FONT-STYLE: italic"&gt;Dynamic extension of applets: new techniques developed within the past year in the JOGL project allow applets to use OpenGL for 3D graphics, OpenAL for spatialized audio, Java Media codecs, and other extensions previously only available to desktop or Java Web Start applications.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;
&lt;a href="http://www.jasperpotts.com/blog/2007/05/iris-video/"&gt;Pour voir la vidéo de la démo&lt;/a&gt;
&lt;a href="http://swinglabs.java.sun.com/iris/"&gt;Ou pour essayer Iris &lt;/a&gt;(ça marche pas toujours ! :( et Iris à besoin d’un Java SE 6)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-8360322363041369432?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/8360322363041369432/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=8360322363041369432' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8360322363041369432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8360322363041369432'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/05/iris-est-une-dmo-montre-java-one-assez.html' title='Non, les applets ne sont pas mortes !'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_rpz_ucpdDqg/RkrNuujJJBI/AAAAAAAAABQ/QJyA2NAER2k/s72-c/liris.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-754001930081182308</id><published>2007-05-09T14:57:00.000+02:00</published><updated>2007-05-09T15:14:53.224+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='javaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><title type='text'>JavaFX pour les RIA (Rich Internet Application)</title><content type='html'>&lt;a href="http://java.sun.com/javafx/images/javafxscript_large.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 200px; CURSOR: hand" alt="" src="http://java.sun.com/javafx/images/javafxscript_large.jpg" border="0" /&gt;&lt;/a&gt;
&lt;div&gt;On attendait la réponse de Sun à Silverlight (ex WPF/E) de Microsoft et Flash/Flex/Apollo d’Adobe …
Et bien la voila !
A Java One, Sun annonce &lt;a href="http://www.sun.com/software/javafx/"&gt;JavaFX &lt;/a&gt;!

Pour plus d’info sur JavaFX c’est par &lt;a href="http://java.sun.com/javafx/"&gt;ici
&lt;/a&gt;Et pour le projet OpenJFX c’est pas &lt;a href="https://openjfx.dev.java.net/"&gt;la&lt;/a&gt; !

J’ai essayé quelques &lt;a href="https://openjfx.dev.java.net/#demos"&gt;démos&lt;/a&gt;…
Dans une qui ressemble au XAMLPad de Microsoft, le &lt;a href="http://download.java.net/general/openjfx/demos/javafxpad.jnlp"&gt;JavaFXPad&lt;/a&gt; …
Par rapport au XAML le JavaFX Script parait assez bizarre, mais c’est tout nouveau donc on a pas encore l’habitude …
Et surtout, il faudra voir à l’usage !&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-754001930081182308?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/754001930081182308/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=754001930081182308' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/754001930081182308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/754001930081182308'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/05/javafx-pour-les-ria-rich-internet.html' title='JavaFX pour les RIA (Rich Internet Application)'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-4832890318722717598</id><published>2007-05-07T17:21:00.000+02:00</published><updated>2007-05-07T17:23:18.424+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>Le numéro de Mai de NetBeans Magazine est dispo</title><content type='html'>&lt;a href="http://bp3.blogger.com/_rpz_ucpdDqg/Rj9EG2dXnqI/AAAAAAAAABI/qau_uPomk8k/s1600-h/nb-magazine-issue3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5061839390676328098" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp3.blogger.com/_rpz_ucpdDqg/Rj9EG2dXnqI/AAAAAAAAABI/qau_uPomk8k/s200/nb-magazine-issue3.jpg" border="0" /&gt;&lt;/a&gt;
&lt;div&gt;&lt;a href="http://www.netbeans.org/download/magazine/03/nb03-full-webview.pdf"&gt;NetBeans magazine de Mai&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-4832890318722717598?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/4832890318722717598/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=4832890318722717598' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4832890318722717598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/4832890318722717598'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/05/le-numro-de-mai-de-netbeans-magazine.html' title='Le numéro de Mai de NetBeans Magazine est dispo'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_rpz_ucpdDqg/Rj9EG2dXnqI/AAAAAAAAABI/qau_uPomk8k/s72-c/nb-magazine-issue3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-8028208672161241820</id><published>2007-05-07T17:09:00.000+02:00</published><updated>2007-05-07T17:20:51.063+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>NetBeans 6.0 M9 (Milestone 9) est arrivé !</title><content type='html'>&lt;a href="http://bp2.blogger.com/_rpz_ucpdDqg/Rj9CmmdXnpI/AAAAAAAAABA/YFQkV6fFie0/s1600-h/NetBean6M9-2.jpg"&gt;&lt;/a&gt; Les principales nouveautés (pour la version full) &lt;ul&gt;&lt;li&gt;Support de &lt;strong&gt;Ruby&lt;/strong&gt;, &lt;strong&gt;JRuby&lt;/strong&gt; et &lt;strong&gt;Ror&lt;/strong&gt; (Ruby on Rails)
&lt;/li&gt;&lt;li&gt;Plus de &lt;strong&gt;facilités&lt;/strong&gt; pour développer en &lt;strong&gt;Swing&lt;/strong&gt; avec l’intégration de &lt;a href="https://beansbinding.dev.java.net/"&gt;JSR 295 &lt;/a&gt;(&lt;a href="https://beansbinding.dev.java.net/"&gt;Beans Binding&lt;/a&gt;) et &lt;a href="https://appframework.dev.java.net/"&gt;296&lt;/a&gt; (&lt;a href="https://appframework.dev.java.net/"&gt;Swing Application Framework&lt;/a&gt;)
&lt;/li&gt;&lt;li&gt;Intégration d’un &lt;strong&gt;profiler&lt;/strong&gt; (ex profiler pack)
&lt;/li&gt;&lt;li&gt;Intégration d’un &lt;strong&gt;designer visuel pour les applications Web&lt;/strong&gt; (ex Visual Web Pack)
&lt;/li&gt;&lt;li&gt;Intégration d’un outil de &lt;strong&gt;développement&lt;/strong&gt; pour &lt;strong&gt;CDLC/MIDP et CDC&lt;/strong&gt; (ex Mobility Pack) (pas présent pour les utilisateurs Mac :( )
&lt;/li&gt;&lt;li&gt;Intégration d’un modeleur &lt;strong&gt;UML et SOA&lt;/strong&gt; (ex Entreprise Pack)
&lt;/li&gt;&lt;li&gt;Etc…&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.netbeans.org/community/releases/60/index.html"&gt;Pour plus d’information &lt;/a&gt;
&lt;a href="http://bits.netbeans.org/download/6.0/milestones/latest/"&gt;Et pour le download !&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-8028208672161241820?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/8028208672161241820/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=8028208672161241820' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8028208672161241820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/8028208672161241820'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/05/netbeans-60-m9-milestone-9-est-arriv.html' title='NetBeans 6.0 M9 (Milestone 9) est arrivé !'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6224595597588014495.post-3502843937783929227</id><published>2007-05-06T18:16:00.000+02:00</published><updated>2007-05-06T22:45:45.393+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='swing'/><category scheme='http://www.blogger.com/atom/ns#' term='BeansBiding'/><category scheme='http://www.blogger.com/atom/ns#' term='jsr295'/><title type='text'>Beans Binding (JSR 295) exemple</title><content type='html'>&lt;a href="http://bp3.blogger.com/_rpz_ucpdDqg/Rj4AsGdXnoI/AAAAAAAAAA4/ZKNEkBHilVQ/s1600-h/crazyfaces.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5061483788859055746" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp3.blogger.com/_rpz_ucpdDqg/Rj4AsGdXnoI/AAAAAAAAAA4/ZKNEkBHilVQ/s320/crazyfaces.jpg" border="0" /&gt;&lt;/a&gt;
&lt;div&gt;La version 0.5 de l’implémentation de référence de la &lt;a href="https://beansbinding.dev.java.net/"&gt;JSR 295 &lt;/a&gt;a été rendu public début avril
Ayant voulu essayer de faire joujou avec, je me suis heurté au manque d’exemple …
"&lt;em&gt;An proper introduction and examples on this project page are forthcoming&lt;/em&gt;."’

J’ai donc récupéré un ancien exemple de &lt;a href="http://weblogs.java.net/blog/zixle/archive/2006/05/ease_of_swing_d.html"&gt;Scott Violet sur son blog &lt;/a&gt;que j’ai adapté à cette nouvelle version de la RI de Beans Binding et les sources sont downloadable &lt;a href="http://www.box.net/index.php?rm=box_v2_download_shared_file&amp;file_id=f_60013700"&gt;ici&lt;/a&gt; (ou &lt;a href="http://www.box.net/shared/tz4yhpklik"&gt;la&lt;/a&gt;) et utilisent le jdk 1.6 (utilisation de GroupLayout)

Pour utiliser le projet NetBeans, il faut re-référencer les jars qui se trouve dans le répertoire &lt;em&gt;lib&lt;/em&gt; du projet et positionner le bon jdk !
La classe à exécuter est &lt;em&gt;BindingCaricatureController&lt;/em&gt; (&lt;em&gt;NoBindingCaricatureController&lt;/em&gt; et la version sans Beans binding)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6224595597588014495-3502843937783929227?l=paddyweblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paddyweblog.blogspot.com/feeds/3502843937783929227/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6224595597588014495&amp;postID=3502843937783929227' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3502843937783929227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6224595597588014495/posts/default/3502843937783929227'/><link rel='alternate' type='text/html' href='http://paddyweblog.blogspot.com/2007/05/beans-binding-jsr-295-exemple.html' title='Beans Binding (JSR 295) exemple'/><author><name>Patrick Champion</name><uri>http://www.blogger.com/profile/17766599320454819753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rpz_ucpdDqg/SwVJsSX6f5I/AAAAAAAAACc/q0pKV21dfjU/S220/patrick.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_rpz_ucpdDqg/Rj4AsGdXnoI/AAAAAAAAAA4/ZKNEkBHilVQ/s72-c/crazyfaces.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
