Continuación repetida de un Applet Hola a todos, he logrado modificar un applet que aparece en el libro COMO PROGRAMAR EN JAVA 7ma. ed. de Dietel & Dietel. (págs. 567-569). La aplicación (ver código anexo), consiste en hacer que una estrella comience a rotar en sentido a las manecillas del reloj.
Yo he colocado un par de botones para que una vez finalizada la aplicación, el usuario vuelva a ejecutar la misma o no si así lo desea. El problema consiste es que una vez finalizada la aplicación, los que identifican "si" y "no", en lugar de aparecer en la parte inferior, éstos me aparecen en la parte superior. ¿Me podrían ayudar a corregir dicha aplicación?
La aplicación es ejecutada en Netbeans 6.8.
// Paquetes Java
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
public class EstrellaRotando extends JFrame {
private JButton Si, No;
private JLabel etiqueta, etiqueta02;
public EstrellaRotando() {
super("Dibujo de un conjunto de estrellas.");
getContentPane().setBackground(Color.WHITE);
setSize(400, 400);
setVisible(true);
} // cierre del constructor EstrellaRotando()
public void paint(Graphics g) {
int k = 1;
super.paint(g);
int puntosX[] = {55, 67, 109, 73, 83, 55, 27, 37, 1, 43};
int puntosY[] = {0, 36, 36, 54, 96, 72, 96, 54, 36, 36};
Graphics2D g2d = (Graphics2D) g;
GeneralPath estrella = new GeneralPath(); // crea objeto GeneralPath.
// Establece coordenada inicial de la ruta general
estrella.moveTo(puntosX[0], puntosY[0]);
// Dibuja estrella
for(int n = 1; n < puntosX.length; n++)
estrella.lineTo(puntosX[n], puntosY[n]);
estrella.closePath(); // procede a cerrar la figura
g2d.translate(200, 200); // traslada el origen a (200, 200).
// Gira alrededor del origen y dibuja estrella en colores arbitrarios.
while(k <= 20) {
pausa();
g2d.rotate(Math.PI/10.0); // procede a gira el sistema de coordenadas
g2d.setColor( new Color((int)(Math.random() * 256),
(int)(Math.random() * 256), (int)(Math.random() * 256)));
g2d.fill(estrella); // dibuja estrella rellena.
k++;
} // cierre de while
continuacion();
} // cierre del método paint().
public static void main(String args[]) {
// Objetivo del ejemplo.
JOptionPane.showMessageDialog(null, "El programa muestra el " +
"uso de la clase \"JButton\" para continuar con la ejecución \n" +
"de una aplicación en forma repetitiva.\n", "Objetivo",
JOptionPane.INFORMATION_MESSAGE);
new EstrellaRotando();
} // cierre del métod main.
void continuacion() {
Container contenedor = getContentPane();
contenedor.setLayout(new FlowLayout());
// creación de botones
etiqueta = new JLabel(" ¿Deseas seguir trabajando?");
contenedor.add(etiqueta);
etiqueta02 = new JLabel(" ");
contenedor.add(etiqueta02);
Si = new JButton("Sí");
contenedor.add("South", Si);
No = new JButton("No");
contenedor.add("South", No);
/* Crea una instancia de la clase interna controlboton a usar para el manejo
* de eventos de botones. */
ControlBoton control = new ControlBoton();
Si.addActionListener(control);
No.addActionListener(control);
return;
}
static void pausa() {
try {
Thread.sleep(100,10000); // Pausa en milisegundos + nanosegundos.
}
catch(InterruptedException exc) {}
return;
} // cierre del método pausa.
private class ControlBoton implements ActionListener {
public void actionPerformed(ActionEvent evento) {
if(evento.getSource() == Si) {
evento.getActionCommand();
new EstrellaRotando();
}
if(evento.getSource() == No) {
evento.getActionCommand();
salida();
System.exit(1);
}
} // cierre de actionPerformed
} // cierre del método ControlBoton.
void salida() {
JOptionPane.showMessageDialog(null, "Ha sido un placer haber " +
"trabajado con usted. Hasta luego...", "Salida",
JOptionPane.INFORMATION_MESSAGE);
return;
}
} // cierre de la clase EstrellaRotando. |