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

Forms Oracle Discussion :

[forms10g]Javabean et événement


Sujet :

Forms Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut [forms10g]Javabean et événement
    Bonjour à tous,

    Contexte :
    forms 10g
    base oracle 10g

    J'ai développé un javabean du style ce n'est évidemment pas celui-ci, mais cela permet de reproduire le problème de manière simple :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import java.awt.*;
    import java.awt.event.*;
    import java.text.*;
    import java.util.*;
     
    import javax.swing.*;
    import javax.swing.border.*;
     
    import oracle.forms.ui.VBean;
    import oracle.forms.ui.CustomEvent;
    import oracle.forms.handler.IHandler;
    import oracle.forms.properties.ID;
     
    public class TestBouton extends VBean
                            implements ActionListener
    {
      public final static ID CLIC_BOUTON = ID.registerProperty("CLIC_BOUTON");
     
      private IHandler m_handler;
     
      private final JFrame frame = new JFrame();
      private final JPanel panel = new JPanel();
      private final static JButton monBouton = new JButton ("Mon bouton");
     
      public void actionPerformed (ActionEvent e)
      {
        CustomEvent ce = new CustomEvent (m_handler, CLIC_BOUTON);
        dispatchCustomEvent (ce);
      }
     
      public TestBouton()
      {
        monBouton.addActionListener(this);
        panel.setLayout (new BorderLayout());
        panel.add (monBouton, BorderLayout.NORTH);
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
      }
     
      public void init (IHandler handler)
      {
        super.init (handler);
        m_handler = handler;
      }
     
        public static void main(final String[] args)
        throws ParseException 
        {
            SwingUtilities.invokeLater(new Runnable() 
            {
                public void run() 
                {
                     TestBouton test = new TestBouton();
                }
            });
        }
    }
    Lorsque que je l'exécute et que je clique sur le bouton j'ai l'erreur suivante :
    java.lang.IllegalArgumentException: null source
    at java.util.EventObject.<init>(EventObject.java:34)
    at oracle.forms.ui.CustomEvent.<init>(Unknown Source)
    at TestBouton.actionPerformed(TestBouton.java:27)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
    at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
    at java.awt.Component.processMouseEvent(Component.java:5100)
    at java.awt.Component.processEvent(Component.java:4897)
    at java.awt.Container.processEvent(Container.java:1569)
    at java.awt.Component.dispatchEventImpl(Component.java:3615)
    at java.awt.Container.dispatchEventImpl(Container.java:1627)
    at java.awt.Component.dispatchEvent(Component.java:3477)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
    at java.awt.Container.dispatchEventImpl(Container.java:1613)
    at java.awt.Window.dispatchEventImpl(Window.java:1606)
    at java.awt.Component.dispatchEvent(Component.java:3477)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
    Cette erreur concerne la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CustomEvent ce = new CustomEvent (m_handler, CLIC_BOUTON);
    J'ai du oublier quelque chose, mais je ne vois vraiment pas quoi. Comme c'est le premier javabean que j'ai entièrement développé, j'espère que vous excuserez mon ignorance...

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Par défaut
    ce n'est évidemment pas celui-ci
    ....

    Que veux tu faire exactement?
    es tu allé faire un tour ici et

    CDLT.

  3. #3
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Bonjour taska,

    Merci de t'intéresser à mon problème.

    Citation Envoyé par taska
    ....Que veux tu faire exactement?
    Eh bien quand je clique sur un bouton, je veux que cela déclenche un évènement que je puisse intercepter dans forms. Et pour l'instant l'événement que je déclenche provoque l'erreur citée dans post précédent.

    Citation Envoyé par taska
    es tu allé faire un tour ici et
    Oui entre autre (je me suis tapé plein d'exemples) et je ne vois pas la différence entre ce que j'ai fait et les exemples que j'ai lu

  4. #4
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Après de nombreux tests, il semble que le problème vienne de la manière dont j'enregistre le composant dans forms.

    Si je mets en dur la propriété implementation class de mon item, cela fonctionne : je n'ai plus l'erreur et je capte qu'un évènement est déclenché au niveau de mon trigger WHEN-CUSTOM-ITEM-EVENT.

    Par contre si j'enregistre mon bean avec le package FBEAN, cela provoque l'erreur précédemment citée. Pour info voici comment est enregistré mon bean dans forms :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    declare
      bean_it ITEM:=FIND_ITEM('JBEAN.TESTBOUTON'); 
    begin
       if not id_null (bean_it) then
         fbean.register_bean(bean_it,1, 'xxx.yyy.zzz.TestBouton');
         fbean.set_logging_mode (bean_it, 1, fbean.log_all);
         fbean.enable_event (bean_it,1, 'actionListener', true);
       end if;
    end;
    Je me pose plusieurs questions :
    - est-il possible de communiquer avec le javabean lorsqu'on l'a enregistré avec le package FBEAN ?
    - y a-t-il quelque chose à faire en plus au niveau de la classe java ?
    - ai-je oublier quelque chose à faire dans forms ?

  5. #5
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    C'est beaucoup plus simple d'écrire un PJC qui étend VButton, car il sera géré par Forms comme un bouton standard. Pas besoin d'envoyer un message comme qui le bouton à été pressé, le trigger When-Button-Pressed sera déclenché naturellement.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Par défaut
    Citation Envoyé par SheikYerbouti
    écrire un PJC qui étend VButton
    L'idée est peut être de capter un évenement qui peut ne pas provenir d'un bouton mais d'un traitement ...


    CDLT.

  7. #7
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par SheikYerbouti
    C'est beaucoup plus simple d'écrire un PJC qui étend VButton, car il sera géré par Forms comme un bouton standard. Pas besoin d'envoyer un message comme qui le bouton à été pressé, le trigger When-Button-Pressed sera déclenché naturellement.
    Oui, mais mon exemple est simplifié : j'ai en fait une fenêtre avec n boutons et suivant le bouton sur lequel je clique je dois envoyer une réponse à forms.

    J'utilise JAVA car j'ai besoin :
    1. d'informations qui sont sur le poste client
    2. d'utiliser des fonctions que forms ne propose pas.


    Taska, merci pour ton exemple, je regarde cela tout de suite. Comment l'as tu enregistrer ? avec fbean ?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Par défaut
    Ce code fonctionne chez moi, essaies de l'adapter :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    package com.td;
     
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
    import oracle.forms.handler.IHandler;
    import oracle.forms.properties.ID;
    import oracle.forms.ui.*;
    import oracle.forms.ui.VBean;
     
    import oracle.forms.ui.CustomEvent;
     
     
    /*
     * Forms return EVENTS
     * @author Thierry Delongeas
     */
    public class Event extends VBean {
     
     private static final ID TEST = ID.registerProperty("TEST");
     private JButton jb = new JButton();
     private IHandler  m_handler; 
     
     public Event() {
            super();
            jb.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e){jbPress(e);}});
            this.add(jb);
       }
     
      private void jbPress (ActionEvent e){
       try{CustomEvent ce = new CustomEvent(m_handler,TEST);
            dispatchCustomEvent(ce);
            } catch (Exception ex){}
      } 
     
     public boolean setProperty(ID property, Object value) {  
         return super.setProperty(property, value);
      }
     
     public Object getProperty(ID pId) {
        return super.getProperty(pId);
     }
     
      public void init(IHandler handler) { 
        m_handler = handler; 
        super.init(handler); 
    }
     
     
    private void log (String temp ){
      System.out.println (temp);
    }
     
    }
    ... et créer une form, ajouter le bean sur un canvas et dans le WHEN-CUSTOM-ITEM-EVENT ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    message ('Salut l''artiste');
    message ('Salut l''artiste');
    .. et cliquer sur le JButton

    CDLT.

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Par défaut
    Citation Envoyé par plaineR
    Lorsque que je l'exécute et que je clique sur le bouton j'ai l'erreur suivante :
    ... je ne l'avais pas testé. Chez moi, sans toucher le code, il fonctionne parfaitement sous réserve de l'enregistrer comme je le propose...

    Pour le FBean, désolé mais je ne m'y suis jamais intérressé ...
    Qu'entends tu par :
    de récupérer en synchrone le résultat de l'affichage
    j'ai testé ceci qui à l'air de fonctionner :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    package com.td;
    import java.awt.*;
    import java.awt.event.*;
    import java.text.*;
    import java.util.*;
     
    import javax.swing.*;
    import javax.swing.border.*;
     
    import oracle.forms.ui.VBean;
    import oracle.forms.ui.CustomEvent;
    import oracle.forms.handler.IHandler;
    import oracle.forms.properties.ID;
     
     
    public class TestBouton extends VBean
                            implements ActionListener
    {
      public final static ID CLIC_BOUTON = ID.registerProperty("CLIC_BOUTON");
      public final static ID SHOW_FRAME  = ID.registerProperty("SHOW_FRAME");
     
      private IHandler m_handler;
     
      private final JFrame frame = new JFrame();
      private final JPanel panel = new JPanel();
      private final static JButton monBouton = new JButton ("Mon bouton");
     
      public void actionPerformed (ActionEvent e)
      { log (e.toString());
        CustomEvent ce = new CustomEvent (m_handler, CLIC_BOUTON);
        dispatchCustomEvent (ce);
      }
      public boolean setProperty(ID property, Object value) {  
         if (property == SHOW_FRAME){  log ("SHOW_FRAME");frame.show();}
        return super.setProperty(property, value);
         }
     
      public TestBouton()
      {
        monBouton.addActionListener(this);
        panel.setLayout (new BorderLayout());
        panel.add (monBouton, BorderLayout.NORTH);
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
      }
     
      public void init (IHandler handler)
      { log ("init");
        super.init (handler);
        m_handler = handler;
      }
     
        public static void main(final String[] args)
        throws ParseException 
        {
            SwingUtilities.invokeLater(new Runnable() 
            {
                public void run() 
                {
                     TestBouton test = new TestBouton();
                }
            });
        }
     
        private void log (String temp ){
      System.out.println (temp);
    }
     
    }
    et dans un bouton de forms :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_custom_property ('UTIL.BEAN',1,'SHOW_FRAME','');
    CDLT.

  10. #10
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    J'avance

    Je viens de me taper un certains nombre de doc en anglais. En fait d'après ce que j'ai compris, CustomEvent est à utiliser pour trapper les événements pour un javabean enregistré directement (par la propriété "Implementation class")

    Quand on enregistre le bean avec FBean, il ne rentre pas dans la procédure init, le handler est donc null d'où l'erreur obtenue.

    Voici donc ma dernière question : comment capter un événement d'un bean enregistré avec FBean ?

    Si je ne trouve pas je pense que j'utiliserai la méthode que tu m'as proposée taska. Merci de ton aide.

  11. #11
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Et le forms-pjc-bean site alors !
    http://forms.pjc.bean.over-blog.com/...e-5558424.html

  12. #12
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Mais, très honnêtement, utiliser FBean pour gérer un bouton c'est tiré par les cheveux.

  13. #13
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par SheikYerbouti
    Oui j'ai vu cet exemple, mais soit je ne l'ai pas compris (ce qui est bien probable), soit ça me paraît bien compliqué... D'après ce que j'ai compris : il faut créer un javabean dont on précise la propriété "Implementation class", puis un second javabean pour lequel on précise la classe avec FBEAN et ces 2 javabeans vont communiquer ensemble. C'est bien cela ou je me trompe ?

    Néanmoins, j'ai vue des exemples (la demos hyperlink entre autre), où l'on peut enregister le javabean uniquement avec FBEAN et communiquer avec celui-ci. Il doit y avoir un truc que j'ai raté mais je ne vois pas quoi.

    Citation Envoyé par SheikYerbouti
    Mais, très honnêtement, utiliser FBean pour gérer un bouton c'est tiré par les cheveux.
    Encore une fois ce n'est pas seulement un bouton (c'est pour simplifier l'exemple), c'est tout un écran qui à l'origine étend la classe JFrame (c'est aussi pour cela que je souhaitais utiliser FBEAN), mais ça je peux corriger pour qu'il étende la classe VBean. Bêtement je me dis que si cela ne fonctionne pas avec un bouton, cela risque de ne pas fonctionner avec tout un écran. Et plutôt que polluer tout mon code, je préfère faire des tests sur exemple simple.

    En tout cas merci de t'intéresser à mon problème

  14. #14
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    VBean est la solution. FBean sert plutôt pour les bean "standards" qui n'ont le plus souvent aucune représentation visuelle.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Forms10G] JavaBean et dé-register
    Par pompidouwa dans le forum Forms
    Réponses: 13
    Dernier message: 24/04/2008, 17h06
  2. Utilisation Javabean dans forms10g
    Par fabrizio_r7 dans le forum Forms
    Réponses: 39
    Dernier message: 21/12/2007, 15h56
  3. [forms10G] Enregistrement d'un javabean avec FBEAN
    Par plaineR dans le forum Forms
    Réponses: 4
    Dernier message: 16/04/2007, 16h06
  4. Réponses: 13
    Dernier message: 20/03/2007, 17h04
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

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