Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'affichage pour un sous-formulaire

    5 juillet 2016 à 20:18:51

    Bonjour,

    environnement :

    Système d'exploitation : Ubuntu
    Programme : Java
    Base de Données : MySQL


    exposition du problème :

    j'ai un formulaire avec des champs et un sous-formulaire.
    Quand j'appuie sur la touche [Page précédente] ou [Page suivante], le programme va chercher les valeurs dans la Base de données et les affiche dans chacun des champs par la méthode setText(Valeur). A ce niveau, il n'y a aucun problème.

    Les valeurs des champs commandent à leur tour un sous-formulaire (qui se trouve dans le formulaire) qui affiche des valeurs en lignes et colonnes. Quand j'ouvre le formulaire, les valeurs du sous-formulaire s'affichent bien, mais ensuite quand j'appuie sur les touches [Page suivante] ou [Page précédente], les valeurs du formulaire changent bien mais non celles du sous-formulaire. Pourtant, j'ai fait un test qui consiste à imprimer les valeurs du sous-formulaire par la méthode println(sousformulaire) dans le terminal et tout se passe bien : le programme va bien chercher ces valeurs dans la Base et les imprime par println dans le terminal, mais elles n'arrivent pas à s'afficher dans le sous-formulaire (qui est une JTable que j'insère ensuite dans un JPanel qui est intégré dans le Panel général du formulaire).

    Donc les données s'affichent bien dans le sous-formulaire pour la première fois mais pas ensuite, ce qui me fait dire que la solution n'est pas loin mais il y a encore une chose qui m'échappe.
    En résumé, tout se passe bien à toutes les étapes sauf la dernière qui consiste à afficher les données dans le sous-formulaire.
    Si vous voulez que je vous mette le code, dites-le moi.

    Merci de m'apporter une aide,

    fenlabise

    • Partager sur Facebook
    • Partager sur Twitter
      5 juillet 2016 à 20:54:27

      Oui le code serais le bienvenu ^^

      Cordialement

      • Partager sur Facebook
      • Partager sur Twitter
        12 juillet 2016 à 18:52:11

        Bonjour,

        Pour que le programme fonctionne chez vous, il faudrait aussi la Base de données...
        Pour faciliter la compréhension, quand j'appuie sur la touche [Page suivante|précédente] la sous-classe ClavierListener se met en marche et exécute très bien la commande : il lance la méthode private void accesDonnees(int ligne) qui va chercher les données selon la ligne qu'on lui envoie. Tout cela est parfait, mais l'affichage ne se fait pas !!
        Merci de me donner un coup de pouce.
        Voici le code. Il est long mais assez bien commenté, je pense.


        import java.awt.BorderLayout;
        import java.awt.Color;
        import java.awt.Dimension;
        import java.awt.Font;
        import java.awt.event.FocusEvent;
        import java.awt.event.FocusListener;
        import java.awt.event.KeyEvent;
        import java.awt.event.KeyListener;
        
        import java.text.NumberFormat;
        import java.text.ParseException;
        import java.util.Stack;
        
        import javax.swing.BorderFactory;
        import javax.swing.JRadioButton;
        import javax.swing.JCheckBox;
        import javax.swing.ButtonGroup;
        import javax.swing.DefaultCellEditor;
        import javax.swing.JComboBox;
        import javax.swing.JTextField;
        import javax.swing.JTextArea;
        import javax.swing.JScrollPane;
        import javax.swing.JFormattedTextField;
        import javax.swing.JLabel;
        import javax.swing.JPanel;
        import javax.swing.JFrame;
        import javax.swing.JOptionPane;
        import javax.swing.JTable;
        import javax.swing.event.TableModelEvent;
        import javax.swing.event.TableModelListener;
        import javax.swing.table.DefaultTableCellRenderer;
        import javax.swing.table.TableModel;
        import javax.swing.text.MaskFormatter;
        
        /**
         * formulaire principal qui rassemble toutes les données concernant les messes
         */
        public class IntentionsMessesFormulaire {
            private final JFrame fenMesses = new JFrame();
            private final boolean reponse[] = {false, true};
            private final String[] titreCelebrations = {"le", "par"};
            private final JPanel pim = new JPanel(),
                        pintro = new JPanel(), ptitre = new JPanel(),
                        pcelebrations = new JPanel(), pnature = new JPanel(),
                        pmontant = new JPanel(), ppaiement = new JPanel(),
                        pcontrol = new JPanel();
            private JTable jtListeCelebrations;
            private final JTextField tfNbMesses = new JTextField(),
                            tfOrdre = new JTextField();
            private final JTextArea tfIntentions = new JTextArea(4, 50);
            private JFormattedTextField tfDateEnregistrement = new JFormattedTextField();
            private final JFormattedTextField tfhonor = new JFormattedTextField(NumberFormat.getCurrencyInstance()),
                            tfcompl = new JFormattedTextField(NumberFormat.getCurrencyInstance());
            private final JLabel lbDateEnregistrement = new JLabel("                                                            Date d'enregistrement"),
                            lbTitre = new JLabel("Intentions de Messes N° :"),
                            lbNomFidele = new JLabel("Nom du Fidèle"),
                            lbNbMesses = new JLabel("Nombre de Messes"),
                            lbIntentions = new JLabel("Intentions de Messes"),
                            lbHonoraire = new JLabel("Honoraires"),
                            lbComplement = new JLabel("Complément");
            private JComboBox cbNomFidele, cbMoines;
            private final JRadioButton rbMesse = new JRadioButton("Messe     "),
                                rbNeuvaine = new JRadioButton("Neuvaine"),
                                rbTrentain = new JRadioButton("Trentain "),
                                rbEspeces = new JRadioButton("Espèces"),
                                rbCheques = new JRadioButton("Chèques"),
                                rbCB = new JRadioButton("CB");
            private final ButtonGroup bgNature = new ButtonGroup(),
                                bgPaiement = new ButtonGroup();
            private final JCheckBox ckReponse = new JCheckBox("a-t-on envoyé une réponse ?");
            private JScrollPane scrollCelebration;
            private final Color bleuClair = new Color(135, 255, 245);
            private final Temps dateEnregistrement = new Temps(),
                            dateCelebration = new Temps();
            private Nature ms = Nature.MS,
                    nv = Nature.NV,
                    tr = Nature.TR;
            private ExtractionValeur<TableModelEvent> evtmeM, evtmeC;
            private ExtractionValeur<Object[]> nvIntention;
            private ExtractionValeur<Object[][]> nvLstCeleb;
            private final DAO<IntentionsMesses> intentionsMessesDAO = new IntentionsMessesDAO(Connect.getInstance());
            //établissement des listes déroulantes
            private final IntentionsMesses listesDeroulantes = intentionsMessesDAO.listeDeroulante();
            private final Stack listeFideles = listesDeroulantes.getListeFideles();
            private final Stack listeFidelesClefs = listesDeroulantes.getListeFidelesClef();
            private final Stack listeMoines = listesDeroulantes.getListeMoines();
            private final Stack listeMoinesClefs = listesDeroulantes.getListeMoinesClef();
            //nombre de lignes dans la Base
            private IntentionsMesses intentions = intentionsMessesDAO.charge(0);
            private int derniereLigne = intentions.getMessesNombre();
            private int ligne = intentions.getMessesNombre();
           
            @SuppressWarnings("static-access")
            public IntentionsMessesFormulaire() throws ClassNotFoundException,
                    InstantiationException,
                    IllegalAccessException {
                //format de la fenêtre qui reçoit les données
                fenMesses.setTitle("Intentions des Messes");
                fenMesses.setBounds(300, 150, 600, 550);
                fenMesses.setResizable(false);
                fenMesses.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                fenMesses.setVisible(true);   
                //on utilise JTextPane pour la mise en forme de la liste déroulante
                cbNomFidele = new JComboBox(listeFideles);
                cbNomFidele.setRenderer(new TextPaneRenderer(10));
                cbNomFidele.setMaximumRowCount(25);
                cbMoines = new JComboBox(listeMoines);
                cbMoines.setMaximumRowCount(13);
                //mise en forme des boutons radios
                rbMesse.setBackground(bleuClair);
                rbNeuvaine.setBackground(bleuClair);
                rbTrentain.setBackground(bleuClair);
                rbEspeces.setBackground(bleuClair);
                rbCheques.setBackground(bleuClair);
                rbCB.setBackground(bleuClair);
                ckReponse.setBackground(bleuClair);
                //dimensions des panels
                pintro.setPreferredSize(new Dimension(598, 205));
                pnature.setPreferredSize(new Dimension(100, 110));
                pcelebrations.setPreferredSize(new Dimension(240, 200));
                pmontant.setPreferredSize(new Dimension(140, 110));
                ppaiement.setPreferredSize(new Dimension(300, 50));
                pcontrol.setPreferredSize(new Dimension(598, 30));
                //mise en forme des panels
                ptitre.setBackground(bleuClair);
                pintro.setBackground(bleuClair);
                pnature.setBackground(bleuClair);
                pnature.setBorder(BorderFactory.createTitledBorder("Nature"));
                pcelebrations.setBorder(BorderFactory.createLineBorder(Color.RED, 3, true));
                pmontant.setBackground(bleuClair);
                ppaiement.setBorder(BorderFactory.createTitledBorder("Paiement"));
                ppaiement.setBackground(bleuClair);
                pcontrol.setBackground(bleuClair);
                pim.setBackground(bleuClair);
                //mise en forme des champs
                tfOrdre.setForeground(Color.RED);
                tfOrdre.setFont(new Font("NimbusRoman", Font.BOLD, 18));
                tfOrdre.setFocusable(false);
                tfDateEnregistrement.setFocusable(true);
                try {
                    tfDateEnregistrement = new JFormattedTextField(new MaskFormatter("##/##/####"));
                } catch (@SuppressWarnings("LocalVariableHidesMemberVariable")ParseException e) {
                    JOptionPane messageFormat = new JOptionPane();
                    messageFormat.showMessageDialog(null, "erreur de formatage\n" + e.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);               
                }
                JScrollPane ScrollIntentions = new JScrollPane(tfIntentions);
                //ajout des Ecouteurs
                tfDateEnregistrement.addKeyListener(new ClavierListener());
                tfNbMesses.addKeyListener(new ClavierListener());
                ScrollIntentions.addKeyListener(new ClavierListener());
                ScrollIntentions.addComponentListener(null);
                rbMesse.addFocusListener(new FocusEcouteur());
                rbNeuvaine.addFocusListener(new FocusEcouteur());
                rbTrentain.addFocusListener(new FocusEcouteur());
                tfhonor.addKeyListener(new ClavierListener());
                tfcompl.addKeyListener(new ClavierListener());
                tfhonor.addFocusListener(new FocusEcouteur());
                ckReponse.addKeyListener(new ClavierListener());
                accesDonnees(ligne);
                //taille des champs
                tfOrdre.setPreferredSize(new Dimension(80, 30));
                lbDateEnregistrement.setPreferredSize(new Dimension(500, 30));
                tfDateEnregistrement.setPreferredSize(new Dimension(80, 30));
                tfNbMesses.setPreferredSize(new Dimension(30, 30));
                cbNomFidele.setPreferredSize(new Dimension(550, 30));
                tfhonor.setPreferredSize(new Dimension(80, 30));
                tfcompl.setPreferredSize(new Dimension(80, 30));
                scrollCelebration.setPreferredSize(new Dimension(230, 190));
                //construction des groupes d'options
                bgNature.add(rbMesse);
                bgNature.add(rbNeuvaine);
                bgNature.add(rbTrentain);
                bgPaiement.add(rbEspeces);
                bgPaiement.add(rbCheques);
                bgPaiement.add(rbCB);
                //construction du formulaire
                ptitre.add(lbTitre);
                ptitre.add(tfOrdre);
                pintro.add(lbDateEnregistrement);
                pintro.add(tfDateEnregistrement);
                pintro.add(lbNomFidele);
                pintro.add(cbNomFidele);
                pintro.add(lbNbMesses);
                pintro.add(tfNbMesses);
                pintro.add(lbIntentions);
                pintro.add(ScrollIntentions);
                pnature.add(rbMesse);
                pnature.add(rbNeuvaine);
                pnature.add(rbTrentain);
                pcelebrations.add(scrollCelebration);
                pmontant.add(lbHonoraire);
                pmontant.add(tfhonor);
                pmontant.add(lbComplement);
                pmontant.add(tfcompl);
                ppaiement.add(rbEspeces);
                ppaiement.add(rbCheques);
                ppaiement.add(rbCB);
                pcontrol.add(ckReponse);
                //introduction des panels dans le panel principal
                pim.add(pintro);
                pim.add(pnature);
                pim.add(pcelebrations);
                pim.add(pmontant);
                pim.add(ppaiement);
        
                fenMesses.getContentPane().add(ptitre, BorderLayout.NORTH);
                fenMesses.getContentPane().add(pim, BorderLayout.CENTER);
                fenMesses.getContentPane().add(pcontrol, BorderLayout.SOUTH);
        
            }
            private void accesDonnees(int ligne) {
                intentions = intentionsMessesDAO.charge(ligne);
                IntentionsMesses sousForm = intentionsMessesDAO.sousFormulaire(ligne);
                Object[] intention = intentions.getMessesListe();
                tfOrdre.setText(String.valueOf(intention[0]));
                tfDateEnregistrement.setText(String.valueOf(intention[6]));
                cbNomFidele.setSelectedIndex(listeFidelesClefs.search(intention[1]) - 1);
                tfIntentions.setText(String.valueOf(intention[2]));
                tfNbMesses.setText(String.valueOf(intention[3]));
                    switch ((Integer)intention[7]) {
                        case 1:
                            rbMesse.setSelected(true);
                            break;
                        case 2:
                            rbNeuvaine.setSelected(true);
                            break;
                        case 3:
                            rbTrentain.setSelected(true);
                    }
                tfhonor.setValue(intention[4]);
                tfcompl.setValue(intention[5]);
                    switch ((Integer)intention[8]) {
                        case 1:
                            rbEspeces.setSelected(true);
                            break;
                        case 2:
                            rbCheques.setSelected(true);
                            break;
                        case 3:
                            rbCB.setSelected(true);
                    }
                ckReponse.setSelected(reponse[(Integer)intention[9]]);
                //mise en forme du sous-Formulaire
                nvLstCeleb = new ExtractionValeur<Object[][]>(sousForm.getCelebrationsListe());
                sousFormulaireCeleb(nvLstCeleb);
            }
            @SuppressWarnings("static-access")
            private void sousFormulaireCeleb(ExtractionValeur<Object[][]> nvLstCeleb) {
                Object[][] nouvelleListeCeleb = new Object[nvLstCeleb.Extraction().length][2];
                int i = 0;
                for(Object[] Celeb : nvLstCeleb.Extraction()) {
                    nouvelleListeCeleb[i][0] = Celeb[0];
                    nouvelleListeCeleb[i][1] = cbMoines.getItemAt(listeMoinesClefs.search(Celeb[1]) - 1);
                    i++;
                }
               
                ModelePersonnalis mpCelebrations = new ModelePersonnalis(nouvelleListeCeleb, titreCelebrations);
                jtListeCelebrations = new JTable(mpCelebrations);
                scrollCelebration = new JScrollPane(jtListeCelebrations);
                //mise en forme du champs date et de la liste déroulante Moines
                DefaultTableCellRenderer dcr = new DefaultTableCellRenderer();
                try {
                    JFormattedTextField dateCeleb = new JFormattedTextField(new MaskFormatter("##/##/####"));
                    jtListeCelebrations.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(dateCeleb));
                } catch (ParseException e) {
                    JOptionPane messageFormat = new JOptionPane();
                    messageFormat.showMessageDialog(null, "erreur de formatage\n" + e.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);               
                }
                jtListeCelebrations.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(cbMoines));
                jtListeCelebrations.getColumnModel().getColumn(0).setCellRenderer(dcr);
                jtListeCelebrations.getColumnModel().getColumn(1).setCellRenderer(dcr);
                //largeur des colonnes du sous-formulaire
                jtListeCelebrations.getColumnModel().getColumn(0).setPreferredWidth(90);
                jtListeCelebrations.getColumnModel().getColumn(1).setPreferredWidth(130);
                    for(Object[] celeb : nouvelleListeCeleb) {
                        System.out.println("date : " + celeb[0] + "\tprêtre : " + celeb[1]);
                    }
                Thread aff = new Thread(new Affichage());
                aff.start();
            }
            class ClavierListener implements KeyListener {
                public void keyReleased(KeyEvent touche) {
                    if((touche.getKeyCode() == KeyEvent.VK_F2) && (ligne != 0)) {
        /*                mpMesses.setValueAt(mpMesses.getValueAt(evtmeM.Extraction().getFirstRow()-1,
                                evtmeM.Extraction().getColumn()),
                                evtmeM.Extraction().getFirstRow(),
                                evtmeM.Extraction().getColumn());
        */            }
                    if(touche.getKeyCode() == KeyEvent.VK_F12) {
                        fenMesses.dispose();
                    }
                    if(touche.getKeyCode() == KeyEvent.VK_PAGE_DOWN) {
                        if(ligne < derniereLigne) {
                            accesDonnees(++ligne);
                        } else {
                            tfOrdre.setText(String.valueOf(++ligne));
                            tfDateEnregistrement.setText(dateEnregistrement.TempsAbrege());
                            cbNomFidele.setSelectedIndex(0);
                            tfNbMesses.setText(String.valueOf(1));
                            tfIntentions.setText("");
                            rbMesse.setSelected(true);
                            tfhonor.setValue(0);
                            tfcompl.setValue(0);
                            rbCheques.setSelected(true);
                            ckReponse.setSelected(true);
                        }
                    }
                    if(touche.getKeyCode() == KeyEvent.VK_PAGE_UP) {
                        if(ligne > 1) {
                            accesDonnees(--ligne);
                        }
                    }
                    if(touche.getKeyCode() == KeyEvent.VK_END) {
                        if(touche.isControlDown()) {
                            ligne = derniereLigne;
                            accesDonnees(ligne);
                        } else {
        //                    while(!ckReponse.hasFocus()) {
        //                        touche.setModifiers(KeyEvent.CTRL_DOWN_MASK);
        //                        touche.setKeyCode(KeyEvent.VK_TAB);
        //                    }
                        }
                    }
                }
                /**
                 * je dois rajouter les deux méthodes suivantes
                 * pour que Java ne me dise pas que la classe n'est pas abstraite
                 * @param touche
                 */
                public void keyPressed(KeyEvent touche) { }
                public void keyTyped(KeyEvent touche) { }
            }
            class FocusEcouteur implements FocusListener {
                @SuppressWarnings("static-access")
                public void focusGained(FocusEvent fe) {
                }
                @SuppressWarnings("static-access")
                public void focusLost(FocusEvent fe) {
                    if(rbMesse.isSelected())
                        tfhonor.setValue(Double.valueOf(tfNbMesses.getText()) * ms.getHonoraire());
                    if(rbNeuvaine.isSelected())
                        tfhonor.setValue(Double.valueOf(tfNbMesses.getText()) * nv.getHonoraire());
                    if(rbTrentain.isSelected())
                        tfhonor.setValue(Double.valueOf(tfNbMesses.getText()) * tr.getHonoraire());
                    if(tfcompl.hasFocus()) {
                        JOptionPane valeurComplement = new JOptionPane();
                        tfcompl.setValue(Double.valueOf(valeurComplement.showInputDialog(null, "Entrez la valeur du complément", "Complément sur honoraire", JOptionPane.QUESTION_MESSAGE)));
                    }
                }
            }
            class Affichage implements Runnable {
                public Affichage() {
                   
                }
                public void run() {
                    pcelebrations.add(scrollCelebration);
                    pim.add(pcelebrations);
                    fenMesses.getContentPane().add(pim, BorderLayout.CENTER);
                   
                }
            }
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          13 juillet 2016 à 16:39:32

          T'as essayé de faire un repaint sur ta fenetre ?
          • Partager sur Facebook
          • Partager sur Twitter
            15 juillet 2016 à 8:31:00

            Bonjour,

            J'ai un peu corrigé le code en supprimant la classe Runnable ;
            j'ai utilisé la méthode repaint() selon ton conseil et l'ai appliquée sur le scroll, le panel et la fenêtre ! (voir lignes 277 à 282) mais aucun changement : le sous-formulaire n'est toujours pas modifié.
            J'avais comme l'impression que le sous-formulaire devait être mis à jour par une sous-classe ; c'est pourquoi j'avais fait la sous-classe Runnable, mais là aussi, il n'y avait aucun changement dans le comportement du sous-formulaire.
            J'ai encore l'impression d'être au seuil de la solution sans pouvoir l'atteindre.
            Voici donc le code modifié :

            import java.awt.BorderLayout;
            import java.awt.Color;
            import java.awt.Dimension;
            import java.awt.Font;
            import java.awt.event.FocusEvent;
            import java.awt.event.FocusListener;
            import java.awt.event.KeyEvent;
            import java.awt.event.KeyListener;
            
            import java.text.NumberFormat;
            import java.text.ParseException;
            import java.util.Stack;
            
            import javax.swing.BorderFactory;
            import javax.swing.JRadioButton;
            import javax.swing.JCheckBox;
            import javax.swing.ButtonGroup;
            import javax.swing.DefaultCellEditor;
            import javax.swing.JComboBox;
            import javax.swing.JTextField;
            import javax.swing.JTextArea;
            import javax.swing.JScrollPane;
            import javax.swing.JFormattedTextField;
            import javax.swing.JLabel;
            import javax.swing.JPanel;
            import javax.swing.JFrame;
            import javax.swing.JOptionPane;
            import javax.swing.JTable;
            import javax.swing.event.TableModelEvent;
            import javax.swing.event.TableModelListener;
            import javax.swing.table.DefaultTableCellRenderer;
            import javax.swing.table.TableModel;
            import javax.swing.text.MaskFormatter;
            
            /**
             * formulaire principal qui rassemble toutes les données concernant les messes
             */
            public class IntentionsMessesFormulaire {
                private final JFrame fenMesses = new JFrame();
                private final boolean reponse[] = {false, true};
                private final String[] titreCelebrations = {"le", "par"};
                private final JPanel pim = new JPanel(),
                            pintro = new JPanel(), ptitre = new JPanel(),
                            pcelebrations = new JPanel(), pnature = new JPanel(),
                            pmontant = new JPanel(), ppaiement = new JPanel(),
                            pcontrol = new JPanel();
                private JTable jtListeCelebrations;
                private final JTextField tfNbMesses = new JTextField(),
                                tfOrdre = new JTextField();
                private final JTextArea tfIntentions = new JTextArea(4, 50);
                private JFormattedTextField tfDateEnregistrement = new JFormattedTextField();
                private final JFormattedTextField tfhonor = new JFormattedTextField(NumberFormat.getCurrencyInstance()),
                                tfcompl = new JFormattedTextField(NumberFormat.getCurrencyInstance());
                private final JLabel lbDateEnregistrement = new JLabel("                                                            Date d'enregistrement"),
                                lbTitre = new JLabel("Intentions de Messes N° :"),
                                lbNomFidele = new JLabel("Nom du Fidèle"),
                                lbNbMesses = new JLabel("Nombre de Messes"),
                                lbIntentions = new JLabel("Intentions de Messes"),
                                lbHonoraire = new JLabel("Honoraires"),
                                lbComplement = new JLabel("Complément");
                private JComboBox cbNomFidele, cbMoines;
                private final JRadioButton rbMesse = new JRadioButton("Messe     "),
                                    rbNeuvaine = new JRadioButton("Neuvaine"),
                                    rbTrentain = new JRadioButton("Trentain "),
                                    rbEspeces = new JRadioButton("Espèces"),
                                    rbCheques = new JRadioButton("Chèques"),
                                    rbCB = new JRadioButton("CB");
                private final ButtonGroup bgNature = new ButtonGroup(),
                                    bgPaiement = new ButtonGroup();
                private final JCheckBox ckReponse = new JCheckBox("a-t-on envoyé une réponse ?");
                private JScrollPane scrollCelebration;
                private final Color bleuClair = new Color(135, 255, 245);
                private final Temps dateEnregistrement = new Temps(),
                                dateCelebration = new Temps();
                private Nature ms = Nature.MS,
                        nv = Nature.NV,
                        tr = Nature.TR;
                private ExtractionValeur<TableModelEvent> evtmeM, evtmeC;
                private ExtractionValeur<Object[]> nvIntention;
                private ExtractionValeur<Object[][]> nvLstCeleb;
                private final DAO<IntentionsMesses> intentionsMessesDAO = new IntentionsMessesDAO(Connect.getInstance());
                //établissement des listes déroulantes
                private final IntentionsMesses listesDeroulantes = intentionsMessesDAO.listeDeroulante();
                private final Stack listeFideles = listesDeroulantes.getListeFideles();
                private final Stack listeFidelesClefs = listesDeroulantes.getListeFidelesClef();
                private final Stack listeMoines = listesDeroulantes.getListeMoines();
                private final Stack listeMoinesClefs = listesDeroulantes.getListeMoinesClef();
                //nombre de lignes dans la Base
                private IntentionsMesses intentions = intentionsMessesDAO.charge(0);
                private int derniereLigne = intentions.getMessesNombre();
                private int ligne = intentions.getMessesNombre();
               
                @SuppressWarnings("static-access")
                public IntentionsMessesFormulaire() throws ClassNotFoundException,
                        InstantiationException,
                        IllegalAccessException {
                    //format de la fenêtre qui reçoit les données
                    fenMesses.setTitle("Intentions des Messes");
                    fenMesses.setBounds(300, 150, 600, 550);
                    fenMesses.setResizable(false);
                    fenMesses.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    fenMesses.setVisible(true);   
                    //on utilise JTextPane pour la mise en forme de la liste déroulante
                    cbNomFidele = new JComboBox(listeFideles);
                    cbNomFidele.setRenderer(new TextPaneRenderer(10));
                    cbNomFidele.setMaximumRowCount(25);
                    cbMoines = new JComboBox(listeMoines);
                    cbMoines.setMaximumRowCount(13);
                    //mise en forme des boutons radios
                    rbMesse.setBackground(bleuClair);
                    rbNeuvaine.setBackground(bleuClair);
                    rbTrentain.setBackground(bleuClair);
                    rbEspeces.setBackground(bleuClair);
                    rbCheques.setBackground(bleuClair);
                    rbCB.setBackground(bleuClair);
                    ckReponse.setBackground(bleuClair);
                    //dimensions des panels
                    pintro.setPreferredSize(new Dimension(598, 205));
                    pnature.setPreferredSize(new Dimension(100, 110));
                    pcelebrations.setPreferredSize(new Dimension(240, 200));
                    pmontant.setPreferredSize(new Dimension(140, 110));
                    ppaiement.setPreferredSize(new Dimension(300, 50));
                    pcontrol.setPreferredSize(new Dimension(598, 30));
                    //mise en forme des panels
                    ptitre.setBackground(bleuClair);
                    pintro.setBackground(bleuClair);
                    pnature.setBackground(bleuClair);
                    pnature.setBorder(BorderFactory.createTitledBorder("Nature"));
                    pcelebrations.setBorder(BorderFactory.createLineBorder(Color.RED, 3, true));
                    pmontant.setBackground(bleuClair);
                    ppaiement.setBorder(BorderFactory.createTitledBorder("Paiement"));
                    ppaiement.setBackground(bleuClair);
                    pcontrol.setBackground(bleuClair);
                    pim.setBackground(bleuClair);
                    //mise en forme des champs
                    tfOrdre.setForeground(Color.RED);
                    tfOrdre.setFont(new Font("NimbusRoman", Font.BOLD, 18));
                    tfOrdre.setFocusable(false);
                    tfDateEnregistrement.setFocusable(true);
                    try {
                        tfDateEnregistrement = new JFormattedTextField(new MaskFormatter("##/##/####"));
                    } catch (@SuppressWarnings("LocalVariableHidesMemberVariable")ParseException e) {
                        JOptionPane messageFormat = new JOptionPane();
                        messageFormat.showMessageDialog(null, "erreur de formatage\n" + e.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);               
                    }
                    JScrollPane ScrollIntentions = new JScrollPane(tfIntentions);
                    //ajout des Ecouteurs
                    tfDateEnregistrement.addKeyListener(new ClavierListener());
                    tfNbMesses.addKeyListener(new ClavierListener());
                    ScrollIntentions.addKeyListener(new ClavierListener());
                    ScrollIntentions.addComponentListener(null);
                    rbMesse.addFocusListener(new FocusEcouteur());
                    rbNeuvaine.addFocusListener(new FocusEcouteur());
                    rbTrentain.addFocusListener(new FocusEcouteur());
                    tfhonor.addKeyListener(new ClavierListener());
                    tfcompl.addKeyListener(new ClavierListener());
                    tfhonor.addFocusListener(new FocusEcouteur());
                    ckReponse.addKeyListener(new ClavierListener());
                    accesDonnees(ligne);
                    //taille des champs
                    tfOrdre.setPreferredSize(new Dimension(80, 30));
                    lbDateEnregistrement.setPreferredSize(new Dimension(500, 30));
                    tfDateEnregistrement.setPreferredSize(new Dimension(80, 30));
                    tfNbMesses.setPreferredSize(new Dimension(30, 30));
                    cbNomFidele.setPreferredSize(new Dimension(550, 30));
                    tfhonor.setPreferredSize(new Dimension(80, 30));
                    tfcompl.setPreferredSize(new Dimension(80, 30));
                    scrollCelebration.setPreferredSize(new Dimension(230, 190));
                    //construction des groupes d'options
                    bgNature.add(rbMesse);
                    bgNature.add(rbNeuvaine);
                    bgNature.add(rbTrentain);
                    bgPaiement.add(rbEspeces);
                    bgPaiement.add(rbCheques);
                    bgPaiement.add(rbCB);
                    //construction du formulaire
                    ptitre.add(lbTitre);
                    ptitre.add(tfOrdre);
                    pintro.add(lbDateEnregistrement);
                    pintro.add(tfDateEnregistrement);
                    pintro.add(lbNomFidele);
                    pintro.add(cbNomFidele);
                    pintro.add(lbNbMesses);
                    pintro.add(tfNbMesses);
                    pintro.add(lbIntentions);
                    pintro.add(ScrollIntentions);
                    pnature.add(rbMesse);
                    pnature.add(rbNeuvaine);
                    pnature.add(rbTrentain);
                    pcelebrations.add(scrollCelebration);
                    pmontant.add(lbHonoraire);
                    pmontant.add(tfhonor);
                    pmontant.add(lbComplement);
                    pmontant.add(tfcompl);
                    ppaiement.add(rbEspeces);
                    ppaiement.add(rbCheques);
                    ppaiement.add(rbCB);
                    pcontrol.add(ckReponse);
                    //introduction des panels dans le panel principal
                    pim.add(pintro);
                    pim.add(pnature);
                    pim.add(pcelebrations);
                    pim.add(pmontant);
                    pim.add(ppaiement);
            
                    fenMesses.getContentPane().add(ptitre, BorderLayout.NORTH);
                    fenMesses.getContentPane().add(pim, BorderLayout.CENTER);
                    fenMesses.getContentPane().add(pcontrol, BorderLayout.SOUTH);
            
                }
                private void accesDonnees(int ligne) {
                    intentions = intentionsMessesDAO.charge(ligne);
                    IntentionsMesses sousForm = intentionsMessesDAO.sousFormulaire(ligne);
                    Object[] intention = intentions.getMessesListe();
                    tfOrdre.setText(String.valueOf(intention[0]));
                    tfDateEnregistrement.setText(String.valueOf(intention[6]));
                    cbNomFidele.setSelectedIndex(listeFidelesClefs.search(intention[1]) - 1);
                    tfIntentions.setText(String.valueOf(intention[2]));
                    tfNbMesses.setText(String.valueOf(intention[3]));
                        switch ((Integer)intention[7]) {
                            case 1:
                                rbMesse.setSelected(true);
                                break;
                            case 2:
                                rbNeuvaine.setSelected(true);
                                break;
                            case 3:
                                rbTrentain.setSelected(true);
                        }
                    tfhonor.setValue(intention[4]);
                    tfcompl.setValue(intention[5]);
                        switch ((Integer)intention[8]) {
                            case 1:
                                rbEspeces.setSelected(true);
                                break;
                            case 2:
                                rbCheques.setSelected(true);
                                break;
                            case 3:
                                rbCB.setSelected(true);
                        }
                    ckReponse.setSelected(reponse[(Integer)intention[9]]);
                    //mise en forme du sous-Formulaire
                    nvLstCeleb = new ExtractionValeur<Object[][]>(sousForm.getCelebrationsListe());
                    sousFormulaireCeleb(nvLstCeleb);
                }
                @SuppressWarnings("static-access")
                private void sousFormulaireCeleb(ExtractionValeur<Object[][]> nvLstCeleb) {
                    Object[][] nouvelleListeCeleb = new Object[nvLstCeleb.Extraction().length][2];
                    int i = 0;
                    for(Object[] Celeb : nvLstCeleb.Extraction()) {
                        nouvelleListeCeleb[i][0] = Celeb[0];
                        nouvelleListeCeleb[i][1] = cbMoines.getItemAt(listeMoinesClefs.search(Celeb[1]) - 1);
                        i++;
                    }
                    ModelePersonnalis mpCelebrations = new ModelePersonnalis(nouvelleListeCeleb, titreCelebrations);
                    jtListeCelebrations = new JTable(mpCelebrations);
                    scrollCelebration = new JScrollPane(jtListeCelebrations);
                    //mise en forme du champs date et de la liste déroulante Moines
                    DefaultTableCellRenderer dcr = new DefaultTableCellRenderer();
                    try {
                        JFormattedTextField dateCeleb = new JFormattedTextField(new MaskFormatter("##/##/####"));
                        jtListeCelebrations.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(dateCeleb));
                    } catch (ParseException e) {
                        JOptionPane messageFormat = new JOptionPane();
                        messageFormat.showMessageDialog(null, "erreur de formatage\n" + e.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);               
                    }
                    jtListeCelebrations.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(cbMoines));
                    jtListeCelebrations.getColumnModel().getColumn(0).setCellRenderer(dcr);
                    jtListeCelebrations.getColumnModel().getColumn(1).setCellRenderer(dcr);
                    //largeur des colonnes du sous-formulaire
                    jtListeCelebrations.getColumnModel().getColumn(0).setPreferredWidth(90);
                    jtListeCelebrations.getColumnModel().getColumn(1).setPreferredWidth(130);
                        for(Object[] celeb : nouvelleListeCeleb) {
                            System.out.println("date : " + celeb[0] + "\tprêtre : " + celeb[1]);
                        }
                    pcelebrations.add(scrollCelebration);
                    pcelebrations.repaint();
                    pim.add(pcelebrations);
                    pim.repaint();
                    fenMesses.getContentPane().add(pim, BorderLayout.CENTER);
                    fenMesses.repaint();
                }
                class ClavierListener implements KeyListener {
                    public void keyReleased(KeyEvent touche) {
                        if((touche.getKeyCode() == KeyEvent.VK_F2) && (ligne != 0)) {
            /*                mpMesses.setValueAt(mpMesses.getValueAt(evtmeM.Extraction().getFirstRow()-1,
                                    evtmeM.Extraction().getColumn()),
                                    evtmeM.Extraction().getFirstRow(),
                                    evtmeM.Extraction().getColumn());
            */            }
                        if(touche.getKeyCode() == KeyEvent.VK_F12) {
                            fenMesses.dispose();
                        }
                        if(touche.getKeyCode() == KeyEvent.VK_PAGE_DOWN) {
                            if(ligne < derniereLigne) {
                                accesDonnees(++ligne);
                            } else {
                                tfOrdre.setText(String.valueOf(++ligne));
                                tfDateEnregistrement.setText(dateEnregistrement.TempsAbrege());
                                cbNomFidele.setSelectedIndex(0);
                                tfNbMesses.setText(String.valueOf(1));
                                tfIntentions.setText("");
                                rbMesse.setSelected(true);
                                tfhonor.setValue(0);
                                tfcompl.setValue(0);
                                rbCheques.setSelected(true);
                                ckReponse.setSelected(true);
                            }
                        }
                        if(touche.getKeyCode() == KeyEvent.VK_PAGE_UP) {
                            if(ligne > 1) {
                                accesDonnees(--ligne);
                            }
                        }
                        if(touche.getKeyCode() == KeyEvent.VK_END) {
                            if(touche.isControlDown()) {
                                ligne = derniereLigne;
                                accesDonnees(ligne);
                            } else {
            //                    while(!ckReponse.hasFocus()) {
            //                        touche.setModifiers(KeyEvent.CTRL_DOWN_MASK);
            //                        touche.setKeyCode(KeyEvent.VK_TAB);
            //                    }
                            }
                        }
                    }
                    /**
                     * je dois rajouter les deux méthodes suivantes
                     * pour que Java ne me dise pas que la classe n'est pas abstraite
                     * @param touche
                     */
                    public void keyPressed(KeyEvent touche) { }
                    public void keyTyped(KeyEvent touche) { }
                }
                class FocusEcouteur implements FocusListener {
                    @SuppressWarnings("static-access")
                    public void focusGained(FocusEvent fe) {
                    }
                    @SuppressWarnings("static-access")
                    public void focusLost(FocusEvent fe) {
                        if(rbMesse.isSelected())
                            tfhonor.setValue(Double.valueOf(tfNbMesses.getText()) * ms.getHonoraire());
                        if(rbNeuvaine.isSelected())
                            tfhonor.setValue(Double.valueOf(tfNbMesses.getText()) * nv.getHonoraire());
                        if(rbTrentain.isSelected())
                            tfhonor.setValue(Double.valueOf(tfNbMesses.getText()) * tr.getHonoraire());
                        if(tfcompl.hasFocus()) {
                            JOptionPane valeurComplement = new JOptionPane();
                            tfcompl.setValue(Double.valueOf(valeurComplement.showInputDialog(null, "Entrez la valeur du complément", "Complément sur honoraire", JOptionPane.QUESTION_MESSAGE)));
                        }
                    }
                }
            }
            

            Merci pour l'aide que vous apportez,

            fenlabise

            • Partager sur Facebook
            • Partager sur Twitter
              19 octobre 2016 à 17:45:17

              Bonjour,

              Comme je l'ai dit plus haut, j'arrive à afficher toutes les données, celles du formulaire et du sous-formulaire ; mais ensuite quand je me déplace dans les lignes de la Base en appuyant sur les flèches de direction, seules des données du formulaire se modifient, et non les données du sous-formulaire.
              J'ai utilisé la méthode repaint(), mais ça ne change rien ; j'ai retourné le problème dans tous les sens, le sous-formulaire reste figé avec les données qu'il a affiché en premier ! Je me suis dit que pour que change le sous-formulaire, il faut le recréer à chaque changement de ligne du formulaire ; c'est ce que j'ai essayé de faire dans le code ci-dessous : mais aucun succès, et en même temps je me dit que la solution ne doit pas être difficile mais ça fait peut-être 3 mois que je patine sur ce problème. Merci à vous si vous avez une idée.

              import java.awt.BorderLayout;
              import java.awt.Color;
              import java.awt.Dimension;
              import java.awt.Font;
              import java.awt.event.FocusEvent;
              import java.awt.event.FocusListener;
              import java.awt.event.KeyEvent;
              import java.awt.event.KeyListener;
              
              import java.text.NumberFormat;
              import java.text.ParseException;
              import java.util.Stack;
              
              import javax.swing.BorderFactory;
              import javax.swing.JRadioButton;
              import javax.swing.JCheckBox;
              import javax.swing.ButtonGroup;
              import javax.swing.DefaultCellEditor;
              import javax.swing.JComboBox;
              import javax.swing.JTextField;
              import javax.swing.JTextArea;
              import javax.swing.JScrollPane;
              import javax.swing.JFormattedTextField;
              import javax.swing.JLabel;
              import javax.swing.JPanel;
              import javax.swing.JFrame;
              import javax.swing.JOptionPane;
              import javax.swing.JTable;
              import javax.swing.event.TableModelEvent;
              import javax.swing.event.TableModelListener;
              import javax.swing.table.DefaultTableCellRenderer;
              import javax.swing.table.TableModel;
              import javax.swing.text.MaskFormatter;
              
              /**
               * formulaire principal qui rassemble toutes les données concernant les messes
               */
              public class IntentionsMessesFormulaire {
                  private final JFrame fenMesses = new JFrame();
                  private final boolean reponse[] = {false, true};
                  private final JPanel pim = new JPanel(),
                              pintro = new JPanel(), ptitre = new JPanel(),
                              pcelebrations = new JPanel(), pnature = new JPanel(),
                              pmontant = new JPanel(), ppaiement = new JPanel(),
                              pcontrol = new JPanel();
                  private final JTextField tfNbMesses = new JTextField(),
                                  tfOrdre = new JTextField();
                  private final JTextArea tfIntentions = new JTextArea(4, 50);
                  private JFormattedTextField tfDateEnregistrement = new JFormattedTextField();
                  private final JFormattedTextField tfhonor = new JFormattedTextField(NumberFormat.getCurrencyInstance()),
                                  tfcompl = new JFormattedTextField(NumberFormat.getCurrencyInstance());
                  private final JLabel lbDateEnregistrement = new JLabel("                                                            Date d'enregistrement"),
                                  lbTitre = new JLabel("Intentions de Messes N° :"),
                                  lbNomFidele = new JLabel("Nom du Fidèle"),
                                  lbNbMesses = new JLabel("Nombre de Messes"),
                                  lbIntentions = new JLabel("Intentions de Messes"),
                                  lbHonoraire = new JLabel("Honoraires"),
                                  lbComplement = new JLabel("Complément");
                  private final JComboBox cbNomFidele, cbMoines;
                  private final JRadioButton rbMesse = new JRadioButton("Messe     "),
                                      rbNeuvaine = new JRadioButton("Neuvaine"),
                                      rbTrentain = new JRadioButton("Trentain "),
                                      rbEspeces = new JRadioButton("Espèces"),
                                      rbCheques = new JRadioButton("Chèques"),
                                      rbCB = new JRadioButton("CB");
                  private final ButtonGroup bgNature = new ButtonGroup(),
                                      bgPaiement = new ButtonGroup();
                  private final JCheckBox ckReponse = new JCheckBox("a-t-on envoyé une réponse ?");
                  private final Color bleuClair = new Color(135, 255, 245);
                  private final Temps dateEnregistrement = new Temps(),
                                  dateCelebration = new Temps();
                  private ExtractionValeur<TableModelEvent> evtmeM, evtmeC;
                  private final DAO<IntentionsMesses> intentionsMessesDAO = new IntentionsMessesDAO(Connect.getInstance());
                  //établissement des listes déroulantes
                  private IntentionsMesses intentions;
                  private final IntentionsMesses listesDeroulantes;
                  //nombre de lignes dans la Base
                  private int derniereLigne, ligne;
                  
                  @SuppressWarnings("static-access")
                  public IntentionsMessesFormulaire() throws ClassNotFoundException,
                          InstantiationException,
                          IllegalAccessException {
                      //format de la fenêtre qui reçoit les données
                      fenMesses.setTitle("Intentions des Messes");
                      fenMesses.setBounds(300, 150, 600, 550);
                      fenMesses.setResizable(false);
                      fenMesses.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                      //on utilise JTextPane pour la mise en forme de la liste déroulante
                      listesDeroulantes = intentionsMessesDAO.listeDeroulante();
                      cbNomFidele = new JComboBox(listesDeroulantes.getListeFideles());
                      cbNomFidele.setRenderer(new TextPaneRenderer(10));
                      cbNomFidele.setMaximumRowCount(25);
                      cbMoines = new JComboBox(listesDeroulantes.getListeMoines());
                      cbMoines.setMaximumRowCount(13);
                      //détermination du nombre de lignes pour que le formulaire affiche la dernière ligne
                      ligne = intentionsMessesDAO.charge(0).getMessesNombre();
                      derniereLigne = intentionsMessesDAO.charge(0).getMessesNombre();
                      accesDonnees(ligne);
                      formationFormulaire();
                      fenMesses.setVisible(true);    
                  }
                  @SuppressWarnings("static-access")
                  private void formationFormulaire() {
                      //mise en forme des boutons radios
                      rbMesse.setBackground(bleuClair);
                      rbNeuvaine.setBackground(bleuClair);
                      rbTrentain.setBackground(bleuClair);
                      rbEspeces.setBackground(bleuClair);
                      rbCheques.setBackground(bleuClair);
                      rbCB.setBackground(bleuClair);
                      ckReponse.setBackground(bleuClair);
                      //dimensions des panels
                      pintro.setPreferredSize(new Dimension(598, 205));
                      pnature.setPreferredSize(new Dimension(100, 110));
                      pcelebrations.setPreferredSize(new Dimension(240, 200));
                      pmontant.setPreferredSize(new Dimension(140, 110));
                      ppaiement.setPreferredSize(new Dimension(300, 50));
                      pcontrol.setPreferredSize(new Dimension(598, 30));
                      //mise en forme des panels
                      ptitre.setBackground(bleuClair);
                      pintro.setBackground(bleuClair);
                      pnature.setBackground(bleuClair);
                      pnature.setBorder(BorderFactory.createTitledBorder("Nature"));
                      pcelebrations.setBorder(BorderFactory.createLineBorder(Color.RED, 3, false));
                      pmontant.setBackground(bleuClair);
                      ppaiement.setBorder(BorderFactory.createTitledBorder("Paiement"));
                      ppaiement.setBackground(bleuClair);
                      pcontrol.setBackground(bleuClair);
                      pim.setBackground(bleuClair);
                      //mise en forme des champs
                      tfOrdre.setForeground(Color.RED);
                      tfOrdre.setFont(new Font("NimbusRoman", Font.BOLD, 18));
                      tfOrdre.setFocusable(false);
                      tfDateEnregistrement.setFocusable(true);
                      try {
                          tfDateEnregistrement = new JFormattedTextField(new MaskFormatter("##/##/####"));
                      } catch (@SuppressWarnings("LocalVariableHidesMemberVariable")ParseException e) {
                          JOptionPane messageFormat = new JOptionPane();
                          messageFormat.showMessageDialog(null, "erreur de formatage\n" + e.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);				
                      }
                      JScrollPane ScrollIntentions = new JScrollPane(tfIntentions);
                      //ajout des Ecouteurs
                      tfDateEnregistrement.addKeyListener(new ClavierListener());
                      tfNbMesses.addKeyListener(new ClavierListener());
                      ScrollIntentions.addKeyListener(new ClavierListener());
                      ScrollIntentions.addComponentListener(null);
                      rbMesse.addFocusListener(new FocusEcouteur());
                      rbNeuvaine.addFocusListener(new FocusEcouteur());
                      rbTrentain.addFocusListener(new FocusEcouteur());
                      tfhonor.addKeyListener(new ClavierListener());
                      tfcompl.addKeyListener(new ClavierListener());
                      tfhonor.addFocusListener(new FocusEcouteur());
                      ckReponse.addKeyListener(new ClavierListener());
                      //taille des champs
                      tfOrdre.setPreferredSize(new Dimension(80, 30));
                      lbDateEnregistrement.setPreferredSize(new Dimension(500, 30));
                      tfDateEnregistrement.setPreferredSize(new Dimension(80, 30));
                      tfNbMesses.setPreferredSize(new Dimension(30, 30));
                      cbNomFidele.setPreferredSize(new Dimension(550, 30));
                      tfhonor.setPreferredSize(new Dimension(80, 30));
                      tfcompl.setPreferredSize(new Dimension(80, 30));
                      //construction des groupes d'options
                      bgNature.add(rbMesse);
                      bgNature.add(rbNeuvaine);
                      bgNature.add(rbTrentain);
                      bgPaiement.add(rbEspeces);
                      bgPaiement.add(rbCheques);
                      bgPaiement.add(rbCB);
                      //construction du formulaire
                      ptitre.add(lbTitre);
                      ptitre.add(tfOrdre);
                      pintro.add(lbDateEnregistrement);
                      pintro.add(tfDateEnregistrement);
                      pintro.add(lbNomFidele);
                      pintro.add(cbNomFidele);
                      pintro.add(lbNbMesses);
                      pintro.add(tfNbMesses);
                      pintro.add(lbIntentions);
                      pintro.add(ScrollIntentions);
                      pnature.add(rbMesse);
                      pnature.add(rbNeuvaine);
                      pnature.add(rbTrentain);
                      pmontant.add(lbHonoraire);
                      pmontant.add(tfhonor);
                      pmontant.add(lbComplement);
                      pmontant.add(tfcompl);
                      ppaiement.add(rbEspeces);
                      ppaiement.add(rbCheques);
                      ppaiement.add(rbCB);
                      pcontrol.add(ckReponse);
                      //introduction des panels dans le panel principal
                      pim.add(pintro);
                      pim.add(pnature);
                      pim.add(pcelebrations);
                      pim.add(pmontant);
                      pim.add(ppaiement);
              
                      fenMesses.getContentPane().add(ptitre, BorderLayout.NORTH);
                      fenMesses.getContentPane().add(pim, BorderLayout.CENTER);
                      fenMesses.getContentPane().add(pcontrol, BorderLayout.SOUTH);
                  }
                  /**
                   * pour chaque ligne, cette méthode remplit les champs du formulaire avec les données correspondant à la ligne demandée (dans la Base)
                   * @param ligne 
                   */
                  private void accesDonnees(int ligne) {
                      intentions = intentionsMessesDAO.charge(ligne);
                      Object[] intention = intentions.getMessesListe();
                      tfOrdre.setText(String.valueOf(intention[0]));
                      tfDateEnregistrement.setText(String.valueOf(intention[6]));
                      cbNomFidele.setSelectedIndex(listesDeroulantes.getListeFidelesClef().search(intention[1]) - 1);
                      tfIntentions.setText(String.valueOf(intention[2]));
                      tfNbMesses.setText(String.valueOf(intention[3]));
                          switch ((Integer)intention[7]) {
                              case 1:
                                  rbMesse.setSelected(true);
                                  break;
                              case 2:
                                  rbNeuvaine.setSelected(true);
                                  break;
                              case 3:
                                  rbTrentain.setSelected(true);
                          }
                      tfhonor.setValue(intention[4]);
                      tfcompl.setValue(intention[5]);
                          switch ((Integer)intention[8]) {
                              case 1:
                                  rbEspeces.setSelected(true);
                                  break;
                              case 2:
                                  rbCheques.setSelected(true);
                                  break;
                              case 3:
                                  rbCB.setSelected(true);
                          }
                      ckReponse.setSelected(reponse[(Integer)intention[9]]);
                      sousFormulaire(ligne);
                  }
                  /**
                   * mise en forme du sous-Formulaire
                   * @param ligne 
                   */
                  @SuppressWarnings("static-access")
                  private void sousFormulaire(int ligne) {
                      String[] titreCelebrations = {"le", "par"};
                      IntentionsMesses sousForm = intentionsMessesDAO.sousFormulaire(ligne);
                      Object[][] sf = sousForm.getCelebrationsListe();
                      Object[][] nouvelleListeCeleb = new Object[sf.length][2];
                      int i = 0;
                      for(Object[] Celeb : sf) {
                          nouvelleListeCeleb[i][0] = Celeb[0];
                          nouvelleListeCeleb[i][1] = cbMoines.getItemAt(listesDeroulantes.getListeMoinesClef().search(Celeb[1]) - 1);
                          i++;
                      }
                      for(Object[] celeb : nouvelleListeCeleb) {
                              System.out.println("date : " + celeb[0] + "\tprêtre : " + celeb[1]);
                          }
                      ModelePersonnalis mpCelebrations = new ModelePersonnalis(nouvelleListeCeleb, titreCelebrations);
                      JTable jtListeCelebrations = new JTable(mpCelebrations);
                      JScrollPane scrollCelebration = new JScrollPane(jtListeCelebrations);
                      //mise en forme du champs date et de la liste déroulante Moines
                      DefaultTableCellRenderer dcr = new DefaultTableCellRenderer();
                      try {
                          JFormattedTextField dateCeleb = new JFormattedTextField(new MaskFormatter("##/##/####"));
                          jtListeCelebrations.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(dateCeleb));
                      } catch (ParseException e) {
                          JOptionPane messageFormat = new JOptionPane();
                          messageFormat.showMessageDialog(null, "erreur de formatage\n" + e.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);				
                      }
                      jtListeCelebrations.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(cbMoines));
                      jtListeCelebrations.getColumnModel().getColumn(0).setCellRenderer(dcr);
                      jtListeCelebrations.getColumnModel().getColumn(1).setCellRenderer(dcr);
                      //largeur des colonnes du sous-formulaire
                      jtListeCelebrations.getColumnModel().getColumn(0).setPreferredWidth(90);
                      jtListeCelebrations.getColumnModel().getColumn(1).setPreferredWidth(130);
                      System.out.println("Je suis dans IntentionsMessesSousFormulaire");
                      for(Object[] celeb : nouvelleListeCeleb) {
                              System.out.println("date : " + celeb[0] + "\tprêtre : " + celeb[1]);
                      }
                      scrollCelebration.setPreferredSize(new Dimension(230, 190));
                      pcelebrations.add(scrollCelebration);
                      pcelebrations.repaint();
                  }
                  class ClavierListener implements KeyListener {
                      public void keyReleased(KeyEvent touche) {
                          if((touche.getKeyCode() == KeyEvent.VK_F2) && (ligne != 0)) { 
              /*                mpMesses.setValueAt(mpMesses.getValueAt(evtmeM.Extraction().getFirstRow()-1,
                                      evtmeM.Extraction().getColumn()),
                                      evtmeM.Extraction().getFirstRow(),
                                      evtmeM.Extraction().getColumn());
              */            }
                          if(touche.getKeyCode() == KeyEvent.VK_F12) {
                              fenMesses.dispose();
                          }
                          if(touche.getKeyCode() == KeyEvent.VK_PAGE_DOWN) {
                              if(ligne < derniereLigne) {
                                  accesDonnees(++ligne);
                              } else {
                                  tfOrdre.setText(String.valueOf(++ligne));
                                  tfDateEnregistrement.setText(dateEnregistrement.TempsAbrege());
                                  cbNomFidele.setSelectedIndex(0);
                                  tfNbMesses.setText(String.valueOf(1));
                                  tfIntentions.setText("");
                                  rbMesse.setSelected(true);
                                  tfhonor.setValue(0);
                                  tfcompl.setValue(0);
                                  rbCheques.setSelected(true);
                                  ckReponse.setSelected(true);
                              }
                          }
                          if(touche.getKeyCode() == KeyEvent.VK_PAGE_UP) {
                              if(ligne > 1) {
                                  accesDonnees(--ligne);
                              }
                          }
                          if(touche.getKeyCode() == KeyEvent.VK_END) {
                              if(touche.isControlDown()) {
                                  ligne = derniereLigne;
                                  accesDonnees(ligne);
                              } else {
              //                    while(!ckReponse.hasFocus()) {
              //                        touche.setModifiers(KeyEvent.CTRL_DOWN_MASK);
              //                        touche.setKeyCode(KeyEvent.VK_TAB);
              //                    }
                              }
                          }
                      }
                      /**
                       * je dois rajouter les deux méthodes suivantes
                       * pour que Java ne me dise pas que la classe n'est pas abstraite
                       * @param touche
                       */
                      public void keyPressed(KeyEvent touche) { }
                      public void keyTyped(KeyEvent touche) { }
                  }
                  class FocusEcouteur implements FocusListener {
                      @SuppressWarnings("static-access")
                      public void focusGained(FocusEvent fe) {
                      }
                      @SuppressWarnings("static-access")
                      public void focusLost(FocusEvent fe) {
                          if(rbMesse.isSelected())
                              tfhonor.setValue(Double.valueOf(tfNbMesses.getText()) * Nature.MS.getHonoraire());
                          if(rbNeuvaine.isSelected())
                              tfhonor.setValue(Double.valueOf(tfNbMesses.getText()) * Nature.NV.getHonoraire());
                          if(rbTrentain.isSelected())
                              tfhonor.setValue(Double.valueOf(tfNbMesses.getText()) * Nature.TR.getHonoraire());
                          if(tfcompl.hasFocus()) {
                              JOptionPane valeurComplement = new JOptionPane();
                              tfcompl.setValue(Double.valueOf(valeurComplement.showInputDialog(null, "Entrez la valeur du complément", "Complément sur honoraire", JOptionPane.QUESTION_MESSAGE)));
                          }
                      }
                  }
              }
              

              Merci à ceux qui ont une lumière pour m'éclairer sur ce problème.

              Fenlabise.

              • Partager sur Facebook
              • Partager sur Twitter
                12 novembre 2016 à 19:28:42

                bonjour,

                pour mieux vous éclairer j'affiche ici une image du formulaire qui inclut un sous formulaire. Il serait étonnant que personne n'ai vu ce cas.

                le sous formulaire est indiqué d'une flèche rouge.

                Merci encore beaucoup à ceux qui veulent m'aider.

                • Partager sur Facebook
                • Partager sur Twitter

                Problème d'affichage pour un sous-formulaire

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown