un premier bilan après 4 cours en 2006


VU en TD

Avant tout : télécharger BigBlob.jar, le déployer sous BLUEJ : menu 'projet' item 'Ouvrir non BlueJ'.


étudier la multiplication de Grands Entiers.

Pour cela on crée la petite interface  :

Comportement attendu  :


: GUI en FlowLayout et ActionListener par classes externes

Construction de l'interface : 6 éléments -2 'JLabel' - 2 champs de texte - 2 boutons sont disposés à la queue leu leu ... donc par exemple dans un JFrame organisé selon un FlowLayout d'où le code :
Code de la GUI
    
    //... éléments de l'interface
    protected JTextField m_totalTf     = new JTextField(10);
    protected JTextField m_userInputTf = new JTextField(10);
    private JButton    m_multiplyBtn = new JButton("Multiplier");
    private JButton    m_clearBtn    = new JButton("Effacer");
    private JLabel    m_entreeL = new JLabel("Entrée");
    private JLabel    m_totalL    = new JLabel("Total");
       
        JPanel content = new JPanel(new FlowLayout());
        
   /** Constructor */
   BigBlobGUIseul() {
        content.add(m_entreeL);
        content.add(m_userInputTf);
        content.add(m_multiplyBtn);
        content.add(m_totalL);
        content.add(m_totalTf);
        content.add(m_clearBtn);
        //... finalize layout
        this.setContentPane(content);
        this.pack();      
    }    

Verifier la création de la GUI voulue par ce code.


introduction du calcul dans cette même classe : pour les grands entiers Java propose java.math.BigInteger. Etudier cette classe...

Pour déclencher le calcul on va attacher au bouton 'Multiplier'  un MultiplicationListener qui implémente l'interface 'ActionListener' dont la méthode actionPerfomed aura le code suivant

actionPerformed
    public void actionPerformed(ActionEvent e) {
        try {
            bbg.m_total = bbg.m_total.multiply(new BigInteger(bbg.m_userInputTf.getText()));
            bbg.m_totalTf.setText(bbg.m_total.toString());
            System.out.println(bbg.m_total);
        } catch (NumberFormatException nex) {
            JOptionPane.showMessageDialog(bbg, "Bad Number");
        }
     }

On procédera de même pour le bouton effacer...

Implanter ces deux classes MultiplicationListener et EffacerListener comme des classes externes à la classe BigBlobGUI

Une idée de solution est proposée dans le paquetage bigblob du .jar. Il est cependant fortement conseillé de construire soi même une solution.

Rappel, principe général : il faut cacher les détails d'implantation à l'utilisateur futur de la classe. Donc les attributs de la classe doivent restés 'private' si rien n'OBLIGE' à les "passer" 'protected' ou sauf si la spécification spécifie leur visibilité...

à suivre ...


 Même petite application mais on veut maintenant une interface  fondée sur un GridLayout :

Etudier la Classe GridLayout et transformer le code de la classe BifBlobGUI pour obtenir cette GUI sans changement de comportement de l'application.

Une idée de solution est proposée dans le paquetage bigblob1bis du .jar. Il est cependant fortement conseillé de construire soi même une solution.

à suivre ...


 Même petite application mais on veut maintenant une interface  fondée sur un BorderLayout :

Etudier la Classe BorderLayout et transformer le code de la classe BifBlobGUI pour obtenir cette GUI sans changement de comportement de l'application.

Une idée de solution est proposée dans le paquetage bigblob1ter du .jar. Il est cependant fortement conseillé de construire soi même une solution.

à suivre ...


 Même petite application mais les Classes MultiplicationListener et EffaceListener sont des classes interne à la classe BigBlobGUI.

On a maintenant le diagramme de classe :

transformer le code de la classe BifBlobGUI sans changement de comportement de l'application.

Une idée de solution est proposée dans le paquetage bigblob2 du .jar. Il est cependant fortement conseillé de construire soi même une solution.

à suivre ...


 Même petite application mais les Classes MultiplicationListener et EffaceListener sont des classes anonymes.

le diagramme de classe est inchanger par rapport à Bigblob2

transformer le code de la classe BifBlobGUI sans changement de comportement de l'application.

Une idée de solution est proposée dans le paquetage bigblob2 du .jar. Il est cependant fortement conseillé de construire soi même une solution.

à suivre ...



 L'idée est maintenant de séparer la partie arithmétique (l'application) et de partie GUI . On obtient le diagramme de classes :

la classe CalcV2 contient le 'main' qui lance la GUI.  code
public class CalcV2 {
    public static void main(String[] args) {     
        JFrame presentation = new CalcViewController();
        presentation.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        presentation.setTitle("une multiplication :  Presentation(GUI) + Model");
        presentation.setVisible(true);
    }
}

donner  le code des classes CalcModel et CalcViewControler.

Une idée de solution est proposée dans le paquetage CalcV2 du .jar. Il est cependant fortement conseillé de construire soi même une solution.

à suivre ...


 on veut maintenant tendre vers le pattern MVC (Modèle-Vue-Controleur):

Le diagramme de classes est alors le suivant

la classe CalcModel est inchangée.

Que doivent contenir CalcView et CalcController ?

Une idée de solution est proposée dans le paquetage CalcMVC du .jar. Il est cependant fortement conseillé de construire soi même une solution.

à suivre ...


enfin, transformer la code de chacun des paquetages pour que l'application puisse être aussi exécutée dans une Applet

à suivre ...