From: Elliot on 19 Feb 2010 13:15 Hi I currently use a lot of code to parse and print a multi-page document with a lot of Graphics2D objects. I need to display the same document in a JTextPane. I would like to create a new class that could be used by either the repaginate() and print() routines for the print job or by a new paint() routine for the Swing components. I would like to add the Graphics2D objects to a DefaultStyledDocument and then add the styled document to a JTextPane. I think this would be the fastest way to draw everything. First, is it possible to add paint graphic 2d on a StyledDocument? Second, I do not want to duplicate any of the existing complex parsing code for the print job. I need to figure out how to create a new class containing this logic that could be used by either the current repaginate() and print() methods or new paint() method. Any ideas would be really welcome. Thanks Elliot
From: John B. Matthews on 19 Feb 2010 13:45 In article <96cfec27-1e60-4075-ab72-16cd8e61b22d(a)y26g2000vbb.googlegroups.com>, Elliot <eselick(a)gmail.com> wrote: > I currently use a lot of code to parse and print a multi-page > document with a lot of Graphics2D objects. I need to display the same > document in a JTextPane. I would like to create a new class that > could be used by either the repaginate() and print() routines for the > print job or by a new paint() routine for the Swing components. > > I would like to add the Graphics2D objects to a DefaultStyledDocument > and then add the styled document to a JTextPane. I think this would > be the fastest way to draw everything. First, is it possible to add > paint graphic 2d on a StyledDocument? > > Second, I do not want to duplicate any of the existing complex > parsing code for the print job. I need to figure out how to create a > new class containing this logic that could be used by either the > current repaginate() and print() methods or new paint() method. > > Any ideas would be really welcome. If a Graphics2D instance is associated with a Component you can use the insertComponent() method of JTextPane: <http://java.sun.com/javase/6/docs/api/javax/swing/JTextPane.html #insertComponent(java.awt.Component)> If it's a BufferedImage, you can wrap it in a JComponent and override the paintComponent() method to call drawImage(). -- John B. Matthews trashgod at gmail dot com <http://sites.google.com/site/drjohnbmatthews>
From: Knute Johnson on 19 Feb 2010 14:17 On 2/19/2010 10:15 AM, Elliot wrote: > Hi > I currently use a lot of code to parse and print a multi-page document > with a lot of Graphics2D objects. I need to display the same document > in a JTextPane. I would like to create a new class that could be used > by either the repaginate() and print() routines for the print job or > by a new paint() routine for the Swing components. > > I would like to add the Graphics2D objects to a DefaultStyledDocument > and then add the styled document to a JTextPane. I think this would be > the fastest way to draw everything. > First, is it possible to add paint graphic 2d on a StyledDocument? > > Second, I do not want to duplicate any of the existing complex parsing > code for the print job. I need to figure out how to create a new class > containing this logic that could be used by either the current > repaginate() and print() methods or new paint() method. > > Any ideas would be really welcome. > > Thanks > > Elliot If you are already drawing it to print, just draw it on a JComponent of some variety. I do that all the time for print preview only in reverse. -- Knute Johnson email s/nospam/knute2010/
From: Daniel Pitts on 19 Feb 2010 17:56 On 2/19/2010 10:45 AM, John B. Matthews wrote: > In article > <96cfec27-1e60-4075-ab72-16cd8e61b22d(a)y26g2000vbb.googlegroups.com>, > Elliot<eselick(a)gmail.com> wrote: > >> I currently use a lot of code to parse and print a multi-page >> document with a lot of Graphics2D objects. I need to display the same >> document in a JTextPane. I would like to create a new class that >> could be used by either the repaginate() and print() routines for the >> print job or by a new paint() routine for the Swing components. >> >> I would like to add the Graphics2D objects to a DefaultStyledDocument >> and then add the styled document to a JTextPane. I think this would >> be the fastest way to draw everything. First, is it possible to add >> paint graphic 2d on a StyledDocument? >> >> Second, I do not want to duplicate any of the existing complex >> parsing code for the print job. I need to figure out how to create a >> new class containing this logic that could be used by either the >> current repaginate() and print() methods or new paint() method. >> >> Any ideas would be really welcome. > > If a Graphics2D instance is associated with a Component you can use the > insertComponent() method of JTextPane: > > <http://java.sun.com/javase/6/docs/api/javax/swing/JTextPane.html > #insertComponent(java.awt.Component)> > > If it's a BufferedImage, you can wrap it in a JComponent and override > the paintComponent() method to call drawImage(). Or use a JLabel with an ImageIcon, instead of writing custom paintComponent :-) -- Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>
From: John B. Matthews on 20 Feb 2010 14:18
In article <CGEfn.834$sx5.509(a)newsfe16.iad>, Daniel Pitts <newsgroup.spamfilter(a)virtualinfinity.net> wrote: > On 2/19/2010 10:45 AM, John B. Matthews wrote: > > In article > > <96cfec27-1e60-4075-ab72-16cd8e61b22d(a)y26g2000vbb.googlegroups.com>, > > Elliot<eselick(a)gmail.com> wrote: > > > >> I currently use a lot of code to parse and print a multi-page > >> document with a lot of Graphics2D objects. I need to display the > >> same document in a JTextPane. I would like to create a new class > >> that could be used by either the repaginate() and print() routines > >> for the print job or by a new paint() routine for the Swing > >> components. > >> > >> I would like to add the Graphics2D objects to a > >> DefaultStyledDocument and then add the styled document to a > >> JTextPane. I think this would be the fastest way to draw > >> everything. First, is it possible to add paint graphic 2d on a > >> StyledDocument? > >> > >> Second, I do not want to duplicate any of the existing complex > >> parsing code for the print job. I need to figure out how to create > >> a new class containing this logic that could be used by either the > >> current repaginate() and print() methods or new paint() method. > >> > >> Any ideas would be really welcome. > > > > If a Graphics2D instance is associated with a Component you can use > > the insertComponent() method of JTextPane: > > > > <http://java.sun.com/javase/6/docs/api/javax/swing/JTextPane.html #insertComponent(java.awt.Component)> > > > > If it's a BufferedImage, you can wrap it in a JComponent and > > override the paintComponent() method to call drawImage(). > > Or use a JLabel with an ImageIcon, instead of writing custom > paintComponent :-) Even better! Somewhere between the two approaches, I like to implement the Icon interface. As an example, here's a handy component for seeing the effect of various layout managers: /** * A label having an icon showing the icon's center. * @author John B. Matthews */ private static class SizeLabel extends JLabel implements Icon { private static final Font FONT = new Font("Serif", Font.PLAIN, 16); private static final int WIDE = 72; private static final int HIGH = 24; public SizeLabel() { this.setHorizontalAlignment(JLabel.CENTER); this.setVerticalAlignment(JLabel.CENTER); this.setHorizontalTextPosition(JLabel.CENTER); this.setVerticalTextPosition(JLabel.TOP); this.setIconTextGap(0); this.setFont(FONT); this.setPreferredSize( new Dimension(4 * WIDE / 3, 8 * HIGH / 3)); this.setMinimumSize(this.getPreferredSize()); this.setIcon(this); } public void paintIcon(Component c, Graphics g, int x, int y) { g.setColor(Color.darkGray); g.fillRect(x, y, WIDE, HIGH); int x2 = x + WIDE / 2; int y2 = y + HIGH / 2; String s = "(" + x2 + ", " + y2 + ")"; int w2 = g.getFontMetrics().stringWidth(s) / 2; int h2 = g.getFontMetrics().getDescent() + 1; g.setColor(Color.white); g.drawString(s, x2 - w2, y2 + h2); } public int getIconWidth() { return WIDE; } public int getIconHeight() { return HIGH; } } -- John B. Matthews trashgod at gmail dot com <http://sites.google.com/site/drjohnbmatthews> |