Ciao a tutti,

spero di esser stato abbastanza chiaro nel titolo (e nel codice XD).
IG= Interfaccia Grafica O.o
Comunque... avrei voluto riuscirci da solo ma ahimè non ce l'ho fatta quindi chiedo a qualcuno che è più esperto di me.

Ho 2 problemi .

Primo: Questo programma disegna cerchi al click del mouse all'interno del frame.
A me invece il disegno compare solo se ingrandisco tutte le volte il frame con il pulsante di ingrandimento

Secondo: Come chiudo il frame nel quale leggo il raggio una volta che ho cliccato sul pulsante OK?

Codice:
codice:
package programmazioneGrafica3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D; // definisce la classe con la quale è possibile disegnare 1 cerchio

import javax.swing.JComponent;


public class Cerchio extends JComponent
{
 public Cerchio(double x_init,double y_init,double alt,double lung)
 {
	 x=x_init;
	 y=y_init;
	 height=alt;
	 width=lung;
	 cerchio=new Ellipse2D.Double(x,y, height, width); // (double x, double y, double w, double h) 
 }
 
 public void paintComponent(Graphics g) 
 {
	 Graphics2D g2 = (Graphics2D) g;
	 g2.setColor(Color.BLACK);
	 g2.fill(cerchio);
	 g2.draw(cerchio);
	 g2.setColor(Color.WHITE);
	 repaint();
 }
 
 public double get_X()
 {
	 return x;
 }

 public double get_Y()
 {
	 return y;
 }
 
 public double getAlt()
 {
	 return height;
 }
 
 public double getLung()
 {
	 return width;
 }
 private Ellipse2D.Double cerchio;
 private double x;
 private double y;
 private double height;
 private double width;
}

e

codice:
package programmazioneGrafica3;

import java.awt.event.*;
import javax.swing.*;

public class FrameMain 
{
 public static void main(String[] args)
 {
	 // Inizio creazione frame principale
	 final JFrame frame=new JFrame(); // creo un frame in cui vedrò il cerchio
	 final int FRAME_WIDTH=300; // definisco le dimensioni del frame
	 final int FRAME_HEIGHT=300; // definisco le dimensioni del frame
	 frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); // imposto le dimensioni della finestra
	 frame.setTitle("Titolo"); // imposto il titolo della finestra
 	 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // il parametro EXIT_ON_CLOSE appartiene all'oggetto JFrame e quindi viene invocato su di esso.
     // Fine creazione frame principale
	 
	 // Inizio creazione frame cattura dati
	 final JFrame richiesta = new JFrame("Inserimento Dati"); // creo un altro frame per la cattura dei dati del raggio
     richiesta.setBounds(150, 150, 300, 150); // ne setto le dimensioni
     richiesta.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // imposto che deve chiudersi se premo X
	 JLabel label = new JLabel("Inserisci il raggio: "); // testo che fa capire a cosa serve la finestra
     final JTextField text = new JTextField(10); // campo testo che cattura il valore
     JButton button = new JButton("Draw"); // pulsante che fa disegnare quando premuto
     JPanel panel = new JPanel(); // creo un pannello a cui aggiungerò i vari componenti
     panel.add(label); 
     panel.add(text);
     panel.add(button);
     richiesta.add(panel); // aggiungo al frame il pannello contenente i vari campi
     richiesta.setVisible(true); // mostro il frame per la richiesta
     // Fine creazione frame cattura dati
     
     
     class BottonListener implements ActionListener
     {
         public void actionPerformed(ActionEvent e) 
         {
          class MousePressListener implements MouseListener
        	{
        	 public void mouseClicked(MouseEvent event) 
        	 {
        	  double raggio=Double.parseDouble(text.getText());
        	  int x = event.getX();// coordinate mouse
        	  int y = event.getY();// coordinate mouse
        	  Cerchio cerchio=new Cerchio(x-5-(raggio/2),y-30-(raggio/2),raggio,raggio); // -5 e -30 è per i bordi della finestra
        	  frame.add(cerchio);
        	 }

        	  public void mouseReleased	(MouseEvent event){}
        	  public void mousePressed	(MouseEvent event){}
        	  public void mouseEntered	(MouseEvent event){}
        	  public void mouseExited	(MouseEvent event){}
        	 }
         MouseListener listener = new MousePressListener();
         frame.addMouseListener(listener);
     	 
         }
     }

     ActionListener buttonListener = new BottonListener(); // creo l'ascoltatore per il button
     button.addActionListener(buttonListener); // aggiungo l'ascoltatore al button 
         
 	 frame.setVisible(true);// indica se voglio o meno mostrare la finestra in cui ho disegnato il cerchio.
 }
}
Eventuali consigli sull'ottimizzazione del codice sono sempre ben accetti.