Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/03/2016, 10:36
juan30
 
Fecha de Ingreso: marzo-2016
Mensajes: 3
Antigüedad: 8 años, 1 mes
Puntos: 0
Pregunta Duda con un array de tipo JTextField

Hola a todos, he empezado no hace mucho con esto de programar en java y leyendo un código me ha surgido una duda. El código trata de generar 6 números, ya sea de manera manual o de manera automática. Y si es automática, van a ser números del 1 al 50 y no se pueden repetir entre ellos. Entonces tengo para ellos se crean dos clases, la primera clase se llama Prueba,y alberga la interfaz gráfica del programa.

Código Java:
Ver original
  1. import java.awt.*;
  2. import javax.swing.*;
  3.  
  4. public class Prueba extends JFrame {
  5.     PruebaEventos primi = new PruebaEventos(this);
  6.     // configurar fila 1
  7.     JPanel fila1 = new JPanel();
  8.     ButtonGroup opcion = new ButtonGroup();
  9.     JCheckBox automatico = new JCheckBox("Automático", false);
  10.     JCheckBox manual = new JCheckBox("Manual", true);
  11.     // configurar fila 2
  12.     JPanel fila2 = new JPanel();
  13.     JLabel etiquetaNumeros = new JLabel("Tus Elecciones: ", JLabel.RIGHT);
  14.     JTextField[] numeros = new JTextField[6];
  15.     public Prueba() {
  16.         super("Numeros aleatorios");
  17.         setSize(750, 270);
  18.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  19.         GridLayout layout = new GridLayout(3, 1, 10, 10);
  20.         setLayout(layout);
  21.         automatico.addItemListener(primi);
  22.         manual.addItemListener(primi);
  23.        
  24.         FlowLayout layout1 = new FlowLayout(FlowLayout.CENTER,
  25.         10, 10);
  26.         opcion.add(automatico);
  27.         opcion.add(manual);
  28.         fila1.setLayout(layout1);
  29.         fila1.add(automatico);
  30.         fila1.add(manual);
  31.         add(fila1);
  32.        
  33.        
  34.         GridLayout layout2 = new GridLayout(1, 7, 10, 10);
  35.         fila2.setLayout(layout2);
  36.         fila2.add(etiquetaNumeros);
  37.         for (int i = 0; i < 6; i++) {
  38.             numeros[i] = new JTextField();
  39.             fila2.add(numeros[i]);
  40.         }
  41.         add(fila2);
  42.        
  43.        
  44.         setVisible(true);
  45.     }
  46.     public static void main(String[] arguments) {
  47.         Prueba marco = new Prueba();
  48.     }
  49. }

Y la segunda clase es la que va a albergar la interfaz ItemListener para saber que casilla se ha marcado, si la que pone "automático" o "manual".

Código Java:
Ver original
  1. import javax.swing.*;
  2. import java.awt.event.*;
  3.  
  4. public class PruebaEventos implements ItemListener{
  5.     Prueba gui;
  6.      public PruebaEventos(Prueba in) {
  7.         gui = in;
  8.     }
  9.      
  10.       public void itemStateChanged(ItemEvent event) {
  11.        
  12.         Object item = event.getItem();
  13.         if (item == gui.automatico) {
  14.             for (int i = 0; i < 6; i++) {
  15.                 int eleccion;
  16.                 do {
  17.                     eleccion = (int) Math.floor(Math.random() * 50 + 1);
  18.                 } while (numeroRepetido(eleccion, gui.numeros, i));
  19.                 gui.numeros[i].setText("" + eleccion);
  20.             }
  21.        
  22.         } else {
  23.             for (int i = 0; i < 6; i++) {
  24.                 gui.numeros[i].setText(null);
  25.             }
  26.         }
  27.     }
  28.      
  29.       boolean numeroRepetido(int num, JTextField[] pastNums, int count) {
  30.       //Compara cada número que vaya sacando con los que ya hayan salido y devuelve true o false según esté repetido o no.
  31.         for (int i = 0; i < count; i++) {
  32.             if (Integer.parseInt(pastNums[i].getText()) == num) {
  33.                 return true;
  34.             }
  35.         }
  36.         return false;
  37.     }
  38. }

Y mi duda va sobre la condición del condicional if de esta clase que me devuelve valor true o false. Ya que sé que lo que hace es comparar los valores del array pastNums con el integer num, pero lo que no entiendo es qué valor compara cuando el array pasNums está vacío, es decir, cuando todavía no le he introducido ningún valor. Porque sé que por ejemplo los arrays de tipo int se rellenan por defecto con 0 y los de tipo String con null, pero no sé como se rellenan por defecto los arrays de tipo JTextField. Porque buscando por internet he leído que se rellena por defecto con "",pero entonces ¿como puede hacer un casting a integer de ""?.Sí alguien me pudiera explicar esta parte, le estaría muy agradecido