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

NetBeans Java Discussion :

Mon composant dans la palette Netbeans


Sujet :

NetBeans Java

  1. #1
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut Mon composant dans la palette Netbeans
    Salut tous !

    J'écris mon propre panel pour le mettre dans la palette de Netbeans;
    Un bout de code doit se déclencher avec la mise en place d'un JTable personnalisé :
    maTable = new JTableSpéciale( etc...);

    une fois dans la palette, je peux mettre mon panel sur le JFrame d'un nouveau projet,
    mais comment faire pour que mon bout de code s'exécute ?
    le FormShown du compo ne se déclenche pas au démarrage du nouveau projet...
    je ai mis le code dans formMouseClicked du panel mais ça m'obligeait à cliquer pour voir maTable;
    je l'ai mis dans focus gained du panel en m'assurant qui'il ne se déroule qu'une fois,
    comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      private void formFocusGained(java.awt.event.FocusEvent evt) {                               
         if (ouverture) {
                 ouverture = false;
                 ... mon code       
            }
        }
    et dans le programme appelant j'écris monPanel1.requestFocusInWindow();
    ça marche,
    ...mais c'est un peu tordu quand même !

    comment faire mieux ?

  2. #2
    Membre émérite
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Par défaut
    Salut Fraco,

    Et quoi sert ce bout de code ?
    Si j'ai bien compris, tu as un panel qui contient une table qui a besoin d'un bout de code avant de pouvoir s'afficher ?
    Et pourquoi ne pas exécuter ce bout de code dans le constructeur du panel ! voir mieux dans une nouvelle méthode qui sera exécuter avant l'initComponents()

    n!co

  3. #3
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    > Et quoi sert ce bout de code ?
    C'est la création d'une JXTable personnalisée pour mettre un combobox dans une seule cellule (pas à toute la colonne).

    > Si j'ai bien compris, tu as un panel qui contient une table qui a besoin d'un bout de code avant de pouvoir s'afficher ?
    le panel appelle ma classe : public maTable ta = new maTable(lignes,titres);

    Et pourquoi ne pas exécuter ce bout de code dans le constructeur du panel !
    euh, le panel est fourni tout construit par la palette de Netbeans, je lui colle un JScrollPane;

    > voir mieux dans une nouvelle méthode qui sera exécuter avant l'initComponents()

    finalement je lui ai mis une méthode CreerTable;
    on voit je pense que je suis débutant sur des bases fragiles et peu orthodoxes...
    je poste des extraits de code ci dessous :

    la table :

    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
     
    public class maTable extends JXTable {       
        public maTable(Object[][] rowData, Object[] columnNames) {
              super(rowData, columnNames);
        }                                           // on peut placer max. 5 combobox sur max. 5 cellules
        JComboBox monCombo = null; 
        Object [][] listeCombos = {{-1,-1,null},{-1,-1,null},{-1,-1,null},{-1,-1,null},{-1,-1,null}};    
        int maLigne = 0, maColonne = 0, index = 0;
                                                                                                  // SET COMBO
        public void setCombo(int row, int column, JComboBox combo) {        
           maLigne = row;
           maColonne = column;
           monCombo = combo;       
            int index = 0, nb = 0, ligne = -1;
            while (nb < 5) {             // chercher une entrée non occupée pour y mettre le combo 
               int nuli = Integer.parseInt(listeCombos[nb][0].toString());          
               if (nuli > -1) {
                   index += 1;                                                 // occupé, passer au suivant
               }
               else {                                                             // case vide, écrire ici
                  listeCombos[index][0] = (Object)row;
                  listeCombos[index][1] = (Object)column;
                  listeCombos[index][2] = combo;
                  break;
               }
               nb += 1;
           } 
        }
                                                                                            // GET CELL EDITOR
        public TableCellEditor getCellEditor(int row, int column) {
            TableCellEditor tce = null;
            tce = super.getCellEditor(row, column);             // par défaut l'éditeur standard
            int nuli = -1, nucol = -1;
            JComboBox ceCombo = null;
            for (int nb = 0; nb < 5; nb++) {       // voir s'il y a un/des combo(s) dans le liste
                try {             
                    nuli =  Integer.parseInt(listeCombos[nb][0].toString());  
                    nucol = Integer.parseInt(listeCombos[nb][1].toString());  
                    ceCombo = (JComboBox)listeCombos[nb][2];
                } 
                catch (NumberFormatException ex) {
                    ex.printStackTrace();
                    JOptionPane.showMessageDialog(null," erreur de lecture ceCombo ");
                }        
                                                                           // si trouvé des indications valides
                if (nuli > -1 && nucol > -1 && !((listeCombos[nb][2]) == null)) {   
                          if (row == nuli && column == nucol) {
                                tce = new DefaultCellEditor(ceCombo);     
                                                        // ceCombo comme éditeur dans cette cellule
                          }      
                }           
            }
            return tce;                
      }
    le panel :

    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 maTable ta;
      public Object [][] lignes;
                                                                                                 // CREER TABLE
            public void CreerTable(int nbLignes, Object []titres) {       
            int nbCol = titres.length;
            lignes = new Object[nbLignes][nbCol];
            int i = 0, j = 0;
            for ( i = 0; i < nbLignes; i++) {  
              for (j = 0; j < nbCol; j++) { 
                 lignes [i][j]= null;
              }
            }             
     
            ta = new maTable(lignes,titres);              
            ta.getColumnModel().getColumn(0).setPreferredWidth(20);         
                                                                            // largeur des colonnes de la table
            ta.getColumnModel().getColumn(1).setPreferredWidth(430);        
            jScrollPane1.setPreferredSize(getSize());
            ta.setPreferredSize(jScrollPane1.getPreferredSize());               
            ta.setOpaque(true);  
            ta.setVisible(true);
            ta.repaint();
            ta.validate();   
            jScrollPane1.setViewportView(ta);      
            jScrollPane1.validate();   
            repaint();
            validate();
        }
                                                                                            // TABLE SET VALUE
        public void TableSetValue(int ligne, int colonne, Object valeur) {                                  
              ta.getModel().setValueAt(valeur.toString(),ligne,colonne);     
        }
                                                                                            // TABLE SET COMBO
        public void TableSetCombo(int ligne, int colonne, JComboBox combo) {          
             ta.setCombo(ligne,colonne,combo);
        }
    et dans le programme utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     private void formComponentShown(java.awt.event.ComponentEvent evt) {                                    
            int i = 0;    
            titres[0] =  "titi";  
            titres[1] =  "toto";           
            panelTableCombo1.CreerTable(5,titres);    
            String[] s = {"UNO11", "DOS11",  "TRES11"};
            JComboBox combo = new JComboBox(s); 
            panelTableCombo1.TableSetCombo(1,1,combo);  //   premier combo...              
            String[] s1 =  {"M21", "MME21",  "MAITRE21"};        
            JComboBox combo1 = new JComboBox(s1); 
            panelTableCombo1.TableSetCombo(2,1,combo1);  //  2ème combo...               
    }
    on peut améliorer tout ça je pense (ça marche tel quel mais bon..)
    merci à toutes réponses

  4. #4
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    > Et pourquoi ne pas exécuter ce bout de code dans le constructeur du panel !

    Bingo !

    Je viens de comprendre quelque chose.
    merci nico

    (jamais écrit dans ce machin, moi...)

  5. #5
    Membre émérite
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Par défaut
    Citation Envoyé par fraco Voir le message
    > Et pourquoi ne pas exécuter ce bout de code dans le constructeur du panel !

    Bingo !

    Je viens de comprendre quelque chose.
    merci nico

    (jamais écrit dans ce machin, moi...)
    Après visualisation du code j'irais même jusqu'a dire, que tu pourrais tout faire dans ta classe MaTable, et ce serait cette dernière qui serait ajouté à la palette.

  6. #6
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    Salut nico !

    > Après visualisation du code j'irais même jusqu'a dire, que tu pourrais tout faire
    > dans ta classe MaTable, et ce serait cette dernière qui serait ajouté à la palette.

    ah, oui c'est probablement la bonne façon de faire... et je dépose la classe de la palette sur mon JFrame. (j'ai transformé mon code en remplaçant JCombobox par Component : on peut placer aussi Textfield ou Checkbox).

    à propos je viens de tomber sur un os :
    quand j'utilise mon panel, si la table a beaucoup de lignes le scroll ne se fait que mollement : disons une table avec 25 lignes, les 8 premières visibles;
    dans le scroll vertical la zone bleue (cabine de l'ascenseur) occupe les 3/4 en hauteur... je peux descendre, jusqu'à la ligne 12 c'est visible, après le défilement vertical s'arrête malgré que je continue à descendre (touche bas).
    déjà vu ça ?

    dernière question : n'est-il pas possible de générer l'apparition de combobox
    dans la JXTable, via son panneau "Propriétés" (cell editor par exemple) ?

    Merci pour tout !

  7. #7
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    Salut nico !

    > Après visualisation du code j'irais même jusqu'a dire, que tu pourrais tout faire
    > dans ta classe MaTable, et ce serait cette dernière qui serait ajouté à la palette.

    Quand j'essaie d'ajouter la classe MaTable à la palette (clic droit / tools / add to palette), le massage suivant s'affiche ;

    no JavaBean found under selected nodes

    et effectivement si je passe par le jar, la classe n'y est pas...
    c'est pour cette raison que j'ai utilisé un panel.
    faut-il transformer ma classe en Bean ? si oui comment faire ?
    (help)

  8. #8
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    victoire !
    ça marche avec un Bean
    je posterai mon code si quelqu'un est intéressé.
    merci à tous.

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

Discussions similaires

  1. insérer un composant dans la palette
    Par laredo dans le forum Débuter
    Réponses: 6
    Dernier message: 18/09/2008, 14h09
  2. Ajout composant dans la palette
    Par schneidb dans le forum NetBeans
    Réponses: 3
    Dernier message: 18/04/2007, 10h57
  3. Ajouter un composant dans la palette
    Par soad dans le forum NetBeans
    Réponses: 19
    Dernier message: 07/09/2006, 09h29
  4. Pb pour afficher des composants dans la palette
    Par Captain_JS dans le forum C++Builder
    Réponses: 1
    Dernier message: 12/07/2005, 18h35
  5. [Delphi] Icone des composants dans la palette
    Par jacquesberger dans le forum Composants VCL
    Réponses: 2
    Dernier message: 13/04/2004, 15h42

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