Potresti cominciare con l'evitare come la peste quella parte di composizione grafica che si ostinano a mettere in tutti gli IDE, tirare fuori un foglio di carta, fare il disegno della tua interfaccia grafica e vedere di implementarla per bene tramite il/i giusto/i layour manager e scegliendo accuratamente i componenti.
Per quanto riguarda il disegno del cerchio (e di tutte le primitive grafiche), dovresti consultare le API su Graphics (e/o Graphics2D): molte utili primitive (tipo linee, rettangoli, archi etc etc) sono già tutte implementate
http://java.sun.com/javase/6/docs/ap.../Graphics.html
qundi ti basta raccattare l'oggetto graphics della tua canvas:
codice:
Graphics g = tuaCanvas.getGraphics();
e quindi chiamare drawArch...
codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
*
* @author Andrea
*/
public class CanvasDemo extends JFrame {
private final Canvas c;
/** Creates a new instance of CanvasDemo */
public CanvasDemo() {
super("Canvas Demo");
this.setSize(400,400);
this.getContentPane().setLayout(new BorderLayout());
JButton drawArc = new JButton("Disegna Cerchio");
this.getContentPane().add(drawArc, BorderLayout.SOUTH);
c = new Canvas();
this.getContentPane().add(c, BorderLayout.CENTER);
drawArc.addActionListener(new AbstractAction() {
public void actionPerformed (ActionEvent ae) {
Graphics g = c.getGraphics();
int radius = ((int)(200*Math.random()));
g.drawArc(((int)(400*Math.random())), ((int)(400*Math.random())), radius, radius, 0, 360);
}
});
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main (String[] args) {
new CanvasDemo();
}
}