diff --git a/Prova1/.gitignore b/Prova1/.gitignore
new file mode 100644
index 0000000..13275f1
--- /dev/null
+++ b/Prova1/.gitignore
@@ -0,0 +1,30 @@
+### IntelliJ IDEA ###
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+.kotlin
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/Prova1/.idea/.gitignore b/Prova1/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/Prova1/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/Prova1/.idea/misc.xml b/Prova1/.idea/misc.xml
new file mode 100644
index 0000000..07115cd
--- /dev/null
+++ b/Prova1/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Prova1/.idea/modules.xml b/Prova1/.idea/modules.xml
new file mode 100644
index 0000000..3196253
--- /dev/null
+++ b/Prova1/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Prova1/Prova1.iml b/Prova1/Prova1.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/Prova1/Prova1.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Prova1/src/CirclePanelDemo.java b/Prova1/src/CirclePanelDemo.java
new file mode 100644
index 0000000..592cbc1
--- /dev/null
+++ b/Prova1/src/CirclePanelDemo.java
@@ -0,0 +1,152 @@
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+
+public class CirclePanelDemo {
+
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(() -> new CirclePanelDemo().createAndShowGUI());
+ }
+
+ /* ----------------------------- */
+ /* 1. Finestra principale */
+ /* ----------------------------- */
+ private void createAndShowGUI() {
+ JFrame frame = new JFrame("Circle – click, drag & delete");
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setLayout(new BorderLayout());
+
+ CirclePanel circlePanel = new CirclePanel();
+ frame.add(circlePanel, BorderLayout.CENTER);
+
+ JButton clearBtn = new JButton("Cancella cerchio");
+ clearBtn.addActionListener(e -> circlePanel.clearCircle());
+ JPanel btnPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+ btnPanel.add(clearBtn);
+ frame.add(btnPanel, BorderLayout.SOUTH);
+
+ frame.setSize(600, 400);
+ frame.setLocationRelativeTo(null); // centra la finestra
+ frame.setVisible(true);
+ }
+
+ /* ----------------------------- */
+ /* 2. JPanel che disegna il cerchio */
+ /* ----------------------------- */
+ private static class CirclePanel extends JPanel {
+
+ private final int RADIUS = 30; // raggio fisso
+
+ private int circleX = -1; // centro X (-1 → nessun cerchio)
+ private int circleY = -1; // centro Y
+
+ /* variabili per il drag */
+ private boolean dragging = false;
+ private int offsetX, offsetY;
+
+ CirclePanel() {
+ setBackground(Color.WHITE);
+
+ MouseAdapter ma = new MouseAdapter() {
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ int mx = e.getX();
+ int my = e.getY();
+
+ /* Se il cerchio esiste */
+ if (circleX != -1 && circleY != -1) {
+
+ /* Se il click è dentro il cerchio → inizia drag */
+ if (isInsideCircle(mx, my)) {
+ dragging = true;
+ offsetX = mx - circleX;
+ offsetY = my - circleY;
+ } else {
+ // Click fuori dal cerchio: non fare nulla
+ dragging = false;
+ }
+ } else {
+ /* Nessun cerchio → creiamo un nuovo */
+ setCircle(mx, my);
+ }
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ dragging = false;
+ }
+
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ if (dragging && circleX != -1) {
+ int mx = e.getX();
+ int my = e.getY();
+
+ setCircle(mx - offsetX, my - offsetY);
+ }
+ }
+ };
+
+ addMouseListener(ma);
+ addMouseMotionListener(ma);
+ }
+
+ /* ---------------------------------- */
+ /* 3. Utilità */
+ /* ---------------------------------- */
+
+ /** Verifica se il punto (x,y) è dentro il cerchio */
+ private boolean isInsideCircle(int x, int y) {
+ if (circleX == -1 || circleY == -1) return false;
+ int dx = x - circleX;
+ int dy = y - circleY;
+ return dx * dx + dy * dy <= RADIUS * RADIUS;
+ }
+
+ /** Imposta il centro del cerchio e ridisegna */
+ private void setCircle(int x, int y) {
+ circleX = x;
+ circleY = y;
+ repaint();
+ }
+
+ /** Cancella il cerchio (se presente) */
+ public void clearCircle() {
+ circleX = -1;
+ circleY = -1;
+ repaint();
+ }
+
+ /* ---------------------------------- */
+ /* 4. Disegno del pannello */
+ /* ---------------------------------- */
+
+ @Override
+ protected void paintComponent(Graphics g) {
+ super.paintComponent(g);
+
+ if (circleX == -1 || circleY == -1)
+ return; // nessun cerchio da disegnare
+
+ Graphics2D g2 = (Graphics2D) g.create();
+ try {
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_ON);
+
+ int topLeftX = circleX - RADIUS;
+ int topLeftY = circleY - RADIUS;
+
+ g2.setColor(Color.RED);
+ g2.fillOval(topLeftX, topLeftY, 2 * RADIUS, 2 * RADIUS);
+
+ // bordo bianco
+ g2.setStroke(new BasicStroke(2f));
+ g2.setColor(Color.WHITE);
+ g2.drawOval(topLeftX, topLeftY, 2 * RADIUS, 2 * RADIUS);
+ } finally {
+ g2.dispose();
+ }
+ }
+ }
+}