Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inner-Transparent Selection Window in Java using GlassPane

I am trying to achieve the following

http://www.qksnap.com/i/3hunq/4ld0v/screenshot.png

I am currently able to draw rectangles successfully on a semi-transparent glasspane background using the following code:

    protected void paintComponent(Graphics g) {
          Graphics2D g2 = (Graphics2D) g;
          g.setColor(Color.black); // black background
          g.fillRect(0, 0, frame.getWidth(), frame.getHeight());
          g2.setColor(Color.GREEN.darker());
          if (getRect() != null && isDrawing()) {
            g2.draw(getRect()); // draw our rectangle (simple Rectangle class)
          }
         g2.dispose();
}

Which works great, however, I would love to have the area within the rectangle be completely transparent while the outside was still darken much like the screenshot above.

Any ideas?

like image 483
Patrick M Avatar asked Dec 26 '22 19:12

Patrick M


1 Answers

..have the area within the rectangle be completely transparent while the outside was still darken much like the screenshot above.

  • Create a Rectangle (componentRect) that is the size of the component being painted.
  • Create an Area (componentArea) of that shape (new Area(componentRect)).
  • Create an Area (selectionArea) of the selectionRectangle.
  • Call componentArea.subtract(selectionArea) to remove the selected part.
  • Call Graphics.setClip(componentArea)
  • Paint the semi-transparent color.
  • (Clear the clipping area if more paint operations are required).
like image 149
Andrew Thompson Avatar answered Jan 17 '23 18:01

Andrew Thompson