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".