Eventi Forme irregolari chiuse

 

Finestra con forma irregolare curvilinea chiusa. Quando si clicca al suo interno con il mouse lo spessore del contorno aumenta di spessore quando si riclicca torna allo spessore normale. Ma attenzione è che il clic è attivo solo all'interno del contorno ma non al di fuori. Non ne quadrato circoscritto come spesso avviene ma solo all'interno della forma.

 

Classe: FormaCurvilineaIrregolareChiusa

 1 package formacurvilineairregolarechiusa;
 2 
 3 import javax.swing.*;
 4 import java.awt.*;
 5 import java.awt.event.MouseAdapter;
 6 import java.awt.event.MouseEvent;
 7 import java.awt.geom.Path2D;
 8 
 9 public class FormaCurvilineaIrregolareChiusa {
10     public static void main(String[] args) {
11         SwingUtilities.invokeLater(() -> {
12             JFrame frame = new JFrame("Forma Curvilinea Irregolare Chiusa");
13             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
14             frame.add(new CustomPanel());
15             frame.setSize(500, 500);
16             frame.setVisible(true);
17         });
18     }
19 
20     static class CustomPanel extends JPanel {
21         private boolean clicked = false;
22         private Path2D path;
23 
24         CustomPanel() {
25             path = createPath();
26             addMouseListener(new MouseAdapter() {
27                 @Override
28                 public void mouseClicked(MouseEvent e) {
29                     if (path.contains(e.getPoint())) {
30                         clicked = !clicked;
31                         repaint();
32                     }
33                 }
34             });
35         }
36 
37         private Path2D createPath() {
38             Path2D path = new Path2D.Double();
39             // Punto di inizio
40             path.moveTo(100, 200); 
41             // Prima curva di Bézier
42             path.curveTo(150, 100, 250, 100, 300, 200); 
43             // Seconda curva di Bézier
44             path.curveTo(350, 300, 250, 400, 200, 300);            
45             // Terza curva di Bézier che ritorna al punto di inizio
46             path.curveTo(150, 400, 100, 300, 100, 200); 
47             path.closePath(); // Chiude la forma
48             return path;
49         }
50 
51         @Override
52         protected void paintComponent(Graphics g) {
53             super.paintComponent(g);
54             Graphics2D g2d = (Graphics2D) g;
55             g2d.setColor(Color.BLACK);
56 
57             if (clicked) {
58                 g2d.setStroke(new BasicStroke(5)); // Aumenta lo spessore
59             } else {
60                 g2d.setStroke(new BasicStroke(1)); // Spessore normale
61             }
62 
63             g2d.draw(path);
64         }
65     }
66 }