Perfect.  Thanks Scott!

----- Original Message -----
From: "Scott Violet" <[EMAIL PROTECTED]>
To: "Clifford Lyon" <[EMAIL PROTECTED]>
Cc: "Scott Violet" <[EMAIL PROTECTED]>;
<[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>;
<[EMAIL PROTECTED]>
Sent: Tuesday, August 17, 2004 4:52 PM
Subject: Re: [EMAIL PROTECTED]: Re: [JAVA2D] Transparent internal
frames]


> On Mon, Aug 16, 2004 at 10:36:07PM -0400, Clifford Lyon wrote:
> > Hi Scott - Right on.  Only thing I had to do was cast the Containter to
a
> > JComponent to get to the setOpaque method, worked like a charm.
> >
> > Is there any way to get a clean repaint with using a background color
with
> > alpha < 255?  That's the real objective - if you have seen a TIVo menu,
> > that's the effect I'm going for, more or less.
>
> Nothing out of the box:(  Unfortunately JComponent's meaning of opaque
> is overloaded: it means whether or not the background is paintined in
> a completely opaque color and whether or not the background should be
> painted.  As you are asking, these don't always go hand in hand.  What
> you can do is set opaque to false and override paintComponent and fill
> in the background color, eg:
>
> public class MyPanel extends JPanel {
>     protected void paintComponent(Graphics g) {
>       g.setColor(getBackground());
>       g.fillRect(0, 0, getWidth(), getHeight());
>       super.paintComponent(g);
>     }
> }
>
> We have talked about introducing a separate property that indicates
> whether or not the background is painted, but haven't yet added it.
>
> -Scott
>
> > ----- Original Message -----
> > From: "Scott Violet" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Cc: "Scott Violet" <[EMAIL PROTECTED]>;
> > <[EMAIL PROTECTED]>
> > Sent: Monday, August 16, 2004 11:01 AM
> > Subject: Re: [EMAIL PROTECTED]: Re: [JAVA2D] Transparent internal
> > frames]
> >
> >
> > > Sure thing.
> > > Hi Cliff.
> > > The problem lies with setting the background color to a transparent
> > > color.  JComponent offers two very closely related properties: opaque
> > > and background.  The opaque property is used an optimization in
> > > Swing's painting infrastructure to know where painting needs to
> > > originate from.  If opaque is true, a JComponent must fill in it's
> > > background in an opaque color, otherwise painting artifacts will
> > > result.  The reason your code isn't working is because the content
> > > pane of the internal frame inherits the background color of the
> > > internal frame, a translucent color in your case, but the content
> > > panes opaque property is true.  So, to get this code to work invoke
> > > getContentPane().setOpaque(false) and no artifacts will result:)
> > > Additionally you don't need to set the background color to translucent
> > > here, if opaque is false JComponent's generally don't fill in their
> > > background.
> > >
> > > -Scott
> > >
> > > On Sat, Aug 14, 2004 at 03:43:26PM -0700, Dmitri Trembovetski wrote:
> > > >
> > > >   Hi Scott,
> > > >
> > > >   could you please take a look ?
> > > >
> > > >   Dmitri
> > > >
> > > >
> > > > ----- Forwarded message from Clifford Lyon
<[EMAIL PROTECTED]> -----
> > > >
> > > > From: Clifford Lyon <[EMAIL PROTECTED]>
> > > > Date: Sat, 14 Aug 2004 17:11:13 -0400
> > > > To: [EMAIL PROTECTED]
> > > > Subject: Re: [JAVA2D] Transparent internal frames
> > > > Reply-to: Clifford Lyon <[EMAIL PROTECTED]>
> > > > X-Mailer: Microsoft Outlook Express 6.00.2800.1409
> > > >
> > > > It seems to me when clicking on the slider, the JInternalFrame is
> > repainted from the place where the contentPane starts, instead of where
the
> > menu bar starts.
> > > >   ----- Original Message -----
> > > >   From: Clifford Lyon
> > > >   To: [EMAIL PROTECTED]
> > > >   Sent: Saturday, August 14, 2004 3:46 PM
> > > >   Subject: Re: [JAVA2D] Transparent internal frames
> > > >
> > > >
> > > >   Here is a short piece of code that demonstrates the effect.
First, if
> > I click on the slider, the Internal Frame gets repainted on its own
content
> > frame.  Then, if I move the slider, I see knob artifacts.  The latter is
> > easy to fix by repainting in the actionListener; the former I have not
> > figured out, but I'm probably doing something wrong with the layered
pane.
> > > >
> > > >   Thanks - also feel free to steer me to another interest group.
> > > >
> > > >   Cliff
> > > >
> > > >   /*****************************/
> > > >
> > > >   import java.awt.*;
> > > >   import java.awt.image.BufferedImage;
> > > >   import java.io.File;
> > > >   import javax.imageio.ImageIO;
> > > >   import javax.swing.*;
> > > >
> > > >   public class TestJFrame
> > > >   {   public static void main (String args[])
> > > >       {   try
> > > >           {   JFrame frame = new JFrame();
> > > >               BufferedImage image = ImageIO.read(new File(args[0]));
> > > >               ImageScreen imageScreen = new ImageScreen(image);
> > > >               SliderFrame sliderFrame = new SliderFrame();
> > > >
> > sliderFrame.setBounds(0,0,image.getWidth()/2,image.getHeight()/2);
> > > >               sliderFrame.setVisible(true);
> > > >               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
> > > >               frame.getContentPane().add(imageScreen);
> > > >
> > frame.getLayeredPane().add(sliderFrame,JLayeredPane.DEFAULT_LAYER);
> > > >               frame.pack();
> > > >               frame.setSize(image.getWidth(),image.getHeight());
> > > >               frame.show();
> > > >           } catch ( Exception e )
> > > >           {    e.printStackTrace();
> > > >           }
> > > >       }
> > > >   }
> > > >   class ImageScreen extends JComponent
> > > >   {   BufferedImage image;
> > > >       public ImageScreen(BufferedImage bi){
> > > >           super();
> > > >           image = bi;
> > > >       }
> > > >       public void paintComponent(Graphics g){
> > > >           Rectangle r = this.getBounds();
> > > >           if (image != null )
> > > >               g.drawImage(image,0,0,r.width,r.height,this);
> > > >       }
> > > >   }
> > > >   class SliderFrame extends JInternalFrame
> > > >   {   JSlider slider = new JSlider();
> > > >       public SliderFrame()
> > > >       {   super();
> > > >           slider.setOpaque(false);
> > > >           this.setOpaque(false);
> > > >           slider.setBackground(new Color(0,0,0,0));
> > > >           this.setBackground(new Color(0,0,0,0));
> > > >           this.getContentPane().add(slider);
> > > >       }
> > > >   }
> > > >
> > > >   ----- Original Message -----
> > > >   From: "Chet Haase" <[EMAIL PROTECTED]>
> > > >   To: <[EMAIL PROTECTED]>
> > > >   Sent: Friday, August 13, 2004 9:56 AM
> > > >   Subject: Re: [JAVA2D] Transparent internal frames
> > > >
> > > >
> > > >   > Hi,
> > > >   >
> > > >   > It's pretty difficult to know from your quick description where
the
> > > >   > problem would lie.
> > > >   > There is no inherent problem with using transparent internal
frames
> > in
> > > >   > Swing, but
> > > >   > you need to make sure to set and use the opacity property of the
> > > >   > component(s)
> > > >   > appropriately and to do the right thing during paintComponent().
> > Other than
> > > >   > that very high-level suggestion, it's hard to know what else to
say.
> > > >   > There could
> > > >   > be a bug lurking here in how we implement scrolling
(devCopyArea) on
> > > >   > translucent
> > > >   > components, but a test case would sure help...
> > > >   >
> > > >   > Chet.
> > > >   >
> > > >   >
> > > >   > Clifford Lyon wrote:
> > > >   >
> > > >   > > Hello list, I have a Java 2D application where I show an
image,
> > and
> > > >   > > then display a transparent internal frame over the image that
> > exposes
> > > >   > > controls to the user for adjusting parameters.  Everything
works
> > fine,
> > > >   > > except when moving the knob on my JSlider, the internal frame
> > > >   > > background fills with random stuff.  Any way around that?
Custom
> > > >   > > painting?
> > > >   > >
> > > >   > > tia
> > > >   > >
> >
===========================================================================
> > > >   > > To unsubscribe, send email to [EMAIL PROTECTED] and
include in
> > the
> > > >   > > body of the message "signoff JAVA2D-INTEREST". For general
help,
> > send
> > > >   > > email to [EMAIL PROTECTED] and include in the body of the
> > message
> > > >   > > "help".
> > > >   >
> > > >   >
> >
===========================================================================
> > > >   > To unsubscribe, send email to [EMAIL PROTECTED] and include
in
> > the body
> > > >   > of the message "signoff JAVA2D-INTEREST".  For general help,
send
> > email to
> > > >   > [EMAIL PROTECTED] and include in the body of the message
"help".
> >
===========================================================================
> > To unsubscribe, send email to [EMAIL PROTECTED] and include in the
body
> > of the message "signoff JAVA2D-INTEREST". For general help, send email
to
> > [EMAIL PROTECTED] and include in the body of the message "help".
> > > >
> > > >
> >
===========================================================================
> > > > To unsubscribe, send email to [EMAIL PROTECTED] and include in
the
> > body
> > > > of the message "signoff JAVA2D-INTEREST".  For general help, send
email
> > to
> > > > [EMAIL PROTECTED] and include in the body of the message "help".
> > > >
> > > > ----- End forwarded message -----
> >

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to