I'm working on an XSL:FO template editor and I want to do a realtime preview of what it will look like. I just want to render it to a component and then refresh it quickly. I have been unsuccessful at making anything render directly from a bytestream in memory, so I'm writing it out to a temp file and then reading it in with FOInputHandler inputHandler = new FOInputHandler(new java.io.File("/tmp/foo.foo")); which seems to work. Eventually I want to avoid the disk altogether and just do it from memory, but I'll take what I can get for now.
My main problem is that I can't get the window to refresh. In the code below 'setup()' is called once and then 'refresh()' is called each time the document is updated. Originally I had the Renderer allocated in the setup and reused, but that seemed never to update after the first render, so now I allocate a new Renderer each time. What is the appropriate way to do this? What objects can I reuse (Renderer? Driver?) and what do I have to reallocate each time. Also, what method should I call on the JFrame to force it to refresh. Invalidate doesn't always seem to do it. Thanks so much for your help. - Joshua public class FOViewer { public static String TRANSLATION_PATH = "/org/apache/fop/viewer/resources/"; JLabel previewImageLabel; JFrame frame; public void setup() { try { // create a new renderer frame = new JFrame("fooboo"); previewImageLabel = new JLabel(); frame.getContentPane().add(previewImageLabel); frame.validate(); frame.setVisible(true); frame.setSize(400,400); // renderer.setProgressListener(frame); } catch (Exception e) { u.p(e); } } public void refresh(InputStream in) { try { // set up the language stuff String language = null; if (language == null) { try { language = System.getProperty("user.language"); } catch(SecurityException se) { // if this is running in a secure place } } Translator resource = getResourceBundle(TRANSLATION_PATH + "resources." + language); UserMessage.setTranslator(getResourceBundle(TRANSLATION_PATH + "messages." + language)); resource.setMissingEmphasized(false); AWTRenderer renderer; renderer = new AWTRenderer(resource); renderer.setComponent(frame); // old stuff FOInputHandler inputHandler = new FOInputHandler(new java.io.File("/tmp/foo.foo")); XMLReader reader2 = inputHandler.getParser(); Driver driver = new Driver(); driver.setRenderer(renderer); driver.render(reader2, inputHandler.getInputSource()); // old // driver.render(reader, new InputSource(in)); // new BufferedImage pageImage = renderer.getLastRenderedPage(); // frame.getContentPane().remove(previewImageLabel); // frame.invalidate(); // frame.repaint(); // previewImageLabel = new JLabel(); previewImageLabel.setIcon(new ImageIcon(pageImage)); // frame.getContentPane().add(previewImageLabel); previewImageLabel.invalidate(); frame.invalidate(); previewImageLabel.repaint(); frame.repaint(); u.p("done 1"); } catch (Exception e) { u.p(e); } } public static SecureResourceBundle getResourceBundle(String path) { InputStream in = null; try { FOViewer foo = new FOViewer(); URL url = foo.getClass().getResource(path); in = url.openStream(); } catch (Exception ex) { u.p("Can't find URL to: <" + path + "> " + ex.getMessage()); u.p(ex); } return new SecureResourceBundle(in); } } - Joshua ... but I still haven't found what I'm looking for. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]