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.*;
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);
}
}
{ 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
>
> 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".
