Université Ibn Zohr Faculté des Sciences FILIERE : SMI& LP2I MODULE : IHM /JAVA AVANCE SERIE N°1 IHM NOTE !! API UTILISE DANS CETTE SERIE EST SWING EXERCICE 1 Pour des questions de santé On recommande que la nourriture que vous mangez ait moins de 30% de ses calories totales provenant de la graisse. Développez une application avec interface graphique qui calcule le pourcentage de calories qui proviennent de graisse, pour cela il faut savoir le nombre de grammes de graisse et le nombre des calories provenant de la nourriture utilisée. Sachant que La graisse contient 9 calories par gramme. Entrée : ¾ Calories servit dans la nourriture ¾ Quantité de graisse servit. Calcule : percent = ( (fat * 9) / calories ) * 100 Sortie : Pourcentage de calorie provenant de la graisse. Combien de composant qui seront utilisées dansGUI? Quelles seront les composants reliées au listener? Ecrire un programme implémentant une interface de la figure dessous Démarche 1- Suggérez une disposition des panneaux pour créer cet interface de l'utilisateur 2- Ecrire un programme Java réalisant cet interface IMPORT JAVA.AWT.* ; IMPORT JAVA.AWT.EVENT.*; IMPORT JAVAX.SWING.*; PUBLIC CLASS PERCENTFAT EXTENDS JFRAME IMPLEMENTS ACTIONLISTENER { = NEW JLABEL("PERCENT OF CALORIES FROM FAT"); JLABEL TITLE JLABEL FATLABEL = NEW JLABEL("ENTER GRAMS OF FAT: "); JLABEL CALLABEL = NEW JLABEL("ENTER TOTAL CALORIES: "); JLABEL PERLABEL = NEW JLABEL("PERCENT CALORIES FROM FAT: "); JTEXTFIELD INFAT = NEW JTEXTFIELD( 7 ); JTEXTFIELD INCAL = NEW JTEXTFIELD( 7 ); JTEXTFIELD OUTPER = NEW JTEXTFIELD( 7 ); JBUTTON DOIT = NEW JBUTTON("DO IT!"); INT CALORIES ; // INPUT: TOTAL CALORIES PER SERVING INT FATGRAMS ; // INPUT: GRAMS OF FAT PER SERVING DOUBLE PERCENT; // RESULT: PERCENT OF CALORIES FROM FAT PUBLIC PERCENTFAT() { SETTITLE( "CALORIES FROM FAT" ); GETCONTENTPANE().SETLAYOUT( NEW FLOWLAYOUT() ); GETCONTENTPANE().ADD( TITLE ); GETCONTENTPANE().ADD( FATLABEL ); GETCONTENTPANE().ADD( INFAT ); GETCONTENTPANE().ADD( CALLABEL ); GETCONTENTPANE().ADD( INCAL ); GETCONTENTPANE().ADD( PERLABEL ); GETCONTENTPANE().ADD( OUTPER ); OUTPER.SETEDITABLE( FALSE ); } GETCONTENTPANE().ADD( DOIT ); DOIT.ADDACTIONLISTENER( THIS ); // THE APPLICATION PUBLIC VOID CALCPERCENT( ) { PERCENT = ( (FATGRAMS * 9.0) / CALORIES ) * 100.0 ; } PUBLIC VOID ACTIONPERFORMED( ACTIONEVENT EVT) { STRING USERIN ; USERIN = INFAT.GETTEXT() ; FATGRAMS = INTEGER.PARSEINT( USERIN ) ; USERIN = INCAL.GETTEXT() ; CALORIES = INTEGER.PARSEINT( USERIN ) ; CALCPERCENT() ; } OUTPER.SETTEXT( (PERCENT+" REPAINT(); ").SUBSTRING(0,6) ); PUBLIC STATIC VOID MAIN ( STRING[] ARGS ) { PERCENTFAT FATAPP = NEW PERCENTFAT() ; } } WINDOWQUITTER WQUIT = NEW WINDOWQUITTER(); FATAPP.ADDWINDOWLISTENER( WQUIT ); FATAPP.SETSIZE( 280, 200 ); FATAPP.SETVISIBLE( TRUE ); CLASS WINDOWQUITTER EXTENDS WINDOWADAPTER { PUBLIC VOID WINDOWCLOSING( WINDOWEVENT E ) 2 } { SYSTEM.EXIT( 0 ); } EXERCICE 2 Soit une application qui calcule le poids idéal d'une personne (en pounds) à partir de son genre et sa hauteur (en pouces).L'interface graphique utilise des boutons radio. Le code suivants montre comment créer un groupe bouton et comment lui intégré les boutons radio ainsi créer. Les boutons radio produisent des événements, comme le font les boutons normaux. Une application complète exige un listener pour réponde aux actions sur les boutons radios. Pour cela il faut utilisez le méthode setActionCommand () pour assigner une commande à chaque bouton radio, et la méthode getActionCommand () dans listener pour déterminer quel bouton a été activé. 1- Combien de groupes bouton sont utilisés dans cet interface graphique? 2- Ecrire un programme Java réalisant cette interface 3- Utilisez la stratégie d’emplacements de BorderLayout suivante pour réliser l’interface IMPORT JAVA.AWT.*; IMPORT JAVA.AWT.EVENT.*; IMPORT JAVAX.SWING.*; PUBLIC CLASS IDEALWEIGHT EXTENDS JFRAME IMPLEMENTS ACTIONLISTENER { JLABEL LBL1; JLABEL LBL2; JLABEL LBL3; JRADIOBUTTON RBM;//RADIO BUTTON MALE JRADIOBUTTON RBF; JRADIOBUTTON RBH1;//RADIO BUTTON HEIGHT 1 JRADIOBUTTON RBH2; JRADIOBUTTON RBH3; JRADIOBUTTON RBH4; JRADIOBUTTON RBH5; JTEXTFIELD OUTW;//OUT WEIGHT BUTTONGROUP GENDER; BUTTONGROUP HEIGHT; JPANEL GENPANEL; JPANEL HPANEL; JPANEL WPANEL; PUBLIC IDEALWEIGHT() { LBL1 = NEW JLABEL ( "YOUR GENDER" ); RBM = NEW JRADIOBUTTON("MALE",TRUE) ; RBF = NEW JRADIOBUTTON("FEMALE",FALSE); GENDER = NEW BUTTONGROUP(); LBL2 = NEW JLABEL ( "YOUR HEIGHT" ); RBH1 = NEW JRADIOBUTTON("60 TO 64 INCHES",TRUE) ; RBH2 = NEW JRADIOBUTTON("64 TO 68 INCHES",FALSE) ; RBH3 = NEW JRADIOBUTTON("68 TO 72 INCHES",FALSE) ; RBH4 = NEW JRADIOBUTTON("72 TO 76 INCHES",FALSE) ; RBH5 = NEW JRADIOBUTTON("76 TO 80 INCHES",FALSE) ; HEIGHT = NEW BUTTONGROUP(); 3 LBL3 = NEW JLABEL ( "IDEAL WEIGHT" ); OUTW = NEW JTEXTFIELD (15); JPANEL GENPANEL = NEW JPANEL(); JPANEL HPANEL = NEW JPANEL(); JPANEL WPANEL = NEW JPANEL(); RBF.ADDACTIONLISTENER( THIS ); RBM.ADDACTIONLISTENER( THIS ); RBH1.ADDACTIONLISTENER( THIS ); RBH2.ADDACTIONLISTENER( THIS ); RBH3.ADDACTIONLISTENER( THIS ); RBH4.ADDACTIONLISTENER( THIS ); RBH5.ADDACTIONLISTENER( THIS ); RBM.SETACTIONCOMMAND("M"); RBF.SETACTIONCOMMAND("F"); RBH1.SETACTIONCOMMAND("H1"); RBH2.SETACTIONCOMMAND("H2"); RBH3.SETACTIONCOMMAND("H3"); RBH4.SETACTIONCOMMAND("H4"); RBH5.SETACTIONCOMMAND("H5"); GETCONTENTPANE().SETLAYOUT( NEW BORDERLAYOUT() ); GENDER.ADD(RBM); GENDER.ADD(RBF); GENPANEL.ADD(LBL1); GENPANEL.ADD(RBM); GENPANEL.ADD(RBF); HPANEL.ADD(LBL2); HEIGHT.ADD(RBH1); HEIGHT.ADD(RBH2); HEIGHT.ADD(RBH3); HEIGHT.ADD(RBH4); HEIGHT.ADD(RBH5); HPANEL.ADD(RBH1); HPANEL.ADD(RBH2); HPANEL.ADD(RBH3); HPANEL.ADD(RBH4); HPANEL.ADD(RBH5); WPANEL.ADD(LBL3); WPANEL.ADD(OUTW); GETCONTENTPANE().ADD( GETCONTENTPANE().ADD( GETCONTENTPANE().ADD( GENPANEL, BORDERLAYOUT.WEST ); HPANEL, BORDERLAYOUT.EAST ); WPANEL, BORDERLAYOUT.SOUTH ); GENPANEL.SETLAYOUT( NEW BOXLAYOUT( GENPANEL, BOXLAYOUT.Y_AXIS ) ); HPANEL.SETLAYOUT( NEW BOXLAYOUT( HPANEL, BOXLAYOUT.Y_AXIS ) ); OUTW.SETEDITABLE(FALSE); } PUBLIC VOID ACTIONPERFORMED( ACTIONEVENT EVT) { INT H=0; DOUBLE W=0; //HEIGHT.GETSELECTION().GETACTIONCOMMAND(); IF(HEIGHT.GETSELECTION().GETACTIONCOMMAND().EQUALS("H1")) H=60; IF(HEIGHT.GETSELECTION().GETACTIONCOMMAND().EQUALS("H2")) H=64; IF(HEIGHT.GETSELECTION().GETACTIONCOMMAND().EQUALS("H3")) H=68; IF(HEIGHT.GETSELECTION().GETACTIONCOMMAND().EQUALS("H4")) H=72; 4 IF(HEIGHT.GETSELECTION().GETACTIONCOMMAND().EQUALS("H5")) H=76; //GENDER.GETSELECTION().GETACTIONCOMMAND(); IF(GENDER.GETSELECTION().GETACTIONCOMMAND().EQUALS("M")) W=(H*H)/30.0; IF(GENDER.GETSELECTION().GETACTIONCOMMAND().EQUALS("F")) W=(H*H)/28.0; OUTW.SETTEXT(" "+W); REPAINT(); } PUBLIC STATIC VOID MAIN ( STRING[] ARGS ) { IDEALWEIGHT FRM = NEW IDEALWEIGHT(); WINDOWQUITTER WQUIT = NEW WINDOWQUITTER(); FRM.ADDWINDOWLISTENER( WQUIT ); FRM.SETSIZE( 350, 200 ); FRM.SETRESIZABLE(FALSE);//POUR NE PA REDIMENSIONNER LA FENETRE FRM.SETVISIBLE( TRUE ); } } CLASS WINDOWQUITTER EXTENDS WINDOWADAPTER { PUBLIC VOID WINDOWCLOSING( WINDOWEVENT E ) { SYSTEM.EXIT( 0 ); }} } EXERCICE 4 On souhaite Ecrire un programme Java effectuant la conversion le dirhams en diverses devise : Dollars, Franc Swiss, Franc Belge, Peseta Espagnol et en Euro. L’interface de cette application est présentée dans la figure 1 Figure 1 Figure2 Sachant qu’ Un Un Un Un 10 Dollar franc Français franc Belge franc Swiss Peseta Espagnol 10 dirhams 1.50 dirhams Tableau 1 1- Ecrire une méthode convert() permettant de convertir le dirhams en divers devises du tableau 1 ; 2- Combien de composant contenus dans cette fenêtre de la figure 1. 3- Lesquelles seront reliées à un listener? 4- Ecrire le programme java réalisant l’interface de la figure 1 et qui convertit le dirham en diverses devises L’interface de la figure1 présente un sérieux problème. Lorsque l’utilisateur redimensionne la fenêtre les composantes ne reste pas appariés et changent de place (voir figure2). On peut empêcher l’utilisateur de redimensionner la fenêtre en utilisant la méthode : frm.setResizable(false), comme on peut aussi utiliser des gestionnaires d’agacement et des panneaux. 5- Proposez une solution basée sur l’utilisation des panneaux (Panel) et les gestionnaires d’agacement pour réaliser l’interface figure3 5 6 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Conversion extends JFrame implements ActionListener { JLabel lbl1,lbl2; int h; double r; JRadioButton rbh1;//radio button height 1 JRadioButton rbh2; JRadioButton rbh3; JRadioButton rbh4; JRadioButton rbh5; JTextField out_data,In_data;//out weight ButtonGroup monaie; JPanel monaiepanel; JPanel wpanel,hpanel; public Conversion() { lbl1 = new JLabel ( "Donnez la valeur en DIRHAMS" ); monaie = new ButtonGroup(); rbh1 = new JRadioButton("Francs",true) ; rbh2 = new JRadioButton("Dollars",false) ; rbh3 = new JRadioButton("Francs Swiss ",false) ; rbh4 = new JRadioButton("Francs Belge",false) ; rbh5 = new JRadioButton("Livre Stirlling",false) ; lbl2 = new JLabel ( "Monaie Convertit en Euro" ); out_data = new JTextField (15); In_data = new JTextField (15); JPanel hpanel = new JPanel(); JPanel monaiepanel = new JPanel(); JPanel wpanel = new JPanel(); rbh1.addActionListener( this ); rbh2.addActionListener( this ); rbh3.addActionListener( this ); rbh4.addActionListener( this ); rbh5.addActionListener( this ); rbh1.setActionCommand("h1"); rbh2.setActionCommand("h2"); rbh3.setActionCommand("h3"); rbh4.setActionCommand("h4"); rbh5.setActionCommand("h5"); getContentPane().setLayout( new FlowLayout() ); // getContentPane().setLayout( new BorderLayout() ); hpanel.add(lbl1); hpanel.add(In_data); monaie.add(rbh1); 7 monaie.add(rbh2); monaie.add(rbh3); monaie.add(rbh4); monaie.add(rbh5); monaiepanel.add(rbh1); monaiepanel.add(rbh2); monaiepanel.add(rbh3); monaiepanel.add(rbh4); monaiepanel.add(rbh5); wpanel.add(lbl2); wpanel.add(out_data); getContentPane().add( hpanel); getContentPane().add( monaiepanel); getContentPane().add( wpanel); /*monaiepanel.setLayout( new BoxLayout( monaiepanel, BoxLayout.Y_AXIS ) ); hpanel.setLayout( new BoxLayout( hpanel, BoxLayout.X_AXIS ) ); wpanel.setLayout( new BoxLayout( wpanel, BoxLayout.X_AXIS ) ); getContentPane().add( hpanel, BorderLayout.NORTH ); getContentPane().add( monaiepanel, BorderLayout.CENTER); getContentPane().add( wpanel, BorderLayout.SOUTH );*/ out_data.setEditable(false); } public void convert(char d ) { switch (d) {case '1': r = (h / 10.0);break; case '2': r = (h / 8.20);break; case '3': r = (h / 12.0);break; case '4': r = (h / 9.0);break; case '5': r = (h / 3.0);break; } } public void actionPerformed( ActionEvent evt) { String userIn = In_data.getText(); h=Integer.parseInt( userIn ); if(monaie.getSelection().getActionCommand().equals("h1")) convert('1'); if(monaie.getSelection().getActionCommand().equals("h2")) convert('2'); if(monaie.getSelection().getActionCommand().equals("h3")) convert('3'); if(monaie.getSelection().getActionCommand().equals("h4")) convert('4'); if(monaie.getSelection().getActionCommand().equals("h5")) convert('5'); 8 out_data.setText(" "+r); repaint(); } public static void main ( String[] args ) { Conversion frm = new Conversion(); WindowQuitter wquit = new WindowQuitter(); frm.addWindowListener( wquit ); frm.setSize( 350, 200 ); frm.setResizable(true);//pour ne pa redimensionner la fenêtre frm.setVisible( true ); } } class WindowQuitter extends WindowAdapter { public void windowClosing( WindowEvent e ) { System.exit( 0 ); }} Exercise4: 1- Suggérez une disposition des panneaux pour créer cet interface de l'utilisateur 2- Ecrire un programme Java réalisant cet interface IMPORT JAVA.AWT.*; IMPORT JAVA.AWT.EVENT.*; CLASS FARTICLE EXTENDS FRAME IMPLEMENTS ACTIONLISTENER{ PRIVATE PANEL P1,P2,P3,P4; PRIVATE TEXTFIELD TFNOM,TFPRIXHTAXE,TFPRIXTTC, TFREFERENCE,TFTAUXTVA; PRIVATE LABEL LNOM,LPRIXHTAXE,LREFERENCE, LTAUXTVA,LPRIXTTC; PRIVATE TEXTAREA TACOULEUR; PRIVATE BUTTON BTCREATE; PRIVATE BUTTON CMDEXIT ; PUBLIC FARTICLE(STRING S){ S U P E R( S ) ; ADDWINDOWLISTENER(NEW CLEXIT()); P1=NEW PANEL(NEW FLOWLAYOUT(FLOWLAYOUT.CENTER)); P3=NEW PANEL(NEW FLOWLAYOUT(FLOWLAYOUT.CENTER)); P4=NEW PANEL(NEW FLOWLAYOUT(FLOWLAYOUT.CENTER)); P2=NEW PANEL(NEW BORDERLAYOUT()); LREFERENCE=NEW LABEL("REFERENCE"); TFREFERENCE=NEW TEXTFIELD(5); LNOM=NEW LABEL("ARTICLE"); TFNOM=NEW TEXTFIELD(5); LPRIXHTAXE=NEW LABEL("PRIX HORS TAXE"); TFPRIXHTAXE=NEW TEXTFIELD(5); LTAUXTVA=NEW LABEL("TAUX TVA"); TFTAUXTVA=NEW TEXTFIELD(5); LPRIXTTC=NEW LABEL("PRIX TTC"); TFPRIXTTC=NEW TEXTFIELD(5); 9 TACOULEUR=NEW TEXTAREA ("INFORMATION SUR L'ARTICLE : ", 14, 50,TEXTAREA.SCROLLBARS_BOTH); BTCREATE=NEW BUTTON("CREATE"); BTCREATE.ADDACTIONLISTENER(THIS); CMDEXIT = NEW BUTTON(" QUITTER "); CMDEXIT.ADDACTIONLISTENER(NEW JAVA.AWT.EVENT.ACTIONLISTENER() { PUBLIC VOID ACTIONPERFORMED(JAVA.AWT.EVENT.ACTIONEVENT EVT) { QUITTERACTIONPERFORMED(EVT); } }); TFTAUXTVA.SETTEXT("19.6"); P1.ADD(LNOM); P1.ADD(TFNOM); P1.ADD(LREFERENCE); P1.ADD( TFREFERENCE); P1.ADD(LPRIXHTAXE); P1.ADD(TFPRIXHTAXE); P1.ADD( LTAUXTVA); P1.ADD(TFTAUXTVA); P1.ADD(LPRIXTTC); P1.ADD( TFPRIXTTC); P3.ADD(TACOULEUR); P4.ADD(BTCREATE); P4.ADD(CMDEXIT ); P2.ADD(BORDERLAYOUT.NORTH,P1); P2.ADD(BORDERLAYOUT.CENTER,P3); P2.ADD(BORDERLAYOUT.SOUTH,P4); P2.SETBACKGROUND(COLOR.GETHSBCOLOR(97,231,120)); P1.SETBACKGROUND(COLOR.GETHSBCOLOR(157,0,120)); P4.SETBACKGROUND(COLOR.GETHSBCOLOR(150,240,13)); ADD(P2); SETSIZE(700,300); SETVISIBLE(TRUE); } PUBLIC VOID ACTIONPERFORMED(ACTIONEVENT E){ IF(E.GETSOURCE()==(BTCREATE)){ STRING VALUEHT = TFPRIXHTAXE.GETTEXT(); DOUBLE PRICE = DOUBLE.VALUEOF(VALUEHT).DOUBLEVALUE(); STRING TAUXTVA = TFTAUXTVA.GETTEXT(); DOUBLE RATE = DOUBLE.VALUEOF(TAUXTVA).DOUBLEVALUE(); PRICE = PRICE + (PRICE/100) * RATE; TFPRIXTTC.SETTEXT("" + PRICE); STRING S=NEW STRING(); S+=" NOM ARTICLE : "+ TFNOM.GETTEXT()+"\N"+"REFERENCE ARTICLE : "+TFREFERENCE.GETTEXT()+"\N"+"PRIX UNITAIRE HORS TAXE : "+TFPRIXHTAXE.GETTEXT()+"\N"; S+="PRIX TTC "+TFPRIXTTC.GETTEXT()+"\N";; TACOULEUR.SETTEXT(S); TFNOM.SETTEXT(""); TFPRIXHTAXE.SETTEXT(""); TFREFERENCE.SETTEXT(""); 10 } } } PRIVATE VOID QUITTERACTIONPERFORMED(JAVA.AWT.EVENT.ACTIONEVENT EVT) { SYSTEM.EXIT(0); PUBLIC STATIC VOID MAIN(STRING[] ARG){ FARTICLE F=NEW FARTICLE("FENETRE"); } Exercise5 1- Ecrire un programme Java réalisant cet interface en utilisant Menu import java. awt.*; import java. awt. event.*; import javax. swing.*; import java.awt.*; public class teste extends JFrame { public teste() { super(); setTitle(" Titre de la Fenetre "); setSize(300, 150); MenuBar mb = new MenuBar(); setMenuBar(mb); Menu m = new Menu(" un menu "); mb.add(m); m.add(new MenuItem(" 1er element ")); m.add(new MenuItem(" 2eme element ")); Menu m2 = new Menu(" sous menu "); CheckboxMenuItem cbm1 = new CheckboxMenuItem(" menu item 1.3.1 "); m2.add(cbm1); cbm1.setState(true); CheckboxMenuItem cbm2 = new CheckboxMenuItem(" menu item 1.3.2 "); m2.add(cbm2); m.add(m2); pack(); show(); } public static void main(String[] args) { teste frm=new teste(); frm.setSize( 350, 250 ); 11 frm.setResizable(false); frm.setVisible( true ); // affiche la fenetre }} 12