IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

myTSwingActions, une API pour la création et l'utilisation d'Actions Swing


Sujet :

AWT/Swing Java

  1. #1
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut myTSwingActions, une API pour la création et l'utilisation d'Actions Swing
    Bonjour,

    Je voudrais vous présenter une petite API que j'ai développé.
    myTSwingActions permet une utilisation très simple des Actions Swing avec une simple annotation.

    Voici un exemple simple pour illustrer son utilisation :

    Soit un code "classique" d'une fenêtre Swing utilisant une Action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    public class MyFrame extends JFrame {
     
        private JButton actionButton;
     
        private JMenuItem actionMenuItem;
     
        public MyFrame() {
            // Components initialization
            ...
     
            // Building actions
            Action myAction = new MyAction();
            actionButton.setAction(myAction);
            actionMenuItem.setAction(myAction);
        }
     
        /** A customized Action. */
        private final class MyAction extends AbstractAction {
     
            MyAction() {
                // Loading and setting action properties
                ResourceBundle resources = ...;
                putValue(NAME; resources.getString("MyAction.name"));
                putValue(...);
            }
     
            public void actionPerformed(ActionEvent evt) {
                // In most cases, we want actions to be performed out of the EDT.
                new Thread() {
     
                    public void run() {
                        // Do something
                    }
                }.start();
            }
        }
    }
    On voit bien qu'une grosse partie du code écrit sert à la déclaration et l'implémentation de l'Action. Avec plusieurs actions on se retrouve vite à réécrire encore et encore plusieurs fois le même genre de code.

    Afin de gagner en temps et en lisibilité, l'API myTSwingAction vous propose d'utiliser l'annotation @Action pour ne vous concentrer que sur ce qui vous intéresse vraiment
    • Ce que l'action fait vraiment.
    • Les composants utilisant l'action.

    et vous affranchir de tout le code pompeux de l'implémentation de l'Action.
    Voici le code équivalent avec myTSwingActions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class MyFrame extends JFrame {
     
        @Action("myAction")
        private JButton actionButton;
     
        @Action("myAction")
        private JMenuItem actionMenuItem;
     
        public MyFrame() {
            // Components initialization
            ...
     
            // Building actions
            new ActionsManager(this).buildActions();
        }
     
        /** A customized Action. */
        @Action
        public void myAction() {
            // Do something
        }
    }
    L'API est téléchargeable ici, ou si vous utilisez maven vous pouvez simplement ajouter la dépendance suivante :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <dependency>
        <groupId>com.mytdev</groupId>
        <artifactId>myt-swing-actions</artifactId>
        <version>1.2.0</version>
    </dependency>

    Vous trouverez également plus de détails sur les fonctionnalités de l'API ici (en anglais).

    N'hésitez pas à me faire vos retour

    le y@m's
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Un autre point intéressant que je n'ai pas soulevé dans le premier post, est que le mécanisme de construction des actions permet de définir les propriétés de l'action dans un fichier .properties qui sera automatiquement chargé via un ResourceBundle
    ainsi il suffit d'ajouter un fichier MyFrame.properties au code précédent
    Code other : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Action.myAction.name = My Action
    Action.myAction.icon = org/example/images/action.png
    L'internationalisation est automatiquement gérée, ainsi on peut simplement ajouter un fichier MyFrame_fr.properties
    Code other : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Action.myAction.name = Mon Action
    Action.myAction.icon = org/example/images/action_fr.png
    Et les propriétés seront chargées selon la locale courante. Là encore sans ajouter une seule ligne de code dans votre classe .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2007, 20h49
  2. [Recherche]une API pour colorer le code source
    Par kedare dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 31/07/2006, 08h48
  3. Réponses: 5
    Dernier message: 18/07/2006, 12h10
  4. Réponses: 36
    Dernier message: 13/05/2004, 18h22
  5. JEG : jAPI : Une API pour C++Builder
    Par JEG dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/11/2003, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo