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

Composants Java Discussion :

Inserer des balises html en cliquant sur un JBouton


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Par défaut Inserer des balises html en cliquant sur un JBouton
    Bonjour,

    J'aurais une question qui me trotte, je souhaiterais en clinquant sur un bouton comme "gras" que cela m'insert des balises html entre le texte ou le mot que je surlignerais dans un JTextPane et de faire une sorte d'aperçu en dessous du JTextPane du résultat final.

    Comment fait t'ont ?
    Pourriez vous me donner des exemple ou des pistes a suivre ?

    Je vous remercie.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Il me semble que JTextArea possède des méthodes comme getSelectedText ou getCursorPosition... Regardons la javadoc: Ha ben oui vu que c'est un JTextComponent

    Donc en sachant çà :

    1- Sur le clic du bouton, appelle la méthode du JTextArea.getSelectedText()
    2- Modifie ce String avec tes balise html ou autre
    3- Je te laisse deviner la suite en te servant de la javadoc que je t'ai linké. Tu devrais trouver plein de méthode pour modifier le text de ton JTextArea.

  3. #3
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Tu peut récupérer la position de début et de fin de la sélection, et ensuite tu insère tes balises avec insertString(), en commençant par la fermeture de balise sinon ton offset de fin de sélection ne correspondra plus à la situation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    JTextPane textPane = new JTextPane();
    					int start = textPane.getSelectionStart();
    					int end = textPane.getSelectionEnd();
    					StyledDocument doc = textPane.getStyledDocument();
    					try {
    		  			doc.insertString(end, "</b>", doc.getLogicalStyle(end));
    		  			doc.insertString(start, "<b>", doc.getLogicalStyle(start));
    		  		} 
    		  		catch (BadLocationException e) {
    		  			e.printStackTrace();
    		  		}
    Connait-tu les tutoriels de Sun sur Swing, ils t'aideront énormément je pense. Je te met le lien au cas où.
    http://java.sun.com/docs/books/tutor...nts/index.html

    Bonne prog sur ton éditeur de tuto

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Par défaut
    beaucoup pour vos éclairages, liens ...

    je c est pas si c est bon ce que je fait, mais sa ne fait rien du tout, je croi que c est avec les AddDocumentListener, addActionListener et tout les autres puis les actionPerformed et tout sa je suis vraiment perdu.

    pour le moment j ai fait ceci et sa fonctionne pas du tout :

    Code java : 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
    // le boutton
    JButton btnBold = (new JButton("Gras"));
    panel2.add(btnBold, d);
    btnBold.addActionListener (new EditeGras());
     
    // le texte
    JTextPane editeur = (new JTextPane());
    panel2.add(editeur, d);
    editeur.getDocument (). addDocumentListener (this); 
     
    // l ecouteur
    class EditeGras implements DocumentListener{
    	  public void insertUpdate(DocumentEvent arg0){
     
    		  int start = editeur.getSelectionStart();
    		  int end = editeur.getSelectionEnd();
    		  StyledDocument doc = editeur.getStyledDocument();
    		  try	{
    		  	doc.insertString(end, "</b>", doc.getLogicalStyle(end));
    		  	doc.insertString(start, "<b>", doc.getLogicalStyle(start));
    		  } 
    		  catch (BadLocationException ev){
    		  	ev.printStackTrace();
    		  }	
    	}	
    }

    j aurais besoin de quelque éclairage supplémentaire, car la je croi que je fait n'importe nawak, .

  5. #5
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Je pense en effet que tu t'embrouille. Le code qui t'a été donné doit être exécuté dans un ActionListener au clic sur ton bouton. Je pense que ça donnerait un truc de ce genre.
    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
     
    // le boutton
    JButton btnBold = (new JButton("Gras"));
    panel2.add(btnBold, d);
    btnBold.addActionListener (new EditeGras());
     
    // le texte
    JTextPane editeur = (new JTextPane());
    panel2.add(editeur, d);
    editeur.getDocument (). addDocumentListener (this); 
     
    // l ecouteur
    class EditeGras implements ActionListener {
    	  public void actionPerformed(ActionEvent e) {
     
    		  int start = editeur.getSelectionStart();
    		  int end = editeur.getSelectionEnd();
    		  StyledDocument doc = editeur.getStyledDocument();
    		  try	{
    		  	doc.insertString(end, "</b>", doc.getLogicalStyle(end));
    		  	doc.insertString(start, "<b>", doc.getLogicalStyle(start));
    		  } 
    		  catch (BadLocationException ev){
    		  	ev.printStackTrace();
    		  }	
    	}	
    }

  6. #6
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    En effet, guigui5931 à raison.

    ActionListener est l'interface qui permet de gérer une action (clic ou entrer ou espace je sais plus) sur les boutons notamment, mais aussi sur les items des menus et surement quelques autres...

    DocumentListener est l'interface qui gère les changement à l'intérieur du Document de ton JTextPane (ou JEditorPane aussi je crois), comme l'insertion ou la suppression de caractères.

    Pour chaque "Listener" il y a des méthodes associés qui sont appelés lorsqu'un évènement est déclanché. Par exemple pour un ActionListener, la méthode actionPerformed est appelé lorsque l'utilisateur clic (valide) sur ton bouton.
    Autre exemple, pour un DocumentListener, la méthode insertUpdate est appelé lorsque du texte est inséré dans le document.

    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
    JButton btnBold = (new JButton("Gras"));
    panel2.add(btnBold, d);
    btnBold.addActionListener (new EditeGras());
     
    // le texte
    JTextPane editeur = (new JTextPane());
    panel2.add(editeur, d);
    editeur.getDocument (). addDocumentListener (new TextListener()); 
     
    // l ecouteur
    class EditeGras implements ActionListener {
    	  public void actionPerformed(ActionEvent e) {
     	       // l'utilisateur a cliqué sur un élément associé au listener
                   if (e.getSource == btnBold) { // c'est sur mon bouton btnBold }
                   if (SwingUtilities.isLeftMouseButton(e)) { // clic souris bouton gauche  }
    	}	
    }
     
    class TextListener implements DocumentListener{
    	  public void insertUpdate(DocumentEvent arg0){
                   // du texte a été inséré dans le document du JTextPane
              }
    }

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Par défaut
    Merci pour toutes ses précisions, âpres avoir refait comme on me le dit, sa ne change rien, j'écris un mot, puis le surligne et clique sur le bouton et rien ne se produit, pas de balise qui s'ajoute autour du mot.

    Aurais je oublier quelque chose ?

    Code java : 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
    41
    42
    //Le bouton pour insérer les balises <b>blabla</b>
    JButton btnBold = (new JButton("Gras"));
    btnBold.addActionListener (new EditeGras());
     
    //Le document texte
    JTextPane editeur = (new JTextPane());
    editeur.getDocument().addDocumentListener (new TextListener()); 
     
    //Les écouteurs
    class EditeGras implements ActionListener {
    	  public void actionPerformed(ActionEvent e) {
     
    		  Object source = e.getSource();  
     
    		if (source == btnBold) 	
    		{ 	
    				int start = editeur.getSelectionStart();
    				int end = editeur.getSelectionEnd();
    					StyledDocument _doc = editeur.getStyledDocument();
    			try
    			{
    				_doc.insertString(end, "</b>", _doc.getLogicalStyle(end));
    				_doc.insertString(start, "<b>", _doc.getLogicalStyle(start));
    			} 
    			catch (BadLocationException ev)
    			{
    				ev.printStackTrace();
    			}	
    		} 
    	}	
    }
    class TextListener implements DocumentListener{	
    	public void insertUpdate(DocumentEvent arg0){
    		// que met t on ici ?
            }
    	public void changedUpdate(DocumentEvent arg0) {
    		// que met t on ici ?
    	}
    	public void removeUpdate(DocumentEvent arg0) {	
    	       // que met t on ici ?
    	}
    }

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    T'as essayé de debuggé en mettant
    System.out.println(_doc.getLogicalStyle(end));
    dans ton code qui rajoute le String?

    T'es sur que c'est une bonne chose de faire un getStyledDocument? Ce serais pas un simple editeur.replaceSelection plutôt?

  9. #9
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Je ne sais pas pourquoi ça ne marche pas. Il faudrait que tu mette en post le code complet pour que l'on comprenne. A moins que tu es un message d'erreur (en rouge).

    Sinon voici un exemple d'implémentation qui fonctionne :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    import java.awt.Color;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextPane;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.StyledDocument;
     
    public class Editeur {
     
    	private JButton btnBold = (new JButton("Gras"));
    	private JTextPane editeur = new JTextPane();
     
    	public static void main(String[] args) {
    		new Editeur();
    	}
     
    	public Editeur() {
    		btnBold.addActionListener (new EditeGrasListener());
    		editeur.getDocument().addDocumentListener(new MonDocumentListener()); 
     
    		JPanel p = new JPanel(new GridBagLayout());
    		p.setOpaque(true);
    		p.setBackground(Color.BLUE);
    		GridBagConstraints cons = new GridBagConstraints();
    		cons.gridx = 0;
    		cons.gridy = 0;
    		cons.fill = GridBagConstraints.BOTH;
    		cons.weightx = 1.0;
    		cons.weighty = 1.0;
    		p.add(editeur, cons);
    		cons.gridx = 0;
    		cons.gridy = 1;
    		cons.anchor = GridBagConstraints.FIRST_LINE_START;
    		cons.fill = GridBagConstraints.NONE;
    		cons.weightx = 1.0;
    		cons.weighty = 0.0;
    		p.add(btnBold, cons);
     
    		final JFrame frame = new JFrame();
    		frame.setSize(600, 400);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setContentPane(p);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    	}
     
    	private class EditeGrasListener implements ActionListener {
    		  public void actionPerformed(ActionEvent e) {
    			if (e.getSource() == btnBold) { 	
    				int start = editeur.getSelectionStart();
    				int end = editeur.getSelectionEnd();
    				StyledDocument _doc = editeur.getStyledDocument();
    				try {
    					_doc.insertString(end, "</b>", _doc.getLogicalStyle(end));
    					_doc.insertString(start, "<b>", _doc.getLogicalStyle(start));
    				} 
    				catch (BadLocationException ev) {
    					ev.printStackTrace();
    				}	
    			} 
    		}	
    	}
     
    	private class MonDocumentListener implements DocumentListener {	
    		public void insertUpdate(DocumentEvent arg0){
    			// que met t on ici ?
    			// du code qui gère quelque chose à l'insertion de caractère !
    	    }
    		public void changedUpdate(DocumentEvent arg0) {
    			// que met t on ici ?
    			// du code qui gère quelque chose quand un changement du texte survient !
    		}
    		public void removeUpdate(DocumentEvent arg0) {	
    		    // que met t on ici ?
    			// du code qui gère quelque chose à la suppression de caractère !
    		}
    	}
     
    }

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Par défaut
    ton code fonctionne parfaitement bien Visiwi, je crois que mon problème est comme un débutant que je suis, d avoir tout coder mon logiciel dans une seule classe, sa devient ingérable et je le savais.

    je ne c est pas encore créer plusieurs page, enfin une classe par page et que tout soi lier.

    Visiwi, si sa ne te dérange pas trop que je t envoi ma page par MP(je te le demande avant), et si tu pouvez m expliquer comment a partir de mon code je puisse tout séparer en plusieurs classe. Je te remercie énormément pour ton coup de main.

    je crois que avant que je continu mon projet, il faut que je sépare tout sa, mais je c est pas comment faire.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    C'est très simple :

    Tu crée un fichier .java par class en vérifiant qu'il porte le même nom.

    MaClass.java

    public class MaClass... {
    }

    Les class qui utilise MaClass doivent contenir un import le.package.ouK.tamis.taClass.MaClass et ensuite tu utilises new MaClass dedans.

    Mais là je t'invite à te trouver un bouquin de java pour débutant. C'est pas du VisualBasic et il ne suffit d'avoir un bel outil pour faire un logiciel qui fonctionne. Si t'as pas la base, c'est mort.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Par défaut
    Merci pour tes petites précisions MichaelBW, j ai bien plusieurs livre sur le java, mais en faite j ai du mal a rentrer la logique dans ma tête
    passer du PHP au java c est pas si simple du coup.
    Les bases vont venir, il y a encore quelque zone d ombre comme celle que je vient de préciser, mais je vais y arriver avec le temps, la sa fait que 1 mois que je mis suis mis.

    Je vais réessayer avec ce que tu vient de me préciser, j avais oublier les packages pour lier les pages.

    Merci encore

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Le java est loin d'être simple, surtout les interfaces graphiques, donc je te souhaite bon courage

  14. #14
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Bien sur, envoi un MP, pas d'blem !

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Par défaut
    Merci pour ton bon courage MichaelBW, j ai ai bien besoin.

    Merci Visiwi, je t ai donc envoyer tout sa par MP.

    Je vais considérer ce poste comme résolu vue que je part sur séparer mon programme en plusieurs classe, j ai compris comment cela fonctionner l insertion de balise xHTML.

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

Discussions similaires

  1. inserer des balises html dans une page
    Par owenho dans le forum WordPress
    Réponses: 1
    Dernier message: 23/01/2014, 17h14
  2. Réponses: 4
    Dernier message: 30/05/2011, 13h14
  3. Inserer des balise html dans une zone de text du rapport
    Par jacky2677 dans le forum iReport
    Réponses: 1
    Dernier message: 12/08/2008, 13h08
  4. [DOM] utiliser les fonctions Node sur des balises html
    Par durthu dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/10/2007, 15h42
  5. faire passer des balise html d'un XML vers un XLS
    Par shaftJackson dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 26/04/2006, 17h07

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