public class Vista extends JFrame {
Point center;
public Vista() {
/* Dejamos en null el layout, ya que queremos situar los botones de
* manera absoluta, por lo que cualquier layout molestaria
* a la hora de crear los botones
*/
this.setLayout(null);
//Ponemos el tamaño que queremos del JFrame
this.setMinimumSize(new Dimension(700, 700));
//Genera un punto en el medio.
center = new Point(this.getHeight() / 2, this.getWidth() / 2);
//Llamamos al metodo crearBotones
crearBotones();
this.setVisible(true);
}
public void crearBotones() {
JButton b;
/*
* Genera el radio de la circunferencia,
* comprovando el tamaño de la ventana y dejando un margen de 150 pixels
*/
int radioCircunferencia = (this.getHeight() / 2) - 150;
if (this.getWidth() > this.getHeight()) {
radioCircunferencia = (this.getWidth() / 2) - 150;
}
//Numero de cuerdas a generar.
int cuerdas = 16;
// Guarda el tamaño entre cuerda y cuerda.
int distanciaCuerdas = radioCircunferencia / cuerdas;
// Los for generan un cuarto de la circunferencia cada uno, .
/**
* En el for sumamos la distancia entre las cuerdas hasta que consigamos
* llegar al radio de la circunferencia
*/
for (int i = distanciaCuerdas; i <= radioCircunferencia; i += distanciaCuerdas) {
// Guarda la posicion de x del boton que va a generar en cada ejecucion
int posXBoton = center.x + i;
/* Guarda la posicion de y del boton que va a generar en cada
* ejecucion, este valor se genera utilizando Pitagoras
*/
int posYBoton = center.y
+ ((int) Math.sqrt(Math.pow(radioCircunferencia, 2)
- (int) Math.pow(i, 2)));
//Crea el boton con el nombre "1"
b = new JButton("1");
//Posiciona el botón en la posicion x e y del frame
b.setBounds(posXBoton, posYBoton, 20, 20);
// Pone el boton visible y lo añade al frame
b.setVisible(true);
this.add(b);
}
}
}