Java + Swing 017. Modo diseño en NetBeans. Juego; números aleatorios. Utilizando Thread y Random.

Ejercicio: Realizar una pequeña aplicación que pueda generar siete números aleatorio y mostrarla. Los números no podrán repetirse.
Diseño de formulario con JFrame.
En la imagen podemos ver el diseño y a un costado los nombres de variables de cada objeto, es importante para que se ajuste a los métodos que se crean. Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho y “Cambiar nombre de variable…”. Es fácil distinguir cual corresponde a cada objeto, va de izquierda a derecha e el diseño. Todos los campos de texto están deshabilitados, esto se hace cambiando la propiedad “enabled”.
Observación: Tomar en cuenta que hay que utilizar las importaciones “import”, básico para utilizar ciertos métodos y objetos. El “setLocationRelativeTo(null)” sirve para centrar el formulario. Los métodos llamados en el constructor de la clase se inician al ejecutar el formulario. Las variables de clase se pueden llamar desde cualquier método, por tanto se utiliza para objetos que se necesitan utilizar en varias ubicaciones.
Creamos los métodos siguientes en el apartado “Fuente”. Estos métodos utilizan conversiones de tipos de datos, controles de excepciones y demás para controlar lo mejor posible el resultado. Se agregan comentarios para tratar de facilitar el entendimiento del funcionamiento de cada código.
Código Java
private void limpiar(){
//Método para limpiar campos y activar objetos.
//Se carga en el contructor del JFrame y el boton reiniciar.
contador.setText(null);
numUno.setText(null);
numDos.setText(null);
numTres.setText(null);
numCuatro.setText(null);
numCinco.setText(null);
numSeis.setText(null);
numSiete.setText(null);
num.setText(null);
jugar.setEnabled(true);
iniciar.setEnabled(true);
jLabelFinal.setVisible(false);
}
private void iniciar(){
//Variable de clase tipo boolean, para controlar la ejecusión del Thread.
control = true;
//Forma de declarar un Thread.
//El modificador final para mejor control.
final Thread t = new Thread( new Runnable() {
@Override
//Implementamos el método que trae.
public void run() {
//Para generar los números aleatorios utilizamos Random.
Random ran = new Random();
//while para mostrar los números generados.
while (control) {
//Los número generados van del 1 al 20.
//Indicamos 20 + 1 pués los números generados van desde el cero.
int next = (int)(ran.nextDouble() * 20 + 1);
//Los números generados se muestran en "num" un JTextField
num.setText(String.valueOf(next));
try {
Thread.sleep(100);
} catch (Exception e) {

}
//Al cambiar el valor de la variable control se sale del bucle y el Thread.
if (control==false) {
break;
}
}
}
});
//Método que iniciar la ejecusión del Thread.
t.start();
}

private void jugar(){
//Método que se ejcutan con el botón jugar.
control = false;
//La lista de if anidados es para controlar los números repetidos.
try {
if(!"".equals(num.getText())){
if(numUno.getText().isEmpty()){
numUno.setText(num.getText());
contador.setText("1");
}
else{
if(num.getText().equals(numUno.getText())){
iniciar();
jugar();
}
else{
if(numDos.getText().isEmpty()){
numDos.setText(num.getText());
contador.setText("2");
}
else{
if(num.getText().equals(numDos.getText())){
iniciar();
jugar();
}
else{
if(numTres.getText().isEmpty()){
numTres.setText(num.getText());
contador.setText("3");
}
else{
if(num.getText().equals(numTres.getText())){
iniciar();
jugar();
}
else{
if(numCuatro.getText().isEmpty()){
numCuatro.setText(num.getText());
contador.setText("4");
}
else{
if(num.getText().equals(numCuatro.getText())){
iniciar();
jugar();
}
else{
if(numCinco.getText().isEmpty()){
numCinco.setText(num.getText());
contador.setText("5");
}
else{
if(num.getText().equals(numCinco.getText())){
iniciar();
jugar();
}
else{
if(numSeis.getText().isEmpty()){
numSeis.setText(num.getText());
contador.setText("6");
}
else{
if(num.getText().equals(numSeis.getText())){
iniciar();
jugar();
}
else{
if(numSiete.getText().isEmpty()){
numSiete.setText(num.getText());
contador.setText("7");
iniciar.setEnabled(false);
jugar.setEnabled(false);
control = false;
num.setText(null);
jLabelFinal.setVisible(true);
jLabelFinal.setForeground(Color.red);
}
}
}
}
}
}
}
}
}

}
}
}
}
}
else{
iniciar();
jugar();
}

} catch (Exception e) {
System.out.println("Metodo jugar " + e);
}

}
Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones. Para utilizar un “Evento” hacemos clic derecho sobre el objeto y seleccionamos “Eventos” de la lista utilizamos la que podamos aplicar al objeto. En la mayoría de los casos se utiliza el “ActionPerformed”. Se agregan comentarios para tratar de facilitar el entendimiento.
Código Java
    private void iniciarActionPerformed(java.awt.event.ActionEvent evt) {                                        
//Método para crear el Thread y llamar sus métodos.
iniciar();
}

private void reiniciarActionPerformed(java.awt.event.ActionEvent evt) {
//Método para limpiar campos y activar objetos.
limpiar();
}

private void jugarActionPerformed(java.awt.event.ActionEvent evt) {
//Método para obtener el número generado y mostrar.
jugar();
}
Por último tenemos el formulario en ejecución.
Observación: Los métodos y el diseño son meramente para práctica y ejemplo, no tienen aplicación funcional y pueden contener errores.

No hay comentarios :

Publicar un comentario