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


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

Re: Animations with jTextPane

Path csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail
From Knute Johnson <nospam@rabbitbrush.frazmtn.com>
Newsgroups comp.lang.java.programmer
Subject Re: Animations with jTextPane
Date Sun, 10 May 2015 14:17:59 -0700
Organization A noiseless patient Spider
Lines 188
Message-ID <miohs6$7sr$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> <mio4ee$gnm$1@dont-email.me> <79d8c03d-890f-4c39-91c7-9a16e435447c@googlegroups.com>
Mime-Version 1.0
Content-Type text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding 8bit
Injection-Date Sun, 10 May 2015 21:16:54 +0000 (UTC)
Injection-Info mx02.eternal-september.org; posting-host="9b3fcb0d22708969e4dc99e7aa0ef1f9"; logging-data="8091"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+oLv5VmdzstkKWNNxYv/NI"
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0
In-Reply-To <79d8c03d-890f-4c39-91c7-9a16e435447c@googlegroups.com>
Cancel-Lock sha1:9uL+8SCBx44qyryB1RIgz624VfQ=
Xref csiph.com comp.lang.java.programmer:31669

Show key headers only | View raw


On 5/10/2015 13:28, H.L@operamail.com wrote:
> Den søndag den 10. maj 2015 kl. 19.28.59 UTC+2 skrev Knute Johnson:
>> 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
>
> Yes, this is quite exactly what we are experiencing. So are you
> suggesting that we should use something else rather than a
> JTextPane?

If you just need to display an image in a Component, yes.  It's not 
clear to me what else you have in that JTextPane besides your icon.

The JTextPane appears to be clearing itself and then drawing the image. 
  In a JComponent, you can just draw the image.  No white flash as the 
background is drawn with the example below.

I guess I wasn't seeing the flash in my program that I mentioned because 
the background is white and their wasn't much being drawn.

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import javax.imageio.*;
import javax.swing.*;

public class test4 extends JPanel implements Runnable {
     volatile BufferedImage image;

     public test4() {
         setPreferredSize(new Dimension(330,180));
     }

     public void run() {
         int i = 0;
         while (true) {
             try {
                 if (i > 23)
                     i = 0;
                 URL url = new URL(
                  String.format("http://lonejuniper.com/%d.jpg",i++));
                 image = ImageIO.read(url);
                 repaint();
                 Thread.sleep(1000);
             } catch (IOException|InterruptedException ex) {
                 ex.printStackTrace();
             }
         }
     }

     public void paintComponent(Graphics g) {
         if (image != null)
             g.drawImage(image,0,0,330,180,null);
     }

     public static void main(String... args) {
         EventQueue.invokeLater(() -> {
             JFrame f = new JFrame();
             f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             test4 t4 = new test4();
             f.add(t4,BorderLayout.CENTER);
             f.pack();
             f.setVisible(true);
             new Thread(t4).start();
         });
     }
}


-- 

Knute Johnson

Back to comp.lang.java.programmer | Previous | Next — Previous 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