Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #31667

Re: Animations with jTextPane

From Knute Johnson <nospam@rabbitbrush.frazmtn.com>
Newsgroups comp.lang.java.programmer
Subject Re: Animations with jTextPane
Date 2015-05-10 10:28 -0700
Organization A noiseless patient Spider
Message-ID <mio4ee$gnm$1@dont-email.me> (permalink)
References <aabd37b8-2013-4bcb-abef-c787b5c92640@googlegroups.com> <minr3t$aua$1@dont-email.me> <641b695c-da1e-47d7-95a0-554df722e433@googlegroups.com>

Show all headers | View raw


So my idea may not work so good.  I tried a little experiment where I 
used some photos from my website and create simple HTML pages and then 
loaded them one after another into the JTextPane with setPage().  I get 
the flashy too.  You can try my test code below.  The double buffering 
had no effect on the flashing.

It may be easier to put the images in their own component where you can 
control the drawing better.

I'll leave the HTML up for a couple of days.

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;

public class test3 extends JTextPane implements Runnable {
     public test3() throws IOException {
         setPage("http://lonejuniper.com/0.html");
         setDoubleBuffered(true);
         System.out.println(isDoubleBuffered());
     }

     public void run() {
         int i = 0;
         try {
             while (true) {
                 Thread.sleep(1000);
                 int n = i;
                 EventQueue.invokeLater(() -> {
                     try {
                         setPage(String.format(
                          "http://lonejuniper.com/%d.html",n));
                     } catch (IOException ioe) {
                         ioe.printStackTrace();
                     }
                 });
                 if (++i == 24)
                     i = 0;
             }
         } catch (InterruptedException ie) {
             System.out.println("program stopping");
         }
     }

     public static void main(String... args) {
         EventQueue.invokeLater(() -> {
             try {
                 JFrame f = new JFrame();
                 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                 test3 t3 = new test3();
                 f.add(t3,BorderLayout.CENTER);
                 f.pack();
                 f.setVisible(true);
                 new Thread(t3).start();
             } catch (IOException ioe) {
                 ioe.printStackTrace();
             }
         });
     }
}


On 5/10/2015 08:08, H.L@operamail.com wrote:
>
> Thank you for helping me with this. We have not tried this, but
> please note that we are continouusly changing what image is shown.
> The web cam captures a new image and this is shown on the screen, how
> could we do this updating with setDocument()?
>
>
> Den søndag den 10. maj 2015 kl. 16.49.42 UTC+2 skrev Knute Johnson:
>> On 5/10/2015 02:57, H.L@operamail.com wrote:
>>>
>>> Hey
>>>
>>> We are using OpenCV to grab images from the web cam. The idea is
>>> to show the feed in a jTextPane when the user selects to show
>>> feed, otherwise other stuff can be shown in the pane. This pane
>>> is in a JFrame with  lots of other swing objects.
>>>
>>> Basic functionality:
>>>
>>> IplImage grabbedImage = opencv_highgui.cvQueryFrame(capture);
>>> while  ((grabbedImage = opencv_highgui.cvQueryFrame(capture))
>>> !=null) jTextPane1.insertIcon(new
>>> ImageIcon(grabbedImage.getBufferedImage()));
>>>
>>>
>>> Now, we get problems because this shows multiple video frames.
>>> Obviously, it keeps inserting a new image, so they will be placed
>>> on top of each other.
>>>
>>> We tried to clear the pane and then repaint by doing like this
>>> instead:
>>>
>>> this.removeIcon(); jTextPane1.repaint();
>>> jTextPane1.insertIcon(new
>>> ImageIcon(grabbedImage.getBufferedImage()));
>>>
>>> Where removeIcon looks as can be seen below:
>>>
>>> But now, it gets flashy, the user can clearly see how the pane is
>>> cleared and then repainted, just a flashy slow change of images.
>>>
>>> So is there any way to get around both of these issues?
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> private void removeIcon() { for (int i=0;
>>> i<jTextpane1.getStyledDocument().getLength(); i++) { Element
>>> element = jTextPane1.getStyledDocument().getCharacterElement(i);
>>> AttributeSet attributeSet = element.getAttributes(); Icon icon =
>>> StyleConstants.getIcon(attributeSet); if (icon != null) { try {
>>>
>>> jTextPane1.getStyledDocument().remove(i, 1);
>>> jTextPane1pane.getStyledDocument().insertString(i, " ", new
>>> SimpleAttributeSet()); icon = null; } catch (Exception exc) {
>>> System.out.println("Exception : " + exc.getMessage()); } } } }
>>>
>>>
>>>
>>
>> Have you tried just putting the image in a StyledDocument and
>> using setDocument()?
>>
>> --
>>
>> Knute Johnson
>


-- 

Knute Johnson

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Animations with jTextPane H.L@operamail.com - 2015-05-10 02:57 -0700
  Re: Animations with jTextPane Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-05-10 07:49 -0700
    Re: Animations with jTextPane H.L@operamail.com - 2015-05-10 08:08 -0700
      Re: Animations with jTextPane Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-05-10 08:54 -0700
      Re: Animations with jTextPane Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-05-10 10:28 -0700
        Re: Animations with jTextPane H.L@operamail.com - 2015-05-10 13:28 -0700
          Re: Animations with jTextPane Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-05-10 14:17 -0700

csiph-web