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

Interfaces Graphiques en Java Discussion :

Copier du HTML entre deux JEditorPane


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 26
    Par défaut Copier du HTML entre deux JEditorPane
    Bonjour,

    Situation :
    • Soit, 2 JEditorPane (A et B)
    • A contient un HTMLDocument qui représente un document HTML (physique) avec de nombreux paragraphes
    • B contient un HTMLDocument vide


    Problème :
    • J'aimerais copier des éléments (issus de HTMLDocument) de A dans B, mais je ne vois rien de convainquant dans la JavaDoc pour faire cela.
    • En plus, j'aimerais que cette copie d'élément se fasse à partir de ce qui est sélectionné par le "Caret" (dont j'obtiens les positions de début et de fin)


    Tentative de solution:
    • J'ai tenté de parser le HTMLDocument de A et de récupérer tous les éléments qui sont compris entre le début et la fin du Caret.
    • Cependant, le code résultant est "crade", ne donne pas toujours le résultat escompté.
    • De plus, une fois les éléments récupérés, il n'existe pas de méthode pour les "pusher" dans le HTMLDocument de B.


    Une autre approche ?
    Je pense que mon approche par le parsing du HTMLDocument de A n'est pas robuste et qu'il est nécessaire de se tourner vers une autre approche.

    Deux questions ;
    • Comment récupérer le code HTML lié à la selection au Caret?
    • Comment pusher ce dernier dans un autre HTMLDocument?


    D'avance merci.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En utilisant les editor kit.


    Petit exemple dégueulasse:

    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
    87
    88
    89
    package fr.sca.tests.HTMLEditorPaneTest;
     
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.IOException;
    import java.io.StringWriter;
     
    import javax.swing.AbstractAction;
    import javax.swing.JButton;
    import javax.swing.JEditorPane;
    import javax.swing.JFrame;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.html.HTMLDocument;
    import javax.swing.text.html.HTMLEditorKit;
     
    /**
     * Hello world!
     * 
     */
    public class App {
     
        private JEditorPane ePane;
        private JEditorPane emptyEPane;
        private HTMLEditorKit kit = new HTMLEditorKit();
        private HTMLEditorKit emptyKit = new HTMLEditorKit();
     
        private String htmlContent="<html><head></head><body>blabla<br><font color=\"#FFCC66\"><b>foobar</b></font><br>blabla</body></html>";
     
        public App() {
            ePane = new JEditorPane();
            //ePane.setEditorKit(new HTMLEditorKit());
            ePane.setEditable(false);
            ePane.setEditorKit(kit);
            ePane.setContentType("text/html");
            ePane.setText(htmlContent);
     
            emptyEPane = new JEditorPane();
            emptyEPane.setEditorKit(emptyKit);
            emptyEPane.setDocument(new HTMLDocument());
            emptyEPane.setEditable(false);
            emptyEPane.setContentType("text/html");
     
     
            JButton copyButton = new JButton("Copy");
            copyButton.addActionListener(new ActionListener() {
     
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println(ePane.getSelectedText());
                    System.out.println(ePane.getText());
                    StringWriter writer = new StringWriter();
                    try {
                        kit.write(writer, ePane.getDocument(), ePane.getSelectionStart(), ePane.getSelectedText().length());
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    } catch (BadLocationException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    System.out.println(writer.toString());
                    try {
                        HTMLDocument doc = (HTMLDocument) emptyEPane.getDocument();
                        kit.insertHTML(doc, 0, writer.toString(), 0, 0, null);
                    } catch (BadLocationException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }
            });
     
            JFrame f = new JFrame();
            f.add(ePane);
            f.add(emptyEPane,BorderLayout.EAST);
            f.add(copyButton,BorderLayout.WEST);
            f.setSize(800, 600);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
     
        public static void main(String[] args) {
            new App();
        }
    }

Discussions similaires

  1. [RegEx] Lecture du code html entre deux balises
    Par deubelte dans le forum Langage
    Réponses: 6
    Dernier message: 16/05/2012, 13h55
  2. Réponses: 4
    Dernier message: 13/07/2011, 14h46
  3. [XL-2010] Copier un commentaire entre deux cellules
    Par Halukard dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/03/2011, 18h33
  4. copier des données entre deux table access (vb2005)
    Par solid_sneak06 dans le forum VB.NET
    Réponses: 9
    Dernier message: 12/07/2008, 13h20
  5. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 11h01

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