21

I'm trying to paint a rectangle on my application in a red shade but I need to make it sort of transparent so that the component under it will still show. However I still want that some colour will still show. The method where I'm drawing is the following:

protected void paintComponent(Graphics g) {
    if (point != null) {
        int value = this.chooseColour(); // used to return how bright the red is needed

        if(value !=0){
            Color myColour = new Color(255, value,value );
            g.setColor(myColour);
            g.fillRect(point.x, point.y, this.width, this.height);
        }
        else{
            Color myColour = new Color(value, 0,0 );
            g.setColor(myColour);
            g.fillRect(point.x, point.y, this.width, this.height);
        }
    }
}

Does anyone know how I can make the red shade a bit transparent? I don't need it completely transparent though.

mKorbel
  • 109,525
  • 20
  • 134
  • 319
ict1991
  • 2,060
  • 5
  • 26
  • 34

2 Answers2

49
int alpha = 127; // 50% transparent
Color myColour = new Color(255, value, value, alpha);

See the Color constructors that take 4 arguments (of either int or float) for further details.

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
2

Try this: (but it will works for Graphics2D objeccts not for Graphics)

protected void paintComponent(Graphics2D g) {
    if (point != null) {
        int value = this.chooseColour(); // used to return how bright the red is needed
        g.setComposite(AlphaComposite.SrcOver.derive(0.8f));

        if(value !=0){
            Color myColour = new Color(255, value,value );
            g.setColor(myColour);
            g.fillRect(point.x, point.y, this.width, this.height);
        }
        else{
            Color myColour = new Color(value, 0,0 );
            g.setColor(myColour);
            g.fillRect(point.x, point.y, this.width, this.height);
        }

        g.setComposite(AlphaComposite.SrcOver); 
    }
}
j3ff
  • 5,719
  • 8
  • 38
  • 51
ecle
  • 3,952
  • 1
  • 18
  • 22