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.
Thanks,
Cliff
----- 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".