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

avec Java Discussion :

Optimisation de code


Sujet :

avec Java

  1. #1
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut Optimisation de code
    Bonjour,

    je m'explique, dans le cadre de développements de petits projets techniques informatiques, j'ai commencé il y a quelques mois 2 applications Java.

    Je souhaite optimiser 2 partie du code, pour un gain de clarté et éviter la redondance étant donné que l'application est de type procédurale.

    Je commence avec les boutons, j'ai 21 JButtons, il sont tous déclarés tel quels :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // (final pour certains)
    JButton bouton0 	= new JButton(active);  	bouton0.setText("0");
    Ils sont tous codés a la suite les uns des autres, et on ma fortement conseillé d'optimiser ce bout de code. Hélas j'ai de multiples erreurs lorsque que je fais par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JButton bouton0, bouton1, bouton(n..) = new JButton();
    Bien entendu, cela ce passe aussi pour les 2 menus et 5 menuItem ...



    Pour la deuxième partie je la mentionnerais plus tard.

    Merci pour votre aide.

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Passe par un tableau ou une collection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    JButton[] buttons;
     
    public void initButtons(String... texts) {
       buttons = new JButton[texts.length];
       int i = 0;
     
       for (String text : texts) {
          JButton button = new JButton(text);
          buttons[i++] = button;
       }
    }

  3. #3
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut
    Merci de ta réponse,
    j'ai procéde de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		JButton [] caract = new JButton[10];
            for(int i = 0; i < caract.length; i++){
                caract[i]= new JButton (""+i);
                caract[i].setName("bouton" + i);
                caract[i].addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        JButton b = (JButton)e.getSource();
                        System.out.println("bouton "+b.getName());
                    }
                });
                panel.add(caract[i]);
             }
            setContentPane(panel);
    Cependant ( deuxieme soucis d'optimisation ), les boutons sont placés via un GridBagLayout, comme ceci : ( exemple du bouton1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // # 1
    	     gbl.gridx = 0;
    	     gbl.gridy = 3;
    	     gbl.gridwidth = 1;
    	     gbl.gridheight = 1;
    	     gbl.fill = GridBagConstraints.HORIZONTAL;
    	    	panel.add(bouton1, gbl); 
    	    	bouton1.setBackground(Color.black);
    	     	bouton1.setForeground(Color.white);
    Donc, il y a les coordonées puis l'ajout sur le panel. Or, avec un tableau, il ne reconnait pas encore le bouton comme bouton1 étant donné que le process n'est pas encore enclenché. Je ne vois pas comment procéder.
    J'ai essayé "b.getName()" a la place du nom du bouton ( bouton1 par exemple ), en vain, pourtant b.getName(); retourne le numéro respectif du bouton.


    edit : j'avai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        gbl.gridx = 0;
    	     gbl.gridy = 3;
    	     gbl.gridwidth = 1;
    	     gbl.gridheight = 1;
    	     gbl.fill = GridBagConstraints.HORIZONTAL;
    	    	panel.add(caract[i], gbl); 
    	    	caract[i].setBackground(Color.black);
    	     	caract[i].setForeground(Color.white);
    Merci

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ... // gbl = ...
    panel.add(caract[i], gbl);

  5. #5
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut
    Merci, hélas les boutons se placent a la suite horizontalement, il ne sont pas placé via le gbl...

  6. #6
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut
    Voici mes 2 boucles pour les boutons :
    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
    // Boucle de création des boutons Delta, Graph, +, -, *, %, C, ON,x^, ,...
    		final JButton[] tabButton = new JButton[12] ;
    		String[] tabButtonLabels = {"C", ",", "%", "Graph", "Delta", "+", "-"
    				, "/", "*", "x^", "ON", "="};
    		for (int j=0 ; j<tabButton.length ; j++)
    	     tabButton[j] = new JButton(tabButtonLabels[j]) ;
     
    		// Boucle de création des boutons "chiffre"
    		final JButton [] caractPdt = new JButton[10]; // On veut 10 boutons
            for(int i = 0; i < caractPdt.length; i++){
                caractPdt[i]= new JButton (""+i);
                caractPdt[i].setName("bouton" + i);
                // on place apres chaque bouton son chiffre (i)
                        // incrémenté 
                caractPdt[i].addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        JButton b = (JButton)e.getSource();
                        System.out.println("bouton "+b.getName());
     
                    }
                });
              panel.add(caractPdt[i]);
             }
            setContentPane(panel);
    Mon dernier soucis est de savoir comment supprimé ces paragraphe de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                          gbl.gridx = 1;
    		     gbl.gridy = 5;
    		     gbl.gridwidth = 1;
    		     gbl.gridheight = 1;
    		     	panel.add(caractPdt[0], gbl);
    sachant que chaque coordonnées est differentes pour un bon placement de chaque composant. On m'a conseillé une boucle, mais les valeurs de gridy et gridx sont differentes pour chaque composants. Ce qui signifie que j'ai une vingtaine de petit paragraphe tel que celui-ci...

    Merci

    Pour info, voici le cadrillage pour le placement de mes composants.
    Pièce jointe 68937

  7. #7
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // par exemple :
    final int[] gridX = {1, 2, 3, 1, 2, 3, };
    final int[] gridY = {1, 1, 1, 2, 2, 2, };
     
    gbl.gridwidth = 1;
    gbl.gridheight = 1;
     
    for(int i = 0; i < caractPdt.length; i++){
    gbl.gridx = gridX[i];
    gbl.gridy = gridY[i];
    panel.add(caractPdt[i], gbl);

  8. #8
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut
    Merci Hervé !

    Je poste ce que j'ai codé pour l'ensemble du topic :
    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
     // Boucle de création des boutons Delta, Graph, +, -, *, %, C, ON,x^, ,...
    		final JButton[] tabButton = new JButton[22] ;
    		String[] tabButtonLabels = {"0","1","2","3","4","5","6","7","8","9","C",  ","  , "%", "Graph", "Delta", "+", "-"
    				, "/", "*", "x^", "ON", "="};
    		for (int i=0 ; i<tabButton.length ; i++)
    	     tabButton[i] = new JButton(tabButtonLabels[i]);
     
              panel.add(tabButton[i]);
     
     
     
     
            final int[] gridX = {4,1,0,1,2,3,0,1,2,3,0,2,2,3,0,4,4,4,0,1,2,3,4,0,4};
            final int[] gridY = {6,5,3,3,3,3,4,4,4,4,5,5,5,5,6,3,5,4,2,2,2,2,2,1,0};
            final int[] gridW = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,5,1};
            final int[] gridH = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
     
            for(int f = 0; f < tabButton.length; f++){
            gbl.gridx = gridX[f];
            gbl.gridy = gridY[f];
            gbl.gridwidth = gridW[f];
            gbl.gridheight = gridH[f];
            panel.add(tabButton[f], gbl);
     
     
            }
            setContentPane(panel);
    Tout fonctionne à merveille, le placement n'est pas encore parfait, mais c'est déja tres bien Merci

  9. #9
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Après, on pourrait faire apparaître une classe pour collecter toutes les informations relatives à un bouton
    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
    public class Bouton {
     
    	private JButton button;
    	private int gridx, gridy, gridwidth, gridheight;
     
    	private Bouton(String text, int gridx, int gridy, int gridwidth,
    			int gridheight) {
    		this.button = new JButton(text);
    		this.gridx = gridx;
    		this.gridy = gridy;
    		this.gridwidth = gridwidth;
    		this.gridheight = gridheight;
    	}
     
    	public void addTo(Container c, GridBagConstraints gbl) {
    		gbl.gridx = gridx;
    		gbl.gridy = gridy;
    		gbl.gridwidth = gridwidth;
    		gbl.gridheight = gridheight;
    		c.add(button, gbl);
    	}
     
    	public JButton getButton() {
    		return button;
    	}
    }
     
    ...
     
    public void build(JPanel panel, GridBagConstraints gbl) {
     
    	final Bouton[] tabBoutons = { 
    			new Bouton("0", 4, 6, 1, 1),
    			new Bouton("1", 1, 5, 1, 1), 
    			// etc.
    			};
    	for (Bouton bouton : tabBoutons) {
    		bouton.addTo(panel, gbl);
    	}
    }

  10. #10
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut
    Merci Hervé pour ta contribution, mai j'utilise déjà un tout autre moyens pour collecter les infos des boutons. En tout les cas merci toutes boucles de placement et de configurations des boutons fonctionnent.

    J'aurais une dernière chose à éclaircir..

    J'ai donc une boucle (for) qui me créé une vingtaine de boutons au lancement de l'appli... les 10 premiers sont des chiffres de 0 à 9.
    Or, je souhaiterai pouvoir placer des accelerators sur ces derniers, du style, on tape la touche "8", le bouton8 s'enclanche. Un à un, c'est relativement simple, mais je souhaite pouvoir placer ceci dans une boucle, pour une soucis d'ergonomie de codage.


    Si vous avez des idées n'hesitez pas. Merci;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int f =10; f<10; f++) {
     
    	//	tabButton[f].setMnemonic(KeyEvent.VK_[0,1,2...]); ???
    /* Je sais tres bien que ce bout de code est rigoureusement faux, ce n 'est qu'a titre informatif !*/
    		}

  11. #11
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Si tu en as juste besoin de 10 alors pourquoi ne pas faire un tableau static que tu initialise avec les 10 valeurs souhaitées.

    Ensuite tu y accède avec ton index f de ta boucle comme tu le fais pour ton tableau de bouton
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut
    Tres bien !

    J'ai procédé de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		int[] memo = {KeyEvent.VK_0, KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_4, 
    	                 KeyEvent.VK_5, KeyEvent.VK_6, KeyEvent.VK_7, KeyEvent.VK_8, KeyEvent.VK_9};
    		for (int f = 0; f<10; f++) {
    			tabButton[f].setMnemonic(memo[f]);
    }
    Si cette boucle est "valable", alors je ne savais pas que l'on pouvait placer de tels paramètres dans un tableau

    Merci

  13. #13
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut
    Rebonjour,

    J'ai une autre question, est-il possible de faire une boucle avec des actionListener? Je m'explique, j'ai des paragraphes (casi identiques) de code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tabButton[0].addActionListener(new ActionListener() {
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		i=0;
    		System.out.println(i);
    		String recup = ecran.getText();
    		ecran.setText(recup+i);
    	}	
    });
    ou est le bouton 0 de mon tableau, et ainsi de suite jusqu'au bouton 9...
    Or, je n'arrive pas à optimiser ces paragraphes, je pense qu'il y a un autre moyen d'écouter les boutons, (avec des actionCommand par exemple ), mais je ne vois pas comment procéder.
    Enfait, je pense que vous l'aurez compris, il s'agit d'attribuer à "i" la valeur du bouton enclenché, j'ai essayé plusieurs boucles differentes, en vain.


    Merci de votre aide.

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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