2010-11-16 4 views
2

(Je réécris la question d'origine Le problème est le même.)Impression à partir de JEditorPane

L'exemple de code ci-dessus n'imprime pas l'image. Il apparaît dans la fenêtre mais pas imprimé.

public static void main(String[] args) { 

     final JEditorPane ed = new JEditorPane(
       "text/html", 
       "<p>Test<br><img src='http://www.google.es/images/logos/ps_logo2.png'></p>"); 

     JFrame f = new JFrame(); 
     f.setLayout(new BorderLayout()); 
     f.add(ed); 

     JButton b = new JButton("Print"); 
     f.add(b,BorderLayout.SOUTH); 
     b.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent ae) { 
       try { 
        ed.print(); 
       } catch (PrinterException ex) { 
        System.err.println(ex); 
       } 
      } 
     }); 

     f.pack(); 
     f.setVisible(true); 
    } 

Répondre

4

Got maintenant. Le "secret" est d'intercepter le processus de chargement d'image et d'indiquer que les images doivent être chargées de manière synchrone.

ed.setEditorKit(new HTMLEditorKit() { 

      @Override 
      public ViewFactory getViewFactory() { 
       return new HTMLFactory() { 

        @Override 
        public View create(Element elem) { 
         View view = super.create(elem); 
         if (view instanceof ImageView) { 
          ((ImageView) view).setLoadsSynchronously(true); 
         } 
         return view; 
        } 
       }; 
      } 
     }); 
+0

Merci beaucoup! – ruX

+0

Java a View, ImageView? Je le sais d'Android ... – barwnikk

0

Essayez ceci:

import java.io.IOException; 
import java.net.URL; 

import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.event.HyperlinkEvent; 
import javax.swing.event.HyperlinkListener; 
import javax.swing.text.Document; 

public class MainClass { 

    public static void main(final String args[]) { 
     final JFrame frame = new JFrame("EditorPane Example"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     try { 
      final JEditorPane editorPane = new JEditorPane("http://www.google.com"); 
      editorPane.setEditable(false); 

      final HyperlinkListener hyperlinkListener = new ActivatedHyperlinkListener(editorPane); 
      editorPane.addHyperlinkListener(hyperlinkListener); 

      final JScrollPane scrollPane = new JScrollPane(editorPane); 
      frame.add(scrollPane); 
     } 
     catch (final IOException e) { 
      System.err.println("Unable to load: " + e); 
     } 

     frame.setSize(640, 480); 
     frame.setVisible(true); 
    } 

} 

class ActivatedHyperlinkListener 
    implements HyperlinkListener { 

    JEditorPane editorPane; 

    public ActivatedHyperlinkListener(final JEditorPane editorPane) { 
     this.editorPane = editorPane; 
    } 

    public void hyperlinkUpdate(final HyperlinkEvent hyperlinkEvent) { 
     final HyperlinkEvent.EventType type = hyperlinkEvent.getEventType(); 
     final URL url = hyperlinkEvent.getURL(); 
     if (type == HyperlinkEvent.EventType.ENTERED) { 
      System.out.println("URL: " + url); 
     } 
     else if (type == HyperlinkEvent.EventType.ACTIVATED) { 
      System.out.println("Activated"); 
      final Document doc = this.editorPane.getDocument(); 
      try { 
       this.editorPane.setPage(url); 
       this.editorPane.print(); 
      } 
      catch (final Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+0

Ce n'est pas vraiment ce que je cherche. Je voulais configurer le contenu de la page par code (voir ma question éditée). – PeterMmm

Questions connexes