Ellipse Tutorial

Utilisation des stratégies de placement (Layout)

AccueilNotre catalogue de formationsNos partenairesDemande de devisEllipse FrameworkJWT (Javascript Widget Toolkit)License d'exploitation de nos logicielsVos développements sur mesuresTutorial sur le langage CSSTutorial sur le langage XMLTutorial sur le langage JavaTutorial sur le langage Visual Basic 6.0Historique de la sociétéNous contacterA propos de ce site
 

ATTENTION : Tutorial en cours d'écriture ! N'hésitez pas à nous signaler toute erreur ou suggestion.

Accès rapide :
   Les différentes stratégies de placement
   Exemple d'utilisation de stratégies de placement

Comme vous l'avez déjà remarqué, le modèle objet de la librairie JWT (Javascript Widget Toolkit) s'inspire fortement de la librairie Java Swing. Il en va de même pour la logique de positionnement des composants dans les conteneurs JWT : des layouts (stratégies de placement) peuvent être injectés dans un conteneur pour contrôler le positionnement de ses composants. De même que Java, plusieurs classes de layout vous sont proposées : elles dérivent toutes de la classe corelib.services.web.javascript.jwt.LayoutManager.

Les différentes stratégies de placement

Dans l'état actuel des choses, trois stratégies de placement vous sont proposées : la stratégie FlowLayout, la stratégie VerticalLayout et la stratégie BorderLayout. Reprenons une à une ces différentes stratégies de placement.

Exemple d'utilisation de stratégies de placement

Afin de mieux comprendre la notion de layouts (de stratégies de placement), je vous propose d'étudier un petit exemple permettant, à chaud, de changer la stratégie de placement utilisée par un conteneur. Pour sélectionner la stratégie à appliquer, nous utiliserons une barre de menu JWT. Voici d'abord le code de la WebPage : celui-ci définit notamment un tag div qui servira à placer le conteneur JWT nécessaire à notre démonstration.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
<!DOCTYPE html>
<html>
    <head>
        <title>Layout Manager Sample</title>
        <meta content="IE=8" http-equiv="X-UA-Compatible"></meta>
        
        <script language="Javascript" src="corelib/services/web/javascript/Core.js">
        </script>
        
        <script language="Javascript" src="LayoutManagers.js">
        </script>
        
        <link rel="stylesheet" type="text/css" 
              href="corelib/services/web/javascript/jwt/Jwt.css" />
        
    </head>
    <body>
    
        <h1>Layout Manager Sample</h1> <br />
    
        <center>
            <div id="forMenuBar"></div>
            <div id="forPanel"></div>
        </center>

    </body>
</html>
Fichier "LayoutManagers.html"

Ensuite il nous faut générer notre conteneur et les composants qui le constituent. Notez que cet exemple utilise plusieurs type de composants JWT et vous montre même comment définir une nouvelle classe de boutons. Lors de l'injection des composants dans le conteneur, via la méthode add, un second paramètre est utilisé : il s'agit de la contrainte de positionnement. Dans cet exemple, les contraintes ne sont utilisées qu'avec la stratégie de placement de type BorderLayout.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
importPackage( "corelib/services/web/javascript/jwt/FlowLayout.js" );
importPackage( "corelib/services/web/javascript/jwt/VerticalLayout.js" );
importPackage( "corelib/services/web/javascript/jwt/BorderLayout.js" );

importPackage( "corelib/services/web/javascript/jwt/Panel.js" );
importPackage( "corelib/services/web/javascript/jwt/DatePicker.js" );
importPackage( "corelib/services/web/javascript/jwt/ProgressBar.js" );


var MyButton = Component.extendClass( {
    initialize : function( text ) {
        this._htmlTagName = "input";
        Component.prototype.initialize.call( this );
        this.htmlTag.value = text;
        this.htmlTag.type = "button";
    }
} );

var panel = null;

addEventHandler( window, "onload", function() {

    panel = new Panel( new BorderLayout() );
                                              // \/ Only for BorderLayout
    panel.add( new DatePicker(),              BorderLayout.NORTH );
    panel.add( new MyButton( "Push me !" ),   BorderLayout.WEST );
    panel.add( new MyButton( "Pince me !" ),  BorderLayout.CENTER );
    panel.add( new MyButton( "Bidule me !" ), BorderLayout.EAST );
    panel.add( new ProgressBar( 75 ),         BorderLayout.SOUTH );
    
    panel.setCssStyle( "width:500px; height: 120px;" );
    panel.injectInDocument( document.getElementById( "forPanel" ) );

} );
Fichier "LayoutManagers.js"

Enfin, il faut gérer le changement de stratégie de positionnement : pour ce faire, nous allons définir une barre de menu avec les trois stratégies proposées précédemment. Le clic sur un des éléments du menu changera la stratégie utilisée. Voici le code Javscript final à fournir. Vous trouverez, immédiatement en dessous de l'extrait de code, le résultat produit par ce code.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
importPackage( "corelib/services/web/javascript/jwt/FlowLayout.js" );
importPackage( "corelib/services/web/javascript/jwt/VerticalLayout.js" );
importPackage( "corelib/services/web/javascript/jwt/BorderLayout.js" );

importPackage( "corelib/services/web/javascript/jwt/Panel.js" );
importPackage( "corelib/services/web/javascript/jwt/DatePicker.js" );

importPackage( "corelib/services/web/javascript/jwt/MenuBar.js" );
importPackage( "corelib/services/web/javascript/jwt/Menu.js" );
importPackage( "corelib/services/web/javascript/jwt/MenuItem.js" );


var MyButton = Component.extendClass( {
    initialize : function( text ) {
        this._htmlTagName = "input";
        Component.prototype.initialize.call( this );
        this.htmlTag.value = text;
        this.htmlTag.type = "button";
    }
} );

var menuBar = null, panel = null;

addEventHandler( window, "onload", function() {

    panel = new Panel( new BorderLayout() );
                                              // \/ Only for BorderLayout
    panel.add( new DatePicker(),              BorderLayout.NORTH );
    panel.add( new MyButton( "Push me !" ),   BorderLayout.WEST );
    panel.add( new MyButton( "Pince me !" ),  BorderLayout.CENTER );
    panel.add( new MyButton( "Bidule me !" ), BorderLayout.EAST );
    panel.add( new DatePicker( 75 ),         BorderLayout.SOUTH );
    
    panel.setCssStyle( "width:500px; height: 120px;" );
    panel.injectInDocument( document.getElementById( "forPanel" ) );


    menuBar = new MenuBar();
        var layoutMenu = new Menu( "Layout Managers" );
        
            var flowLayoutMenuItem = new MenuItem( "FlowLayout", 
                "javascript: panel.setLayout( new FlowLayout( FlowLayout.CENTER ) );" );
            layoutMenu.add( flowLayoutMenuItem );

            var verticalLayoutMenuItem = new MenuItem( "VerticalLayout",
                "javascript: panel.setLayout( new VerticalLayout() );" );
            layoutMenu.add( verticalLayoutMenuItem );

            var borderLayoutMenuItem = new MenuItem( "BorderLayout",
                "javascript: panel.setLayout( new BorderLayout() );" );
            layoutMenu.add( borderLayoutMenuItem );

        
        menuBar.add( layoutMenu );

    menuBar.setCssStyle( "width:500px; height: 24px;" );
    menuBar.injectInDocument( document.getElementById( "forMenuBar" ) );

} );
Fichier "LayoutManagers.js"