Java - Ayuda con este botón para buscar

 
Vista:
Imágen de perfil de Devastador
Val: 47
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con este botón para buscar

Publicado por Devastador (15 intervenciones) el 27/10/2020 23:27:12
En este botón guardo la información que necesito
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
private void saveActionPerformed(java.awt.event.ActionEvent evt) {
    int numcorr = 0;
    String n = name.getText();
    String a = apellido.getText();
    String c = carnet.getText();
    String s = null;
    if (masculino.isSelected()){
        s = "Masculino";
    }
    else if (femenino.isSelected()){
        s = "Femenino";
    }
    int e = Integer.parseInt(edad.getText());
    String correo = mail.getText();
    String facul = (String) facu.getSelectedItem().toString();
    String talla = (String) size.getSelectedItem().toString();
    String txtplay = textshirt.getText();
    String mod = null;
    if (caminadora.isSelected()){
        mod = "Modalidad Caminadora";
    }
    else if (jardin.isSelected()){
        mod = "Modalidad Jardin";
    }
    else if (otro.isSelected()){
        mod = otrotxt.getText();
        otrotxt.setText(" ");
    }
    float tiempcorr = 0;
    if(n.equals("")){
        JOptionPane.showMessageDialog(rootPane, "CAMPO OBLIGATORIO - Ingrese el Nombre del Corredor","Alerta",JOptionPane.WARNING_MESSAGE);}
    else if(a.equals("")){
        JOptionPane.showMessageDialog(rootPane, "CAMPO OBLIGATORIO - Ingrese el Apellido del Corredor","Alerta",JOptionPane.WARNING_MESSAGE);}
    else if(c.equals("")){
        JOptionPane.showMessageDialog(rootPane, "CAMPO OBLIGATORIO - Ingrese el Carné del Corredor","Alerta",JOptionPane.WARNING_MESSAGE);}
    else if(s.equals("")){
        JOptionPane.showMessageDialog(rootPane, "CAMPO OBLIGATORIO - Ingrese el Sexo del Corredor","Alerta",JOptionPane.WARNING_MESSAGE);}
    else if(edad.equals("")){
        JOptionPane.showMessageDialog(rootPane, "CAMPO OBLIGATORIO - Ingrese la Edad del Corredor","Alerta",JOptionPane.WARNING_MESSAGE);}
    else if(correo.equals("")){
        JOptionPane.showMessageDialog(rootPane, "CAMPO OBLIGATORIO - Ingrese el Correo del Corredor","Alerta",JOptionPane.WARNING_MESSAGE);}
    else if(facul.equals("")){
        JOptionPane.showMessageDialog(rootPane, "CAMPO OBLIGATORIO - Ingrese la Facultad del Corredor","Alerta",JOptionPane.WARNING_MESSAGE);}
    else if(talla.equals("")){
        JOptionPane.showMessageDialog(rootPane, "CAMPO OBLIGATORIO - Ingrese la talla del Corredor","Alerta",JOptionPane.WARNING_MESSAGE);}
    else if(txtplay.equals("")){
        JOptionPane.showMessageDialog(rootPane, "CAMPO OBLIGATORIO - Ingrese el Texto de la Playera del Corredor","Alerta",JOptionPane.WARNING_MESSAGE);}
    else if(mod.equals("")){
        JOptionPane.showMessageDialog(rootPane, "CAMPO OBLIGATORIO - Ingrese la Modalidad que Eligio el Corredor","Alerta",JOptionPane.WARNING_MESSAGE);}
    else{
        array[contador] = new inscritos (numcorr,n,a,c,s,e,correo,facul,talla,txtplay,mod,tiempcorr);
 
        contador ++;
 
        JOptionPane.showMessageDialog(rootPane, "Guardado correctamente","Notificación",JOptionPane.INFORMATION_MESSAGE);
 
    name.setText(" ");
    apellido.setText(" ");
    carnet.setText(" ");
    gruposexo.clearSelection();//borrar correo
    edad.setText("");
    mail.setText(" ");
    facu.setSelectedItem(false);
    size.setSelectedItem(false);
    textshirt.setText(" ");
    grupomod.clearSelection();
    }
 
}

Y con este que esta en otra clase recorro y busco mediante el dato ingresado en un textfield y lo comparo con los datos de carne que se encuentra en el array
1
2
3
4
5
6
7
8
9
10
11
private void buscarActionPerformed(java.awt.event.ActionEvent evt) {
    menuprincipal b1 = new menuprincipal ();
    String buscador = busqueda.getText();
   for (int i=0; i < b1.array.length; i++) {
       if (buscador == b1.array[i].getCarne()) { <-- en esta línea me sale el error cuando le paso el debuger,  el error es ATW-EventQueue-0
           JOptionPane.showMessageDialog(rootPane, "El Corredor esta en el Registro","Notificación",JOptionPane.INFORMATION_MESSAGE);
       } else {
           JOptionPane.showMessageDialog(rootPane, "El Corredor no esta en el Registro","Alerta",JOptionPane.WARNING_MESSAGE);
       }
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con este botón para buscar

Publicado por Kabuto (1380 intervenciones) el 28/10/2020 00:57:03
En la línea que marco en negrita:

1
2
3
4
5
6
7
8
9
10
11
private void buscarActionPerformed(java.awt.event.ActionEvent evt) {
    menuprincipal b1 = new menuprincipal ();
    String buscador = busqueda.getText();
   for (int i=0; i < b1.array.length; i++) {
       if (buscador == b1.array[i].getCarne()) { <-- en esta línea me sale el error cuando le paso el debuger,  el error es ATW-EventQueue-0
           JOptionPane.showMessageDialog(rootPane, "El Corredor esta en el Registro","Notificación",JOptionPane.INFORMATION_MESSAGE);
       } else {
           JOptionPane.showMessageDialog(rootPane, "El Corredor no esta en el Registro","Alerta",JOptionPane.WARNING_MESSAGE);
       }
    }
}

Ahí estás creando un nuevo objeto de la clase menuprincipal. Insisto, es nuevo, completamente nuevo.
Los datos que hayas podido leer y guardar con el otro botón, no están en ese objeto. Estarán en otro, pero no en este.
Este, al ser nuevo, su atributo array estará vacío.

Tienes que conseguir que la acción de este botón Buscar, tenga acceso al mismo objeto que la acción del botón Guardar tuvo acceso.
No puedo decirte exactamente como hacerlo, porque habría que ver el código al completo.
Pero has de buscar la forma de que solo haya un único objeto menuprincipal en todo el programa y que el resto de clases y métodos tengan acceso a él.
Ya sea declarándolo como variable global, aplicando un patrón Modelo-Vista-Controlador, o pasando ese objeto por referencia a los constructores de las otras clases,...

Por cierto, otra cosa, aunque no tiene que ver con el error que te produce.
Los String no se deben comparar con el comparador ==

1
2
3
4
5
6
7
8
9
10
11
private void buscarActionPerformed(java.awt.event.ActionEvent evt) {
    menuprincipal b1 = new menuprincipal ();
    String buscador = busqueda.getText();
   for (int i=0; i < b1.array.length; i++) {
       if (buscador == b1.array[i].getCarne()) { <-- en esta línea me sale el error cuando le paso el debuger,  el error es ATW-EventQueue-0
           JOptionPane.showMessageDialog(rootPane, "El Corredor esta en el Registro","Notificación",JOptionPane.INFORMATION_MESSAGE);
       } else {
           JOptionPane.showMessageDialog(rootPane, "El Corredor no esta en el Registro","Alerta",JOptionPane.WARNING_MESSAGE);
       }
    }
}

Si lo haces así te puede dar resultados inesperados, y habitualmente equivocados.

Lo correcto es usar el método equals()

1
2
3
4
5
6
7
8
9
10
11
private void buscarActionPerformed(java.awt.event.ActionEvent evt) {
    menuprincipal b1 = new menuprincipal ();
    String buscador = busqueda.getText();
   for (int i=0; i < b1.array.length; i++) {
       if (buscador.equals(b1.array[i].getCarne())) { <-- en esta línea me sale el error cuando le paso el debuger,  el error es ATW-EventQueue-0
           JOptionPane.showMessageDialog(rootPane, "El Corredor esta en el Registro","Notificación",JOptionPane.INFORMATION_MESSAGE);
       } else {
           JOptionPane.showMessageDialog(rootPane, "El Corredor no esta en el Registro","Alerta",JOptionPane.WARNING_MESSAGE);
       }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Devastador
Val: 47
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con este botón para buscar

Publicado por Devastador (15 intervenciones) el 28/10/2020 03:47:48
Muchísimas gracias, pero solo tengo un objeto menuprincipal y no hay otro así que no entiendo porque no encuentra ni captura ningún dato ni recorre el arreglo que tengo y ya lo habia hecho asi y no habia tenido inconveniente y ahora no entiendo el porque no me deja hacerlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con este botón para buscar

Publicado por Kabuto (1380 intervenciones) el 28/10/2020 12:48:40
Recomiendo que busques información sobre el ámbito de variables/objetos

Este objeto menuprincipal que marco en negrita, al que llamas b1:

1
2
3
4
5
6
7
8
9
10
11
private void buscarActionPerformed(java.awt.event.ActionEvent evt) {
    menuprincipal b1 = new menuprincipal ();
    String buscador = busqueda.getText();
   for (int i=0; i < b1.array.length; i++) {
       if (buscador == b1.array[i ].getCarne()) { <-- en esta línea me sale el error cuando le paso el debuger,  el error es ATW-EventQueue-0
           JOptionPane.showMessageDialog(rootPane, "El Corredor esta en el Registro","Notificación",JOptionPane.INFORMATION_MESSAGE);
       } else {
           JOptionPane.showMessageDialog(rootPane, "El Corredor no esta en el Registro","Alerta",JOptionPane.WARNING_MESSAGE);
       }
    }
}

Lo estás creando DENTRO del método buscarActionPerformed()
Esto implica dos cosas:
1- Que no contiene ningún dato previo de otras operaciones que hayas hecho antes, porque insisto, es un objeto NUEVO
2- Que su ámbito(scope) se limita al entorno donde ha sido declarado, es decir, SOLO existe dentro del método buscarActionPerformed()
Este objeto "nace" cuando comienza este método y "muere" cuando el método finaliza. Su existencia es efímera.

Por eso decía que dicho objeto debería estar declarado en un ámbito global, en algún lugar dentro de la clase donde se mantenga "vivo" durante toda la ejecución del programa y el resto de métodos puedan acceder a él.


Mira, a ver si con el siguiente ejemplo, puedo clarificar esto mejor.

He hecho un programa sencillo.
Una interfaz con dos campos de texto y dos botones.
En un campo el usuario escribe un nombre y al guardar, ese nombre se le asigna a un objeto de una clase llamada Persona.

En el otro campo, al pulsar el botón "Mostrar", aparecerá el último nombre que se ha guardado.

Aquí pongo el código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
public class PruebaAmbito extends JFrame{
	private JButton btGuardarNombre;
	private JButton btMostrarNombre;
	private JTextField jtNombreGuardar;
	private JTextField jtNombreMostrar;
 
	public PruebaAmbito() {
 
		iniciarComponentes();
 
		JPanel panel1 = new JPanel();
		panel1.setLayout(new BoxLayout(panel1, BoxLayout.Y_AXIS));
		panel1.add(jtNombreGuardar);
		panel1.add(btGuardarNombre);
		panel1.setBorder(BorderFactory.createTitledBorder("Introduzca nombre"));
 
		JPanel panel2 = new JPanel();
		panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
		panel2.add(jtNombreMostrar);
		panel2.add(btMostrarNombre);
		panel2.setBorder(BorderFactory.createTitledBorder("Nombre introducido"));
 
		setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
 
		add(panel1);
		add(panel2);
 
		setTitle("Prueba Ambito");
		setResizable(false);
		setSize(400, 150);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
 
	private void iniciarComponentes() {
		btGuardarNombre = new JButton("Guardar");
		btGuardarNombre.addActionListener(new AccionGuardarNombre());
		btMostrarNombre = new JButton("Mostrar");
		btMostrarNombre.addActionListener(new AccionMostrarNombre());
		jtNombreGuardar = new JTextField(8);
		jtNombreMostrar = new JTextField(8);
		jtNombreMostrar.setEditable(false);
	}
 
	class AccionGuardarNombre implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			Persona per1 = new Persona();
			per1.setNombre(jtNombreGuardar.getText());
			jtNombreGuardar.setText(null);
		}
	}
 
	class AccionMostrarNombre implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			Persona per1 = new Persona();
			jtNombreMostrar.setText(per1.getNombre());
		}
	}
 
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new PruebaAmbito();
			}
		});
	}
 
	class Persona {
		private String nombre;
 
		public void setNombre(String nom) {
			nombre = nom;
		}
 
		public String getNombre() {
			return nombre;
		}
	}
}

Probablemente verás que la interfaz la hago quizás de forma distinta a como la haces tú. Eso no importa ahora.
Donde debemos prestar atención es a los métodos de acción que usan los botones.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class AccionGuardarNombre implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			Persona per1 = new Persona();
			per1.setNombre(jtNombreGuardar.getText());
			jtNombreGuardar.setText(null);
		}
	}
 
	class AccionMostrarNombre implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			Persona per1 = new Persona();
			jtNombreMostrar.setText(per1.getNombre());
		}
	}

El método de guardar, coge el nombre del campo de texto, lo asigna a Persona y borra el campo de texto.
El método de mostrar, recupera el nombre asignado a Persona, y lo muestra en el otro campo de texto.

Ambos métodos necesitan acceder a un objeto Persona, yo he creado sendos objetos Persona DENTRO de esos métodos.

Esto significa que NO VA A FUNCIONAR.
Primero porque tengo dos objetos Persona distintos, aunque se llamen igual, no está relacionados el uno con el otro.
Y segundo, porque SOLO existen dentro de esos métodos, nacen y mueren ahí. El nombre que guardo en una de las Persona, en realidad se pierde en cuanto el método termina. Porque ese objeto Persona desaparece.

Para corregirlo debo usar UN ÚNICO objeto Persona.
Y este objeto se ha de crear solo una vez, cuando el programa comienza, y ha de "sobrevivir" hasta que el programa termine.
Así que no puedo declararlos dentro de esos métodos.

¿Y si pruebo a declararlo dentro del método main() que pone inicio al programa? Parece buena idea, así Persona se declara al comienzo del programa.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class AccionGuardarNombre implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			per1.setNombre(jtNombreGuardar.getText());
			jtNombreGuardar.setText(null);
		}
	}
 
	class AccionMostrarNombre implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			jtNombreMostrar.setText(per1.getNombre());
		}
	}
 
	public static void main(String[] args) {
		Persona per1 = new Persona();
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new PruebaAmbito();
			}
		});
	}


Nada, tampoco funciona. De hecho el compilador me muestra varios errores en las lineas que marco en negrita.
Los métodos de acción se quejan de que no saben quién es el objeto Persona llamado per1, sea quien sea ese objeto, se encuentra FUERA de su ámbito y no pueden "verlo".
El método main se queja porque la clase Persona no es estática, que ese es otro tema que no vamos a entrar ahora.
El caso es que declarlo ahí no es buena idea.

¿Y si lo declaramos en el constructor de la clase principal? Ahí es donde se está iniciando todo: el frame, los botones, los campos... pinta bien.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public PruebaAmbito() {
 
 
		Persona per1 = new Persona();
		iniciarComponentes();
 
		JPanel panel1 = new JPanel();
		panel1.setLayout(new BoxLayout(panel1, BoxLayout.Y_AXIS));
		panel1.add(jtNombreGuardar);
		panel1.add(btGuardarNombre);
		panel1.setBorder(BorderFactory.createTitledBorder("Introduzca nombre"));
 
		JPanel panel2 = new JPanel();
		panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
		panel2.add(jtNombreMostrar);
		panel2.add(btMostrarNombre);
		panel2.setBorder(BorderFactory.createTitledBorder("Nombre introducido"));
 
		setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
 
		add(panel1);
		add(panel2);
 
		setTitle("Prueba Ambito");
		setResizable(false);
		setSize(400, 150);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}


Pues tampoco...
Los métodos de acción siguen quejándose de lo mismo. Ellos no ven ningún objeto Persona llamado per1 DENTRO de su ámbito.
Y es porque la Persona per1, tiene su propio ámbito y ahora mismo solo existe dentro del constructor, porque es donde ha sido declarada
El resto de métodos no pueden ver a esa Persona..

¿Cuál puede ser el sitio adecuado para que nuestro objeto Persona disponga de un ámbito que coincida con el de los métodos de acción?

Pues un buen sitio es declararla como atributo de la clase principal.
Ahí conseguiremos que tenga ámbito global, TODOS los métodos podrán ver y acceder directamente a esta Persona (excepto el método main, porque es estático)
Y además conseguiremos tener solo un objeto Persona y que mantenga su existencia desde el principio del programa, hasta el final.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class PruebaAmbito extends JFrame{
 
	private JButton btGuardarNombre;
	private JButton btMostrarNombre;
	private JTextField jtNombreGuardar;
	private JTextField jtNombreMostrar;
	//Si declaramos aquí a Persona, será visible en TODA la clase
	Persona per1 = new Persona();
 
	public PruebaAmbito() {
		iniciarComponentes();
 
		JPanel panel1 = new JPanel();
		............
		............


¡¡Ahora sí!!!
Ahora el compilador no se queja, todo está en orden.
Los métodos de acción ya si pueden ver a esa única Persona llamada per1, porque ahora sus ámbitos si coinciden.

Y ahora el programa ya funciona, con un botón guardamos nombre y con el otro podemos recuperarlo.



Pues una solución similar tienes que encontrar en tu programa.
Ya sea el objeto menuprincipal que usas o el propio array de datos, se han de declarar en un sitio cuyo ámbito coincida con el de los métodos que necesitan acceder a ese array.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Devastador
Val: 47
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con este botón para buscar

Publicado por Devastador (15 intervenciones) el 28/10/2020 14:23:10
Es que entiendo lo de globalizar todo el objeto para poder acceder a el y usarlo en ese mismo Jframe pero cuando lo intento usar en otro Jframe es el error no importa donde lo ponga, no me da registro de que exista algo dentro del arreglo cuando lo llamo en esa clase adjunto un archivo de mi código para que entiendas a lo que me refiero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con este botón para buscar

Publicado por Kabuto (1380 intervenciones) el 29/10/2020 01:13:11
Prff... la mayor parte es código autogenerado.
Al no estar escrito por "humanos"..., cuesta entenderlo...

A ver, en la clase menuprincipal.java...

Veo que hay un método privado que busca en el array de inscritos.
1
2
3
4
5
6
7
8
9
10
private void buscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscarActionPerformed
        String buscador = busqueda.getText();
        for (int i=0; i < array.length; i++) {
            if (buscador == array[i ].getCarne()) {
                JOptionPane.showMessageDialog(rootPane, "El Corredor esta en el Registro","Notificación",JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(rootPane, "El Corredor no esta en el Registro","Alerta",JOptionPane.WARNING_MESSAGE);
            }
        }
    }//GEN-LAST:event_buscarActionPerformed

Este método supongo que sí funcionaría porque el array de inscritos si está dentro de su ámbito.

Pero por otro lado, tienes un método que invoca una instancia de la clase busqueda.java:

1
2
3
4
5
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
        busqueda ver = new busqueda ();
        escritorio.add(ver);
        ver.show();
    }//GEN-LAST:event_jMenuItem2ActionPerformed

Esta clase busqueda, tiene un método similar al anterior para buscar en el array.
Este es el que pusiste en tu mensaje explicando que no funciona.

1
2
3
4
5
6
7
8
9
10
11
private void buscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscarActionPerformed
        menuprincipal b1 = new menuprincipal ();
        String buscador = busqueda.getText();
       for (int i=0; i < b1.array.length; i++) {
           if (buscador.equals(b1.array[i ].getCarne())) {
               JOptionPane.showMessageDialog(rootPane, "El Corredor esta en el Registro","Notificación",JOptionPane.INFORMATION_MESSAGE);
           } else {
               JOptionPane.showMessageDialog(rootPane, "El Corredor no esta en el Registro","Alerta",JOptionPane.WARNING_MESSAGE);
           }
        }
    }//GEN-LAST:event_buscarActionPerformed

Y no funciona por lo que dije, el array de inscritos donde realmente estás guardando datos. Está en la clase menuprincipal.

La clase busqueda no tiene acceso a ese array. Y crear un segundo objeto menuprincipal dentro del método buscarActionPerformed() no va a servir de nada por lo que ya dijimos. Ese objeto es NUEVO y es DISTINTO del "auténtico" menuprincipal" que tiene el "auténtico" array de inscritos.

¿Cómo solucionarlo?
Pues para no tener que reescribir demasiado el código, creo que puedes solucionarlo pasándole a la clase búsqueda una referencia a la clase menuprincipal, o bien, una referencia a su array de inscritos.
Puesto que para la búsqueda solo te interesa el array, no necesitas tener acceso a TODO el objeto menuprincipal, bastaría con recibir una referencia del array

¿Y cómo referenciamos el array?
Primero.
A la clase busqueda le añadimos un atributo global que será un array de inscritos.
Este array no se inicializa en esta clase, si no que mediante el constructor de la clase busqueda, se va a recibir como parámetro la referencia a dicho array. Y dentro del constructor se la asignamos al atributo global

1
2
3
4
5
6
7
8
9
public class busqueda extends javax.swing.JInternalFrame {
 
	//Atributo para referenciar el array de inscritos de menuprincipal
	private inscritos[] array;
 
    public busqueda(inscritos[] arrayInscritos) {
		array = arrayInscritos; //Ya tenemos el array referenciado
        initComponents();
    }

Segundo.
El método que se encarga de buscar, ahora ya tiene acceso a una referencia del array de inscritos.
Ya no tiene que crear un "falso" menuprincipal

1
2
3
4
5
6
7
8
9
10
11
private void buscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscarActionPerformed
        menuprincipal b1 = new menuprincipal (); //Esta línea borrada, adiós "falso" menuprincipal...
        String buscador = busqueda.getText();
       for (int i=0; i < array.length; i++) { //A través del atributo global, accedemos al "auténtico" array
           if (buscador.equals(array[i ].getCarne())) {
               JOptionPane.showMessageDialog(rootPane, "El Corredor esta en el Registro","Notificación",JOptionPane.INFORMATION_MESSAGE);
           } else {
               JOptionPane.showMessageDialog(rootPane, "El Corredor no esta en el Registro","Alerta",JOptionPane.WARNING_MESSAGE);
           }
        }
    }//GEN-LAST:event_buscarActionPerformed


Tercero.
Vale, la clase busqueda ya está preparada para recibir una referencia del array.
Ahora hay que decirle a la clase menuprincipal, que le haga llegar dicha referencia a busqueda.

1
2
3
4
5
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
        busqueda ver = new busqueda (array);//A busqueda le pasamos la referencia que está esperando recibir
        escritorio.add(ver);
        ver.show();
    }//GEN-LAST:event_jMenuItem2ActionPerformed


Y creo que con estas pequeñas modificaciones, se solucionaría el problema.
Pruébalo y nos cuentas.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Devastador
Val: 47
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con este botón para buscar

Publicado por Devastador (15 intervenciones) el 29/10/2020 03:24:46
Muchísimas gracias, quedo solucionado el problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar