précédent | suivant | table des matières
|
Application de démonstration.
La classe JEditorPane permet d'éditer des contenus de natures différentes. Ce composant utilise une implémentation de EditorKit pour réaliser ceci. Par défaut trois types de contenu sont connus :
Pour charger du texte dans le JEditorPane, on peut utiliser une des méthodes suivantes :
Un navigateur WEB avec JEditorPane
On peut créer un vavigateur WEB avec un JEditorPane en le faisant réagir aux clics sur le hyperliens. Le JEditorPane doit être non éditable.
javax.swing.event.HyperlinkListener monListeneur; monListeneur = new javax.swing.event.HyperlinkListener() { public void hyperlinkUpdate(javax.swing.event.HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { JEditorPane pane = (JEditorPane)e.getSource(); try { pane.setPage(e.getURL()); }catch (IOException ex) { pane.setText("ERREUR : "+ex.getMessage()); } } } };
Puis, on ajoute le listeneur au JEditorPane :
jEditorPane.addHyperlinkListener(monListeneur);
Informations sur une page HTML
Une page HTML est représentée dans un modèle de type HTMLDocument.
//Le titre de la page (String)monDocHTML.getProperty(Document.TitleProperty); //Les liens de la page HTMLDocument.Iterator it = monDocHTML.getIterator(HTML.Tag.A); while(it.isValid()){ SimpleAttributeSet s = (SimpleAttributeSet)it.getAttributes(); String lien = (String)s.getAttribute(HTML.Attribute.HREF); int deb = it.getStartOffset(); int fin = it.getEndOffset(); String v = monDocHTML.getText(deb, fin-deb+1); // v : le texte, lien : le lien it.next(); } // les textes en gras it = monDocHTML.getIterator(HTML.Tag.B); while(it.isValid()){ int deb = it.getStartOffset(); int fin = it.getEndOffset(); String v = monDocHTML.getText(deb, fin-deb+1); it.next(); } // les textes en italique it = monDocHTML.getIterator(HTML.Tag.I); while(it.isValid()){ int deb = it.getStartOffset(); int fin = it.getEndOffset(); String v = monDocHTML.getText(deb, fin-deb+1); it.next(); } // les images it = monDocHTML.getIterator(HTML.Tag.IMG); while(it.isValid()){ RunElement s = (RunElement)it.getAttributes(); String source = (String)s.getAttribute(HTML.Attribute.SRC); String alt = (String)s.getAttribute(HTML.Attribute.ALT); //le fichier : source, et le texte alternatif : alt it.next(); }
Un petit éditeur RTF.
La classe suivante fournit un éditeur de texte RTF. quand l'utilisateur relacle le bouton droit de la souris, après une sélection de texte, une boîte de dialogue lui permet de configurer le texte sélectionné.
public class EditeurRTF extends JEditorPane { private DefaultStyledDocument monDocRTF; private RTFEditorKit rtf; public EditeurRTF() { super(); initialize(); } private void initialize() { setContentType("text/rtf"); rtf = (RTFEditorKit) EditeurRTF.this.getEditorKit(); monDocRTF = (DefaultStyledDocument) getDocument(); // définition du style par défaut Style def = monDocRTF.getStyle("default"); SimpleAttributeSet asd = new SimpleAttributeSet(); StyleConstants.setFontFamily(asd, this.getFont().getFamily()); StyleConstants.setFontSize(asd, this.getFont().getSize()); StyleConstants.setBackground(asd, this.getBackground()); StyleConstants.setForeground(asd, this.getForeground()); StyleConstants.setAlignment(asd, 0); def.addAttributes(asd); monDocRTF.setParagraphAttributes(0, 1, asd, true); this.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseReleased(java.awt.event.MouseEvent e) { int d = EditeurRTF.this.getSelectionStart(); int f = EditeurRTF.this.getSelectionEnd(); if(d==f)return; // pas de texte sélectionné ! DialogueRTF drtf = new DialogueRTF(null); drtf.setLocation(e.getXOnScreen(), e.getYOnScreen()); Element el = rtf.getCharacterAttributeRun(); AttributeSet as = el.getAttributes(); int ta = ((Integer)as.getAttribute(StyleConstants.FontSize)).intValue(); int alignement = ((Integer)as.getAttribute(StyleConstants.Alignment)).intValue(); int x = Font.PLAIN; Object o = as.getAttribute(StyleConstants.Italic); if(o!=null && ((Boolean)o).booleanValue())x = Font.ITALIC; o = as.getAttribute(StyleConstants.Bold); if(o!=null && ((Boolean)o).booleanValue())x = x | Font.BOLD; Font fo = new Font((String)as.getAttribute(StyleConstants.FontFamily), x, ta); Color couleurTexte = (Color)as.getAttribute(StyleConstants.Foreground); Color couleurFond = (Color)as.getAttribute(StyleConstants.Background); if (couleurFond==null)couleurFond = EditeurRTF.this.getBackground(); // dialogue de configuration du texte sélectionné drtf.set(fo, couleurTexte, couleurFond, alignement); drtf.setVisible(true); if(drtf.isOK()){ String t = EditeurRTF.this.getSelectedText(); SimpleAttributeSet as1 = new SimpleAttributeSet(); StyleConstants.setFontFamily(as1, drtf.getFonte().getFamily()); StyleConstants.setFontSize(as1, drtf.getFonte().getSize()); StyleConstants.setItalic(as1, drtf.getFonte().isItalic()); StyleConstants.setBold(as1, drtf.getFonte().isBold()); StyleConstants.setBackground(as1, drtf.getCouleurFond()); StyleConstants.setForeground(as1, drtf.getCouleurTexte()); SimpleAttributeSet asp = new SimpleAttributeSet(); StyleConstants.setAlignment(asp, drtf.getAlignement()); try { monDocRTF.replace(d, f-d, t, as1); if(alignement!= drtf.getAlignement()) monDocRTF.setParagraphAttributes(d, f-d, asp, false); } catch (BadLocationException e1) { //... } } } }); } }