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

AWT/Swing Java Discussion :

[Action] Exécuter l'action


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 54
    Points : 42
    Points
    42
    Par défaut [Action] Exécuter l'action
    Bonjour,

    J'utilise pour la première fois les Actions et je suis un peu perdu.
    Je cherche à faire une combobox pour sélectionner la taille du texte.

    Je tente avec ceci :
    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
     
     
    this.add(comboBoxFontSize()); // this est de type JToolBar
     
    [...]
     
    	private JComboBox comboBoxFontSize () {
    		Vector<Action> vect = new Vector<Action> ();
     
    		for (int i=8; i<48; i+=2) {
    			vect.add(new StyledEditorKit.FontSizeAction(String.valueOf(i), i));
    		}
     
    		JComboBox jcb = new JComboBox (vect);
    		jcb.setMaximumRowCount(5);
    		return jcb;
    	}
    Mais, comme je m'y attendais, il n'est pas content du tout.
    JComboBox ne comprend pas l'objet Action contrairement au JToolBar par exemple.

    Je me demandais donc s'il y avait moyen d'exécuter l'action directement dans ce style là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	class ActionComboBox implements ActionListener {
    		public void actionPerformed (ActionEvent ev) {
    			if (...)
    				// exécuter l'action : StyledEditorKit.FontSizeAction(String.valueOf(size), size);
    		}
    	}
    Merci d'avance pour vos réponses.

  2. #2
    Membre actif Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Points : 288
    Points
    288
    Par défaut
    Pour l'action tu dois faire ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private JComboBox comboBoxFontSize () {
          Vector<Action> vect = new Vector<Action> ();
     
         ActionListener ecouteur = new ActionComboBox();
     
          for (int i=8; i<48; i+=2) {
             vect.add(new INTEGER(i));
          }
     
          JComboBox jcb = new JComboBox (vect);
         jcb.addActionListener(ecouteur)
          jcb.setMaximumRowCount(5);
          return jcb;
       }
    et dans ta méthode actionPerformed tu peux récupéré la taille qui a été selectionnée, tu n'a plus qu'à l'affecter à ton texte.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 54
    Points : 42
    Points
    42
    Par défaut
    Je me suis peut-être mal exprimé.
    En fait, j'ai fait ce que tu m'a dis, mais je ne parvient pas à changer la taille de mon texte.

    Je dois utiliser cette action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new StyledEditorKit.FontSizeAction(String.valueOf(i), i)
    Mais je ne vois pas quoi en faire dans mon actionPerformed. Comment exécuter l'action proprement dite, à savoir changer la taille de mon texte ?

    Lorsqu'une action est ajoutée dans un JToolBar par exemple, celà crée automatiquement un "bouton" et lorsqu'on clique dessus le texte change de taille.

    Mais là mon problème est que je ne peux ajouter une action dans JComboBox, je cherche donc à exécuter directement l'action.

  4. #4
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Ton truc est pas super clair.

    En quoi tu peux pas ajouter une action à ton JComboBox ??

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 54
    Points : 42
    Points
    42
    Par défaut
    En gros, je voudrais créer une JComboBox contenant différentes tailles.
    Lorsque je sélectionne l'une d'entre elles, le texte sélectionné prend cette taille.

    La création de la JComboBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private JComboBox comboBoxFontSize () { 
          Vector<String> vect = new Vector<String> ();
     
          for (int i=8; i<48; i+=2)
             vect.add(String.valueOf(i)); 
     
          JComboBox jcb = new JComboBox (vect);
          jcb.setMaximumRowCount(5);
          jcb.addActionListener(new ActionComboBox (jcb, vect));
          return jcb; 
    }
    Ensuite, la création de l'écouteur comme classe incluse :
    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
     
    class ActionComboBox implements ActionListener {
     
    		private JComboBox jcb;
    		private Vector vect;
     
    		public ActionComboBox (JComboBox jcb, Vector vect) {
    			this.jcb = jcb;
    			this.vect = vect;
    		}
     
    		public void actionPerformed (ActionEvent ev) { 
    			int size = Integer.parseInt((String) vect.elementAt(jcb.getSelectedIndex()));
    			// ?!?
    		} 
    	}
    J'obtiens donc la taille du texte sélectionnée.
    Mon problème, est que je ne sais que faire après pour donner la taille voulue à mon texte. Que dois-je écrire dans mon actionPerformed ?

  6. #6
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Le texte est dans un TextArea ?

    Si oui passe le en param à ton contructeur du listener et intercepte le texte sélectionné dans l'action

  7. #7
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Excuse moi je me suis trompé avec JtextArea ==> un JtextPane

    donc tu le passes en param à ton constructeur
    et comme ça tu modifie dans ton actionPerformed

  8. #8
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    En tout cas, vu que le sujet m'intéressait, j'ai testé .... et en cherchant je suis tombé sur :
    http://java.sun.com/docs/books/tutor...tComponentDemo

    Qui le fait !!!! ( avec un JMenuBar au lieu de JComboBox ) et ça marche nikel ( code source dispo etc .)

    Voilà !

    Tiens nous au courant

    PS : c'est le TextComponentDemo dans la page

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 54
    Points : 42
    Points
    42
    Par défaut
    Oui, j'avais vu celà, mais ca ne resout pas le problème, puisque dans un JMenuBar/JToolBar, c'est très facile a faire.

    Par exemple :
    monMenuBar.add(new StyledEditorKit.FontSizeAction("12", 12));

    Car le JMenuBar accepte directement de "add" des objets de type action.
    Il s'occupe lui même de la création du JMenuItem et du listener.

    Pareil pour un JToolBar, lorqu'on "add" des objets de type action il crée automatiquement le JButton et le listener.

    Contrairement à un JComboBox, qui lui ne "comprend" pas les objets de type Action, d'où tout mon problème.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 54
    Points : 42
    Points
    42
    Par défaut
    A force de chercher, on trouve...

    J'ai été voir les sources de StyledEditorKit.StyledTextAction, la classe qui s'occupe de la taille est celle-ci :

    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
     
    public static class FontSizeAction extends StyledEditorKit.StyledTextAction {
     
    		private int size;
     
    		public FontSizeAction(String nm, int size) {
    			super(nm);
    			this.size = size;
    		}
     
    		public void actionPerformed(ActionEvent event) {
    			SimpleAttributeSet atts = new SimpleAttributeSet();
    			StyleConstants.setFontSize(atts, size);
    			setCharacterAttributes(getEditor(event), atts, false);
    		}
    }
    Je l'ai donc modifiée selon mes besoins :

    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
     
    	public static class FontSizeAction extends StyledEditorKit.StyledTextAction {
     
    		private int size;
    		private JComboBox jcb;
    		private Vector vect;
     
    		public FontSizeAction(String nm, JComboBox jcb, Vector vect) {
    			super(nm);
     
    			this.jcb = jcb;
    			this.vect = vect;
    		}
     
    		public void actionPerformed(ActionEvent event) {
    			size = Integer.parseInt((String) vect.elementAt(jcb.getSelectedIndex()));
    			SimpleAttributeSet atts = new SimpleAttributeSet();
    			StyleConstants.setFontSize(atts, size);
    			setCharacterAttributes(getEditor(event), atts, false);
    		}
    	}
    Et je l'utilise ainsi sur ma JComboBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	private JComboBox comboBoxFontSize () {
    		Vector<String> vect = new Vector<String> ();
     
    		for (int i=8; i<=48; i+=2)
    			vect.add(String.valueOf(i));
     
    		JComboBox jcb = new JComboBox (vect);
    		jcb.setAction(new FontSizeAction ("FontSize", jcb, vect));
    		jcb.setMaximumRowCount(5);
    		return jcb;
    	}
    Lorsque la méthode actionPerformed est appelée, c'est bien lorsqu'une action à été effectuée sur la JComboBox, elle va donc tout simplement rechercher la taille sélectionnée avant d'effectuer les autres changements.

    Ceci fonctionne donc également avec les autres classes.

  11. #11
    Membre actif Avatar de fremsoi
    Inscrit en
    Août 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Jolie !!

    Il me manquait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setCharacterAttributes(getEditor(event), atts, false);
    avant de tomber sur le lien que je t'ai passé.

    je ne voyais que setCharacterAttributes(int,int ..)

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

Discussions similaires

  1. Exécuter une action dans une action
    Par mattheox dans le forum Struts 1
    Réponses: 1
    Dernier message: 17/07/2008, 15h44
  2. Exécuter une action à une heure précise
    Par Rhadamanthe59 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 09/02/2006, 23h12
  3. Exécuter une action quand on ferme le navigateur
    Par Leobaillard dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/01/2006, 12h41
  4. Réponses: 1
    Dernier message: 25/10/2005, 13h25
  5. Exécuter une action à la fermeture d'une fenêtre
    Par wwave dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 28/07/2005, 15h15

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