Java - Abrir nueva ventana al hacer clic en un botón

 
Vista:
Imágen de perfil de Lucas
Val: 68
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Lucas (23 intervenciones) el 09/06/2020 14:55:55
Buenas tardes,
Estoy en un nuevo proyecto para crear una gestiona de estudiantes. En una ventana principal tengo creado los paneles, botones y caja de texto de salida.
Al ver el listado de estudiantes se muestran correctamente en la caja de salida.

Agradecería si me ayudasen en implementar el código para que cuando haga clic en el botón de crear un nuevo estudiante, se abra una nueva ventana y pida una serie de datos habituales (nombre, apellidos, email,etc.) y después se añadan al txt.

Muchas gracias.

En la clase ventana tengo el siguiente 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
public class Ventana extends JFrame {
 
	private static final long serialVersionUID = 1L;
	private final String TITULO = "Gestion de estudiantes";
	private String rutaFichero = "./usuarios.txt";
 
    FileInputStream fis = null;
    ObjectInputStream ois = null;
 
    public ArrayList<Estudiante> listEstudiantes = new ArrayList<Estudiante>();
	// Seccion de declara
 
	private JPanel panelInicio;
	private JPanel panelBotones;
	private JButton botonVerEstudiantes;
	private JButton botonCrearEstudiante;
	private JButton botonEliminarEstudiante;
	private JButton botonSalir;
	private JPanel panelTextoSalida;
	private JScrollPane panelScrollSalida;
	private static JTextArea cajaTextoSalida;
 
	public Ventana() {
		setTitle(TITULO);
		inicializarComponentes();
		registrarEscuchadores();
		pack();
		setVisible(true);
 
	String listaEstudiantes = "";
 
    try {
        recuperarDeFichero();
        Ventana.escribirDatosDeSalida(String.format( + listEstudiantes.size() + " estudiantes disponibles\n"));
    } catch (Exception ex) {
        System.out.println("El proceso de carga de datos ha tenido problemas y no ha concluido satisfactoriamente: El fichero 'fichero-inventado.txt' no ha podido ser encontrado");
    }
    escribirDatosDeSalida(String.format(listaEstudiantes));
 
}
 
 
	 private void inicializarComponentes() {
 
		getContentPane().setLayout(new GridLayout(2, 2, 6, 0));
 
		/* Panel bienvenida */
		JLabel panelInicio=new JLabel("Control de estudiantes");
		panelInicio.setVerticalAlignment(JLabel.CENTER);
		panelInicio.setHorizontalAlignment(JLabel.CENTER);
		panelInicio.setFont(new Font("Calibri", Font.BOLD, 20));
		panelInicio.setForeground(Color.blue);
 
		/* Panel botones */
		panelBotones = new JPanel();
		botonVerEstudiantes = new JButton("Ver todos los estudiantes");
		panelBotones.add(botonVerEstudiantes);
		botonCrearEstudiante = new JButton("Crear un nuevo estudiante");
		panelBotones.add(botonCrearEstudiante);
       	botonEliminarEstudiante = new JButton("Eliminar un estudiante");
		panelBotones.add(botonEliminarEstudiante);
		botonSalir = new JButton("Salir");
		panelBotones.add(botonSalir);
 
		/* Panel salida */
		panelTextoSalida = new JPanel();
		panelTextoSalida.setLayout(new BorderLayout(2,4));
		panelScrollSalida = new JScrollPane();
		panelTextoSalida.add(panelScrollSalida);
		cajaTextoSalida = new JTextArea(5, 0);
		cajaTextoSalida.setEditable(false);
		panelScrollSalida.setViewportView(cajaTextoSalida);
 
		// Agregamos los Paneles para que sean visibles
		getContentPane().add(panelInicio);
		getContentPane().add(panelBotones);
		getContentPane().add(panelTextoSalida);
 
		// propiedades generales
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setPreferredSize(new Dimension(700, 550)); // Se establece la dimensión del frame
 
	}
 
	private void registrarEscuchadores() {
		// Se registra e instancia el escuchador asociado
		botonVerEstudiantes.addActionListener(new botonVerEstudiantesActionListener(this));
		botonCrearEstudiante.addActionListener(new botonCrearEstudianteActionListener());
		botonEliminarEstudiante.addActionListener(new botonEliminarEstudianteActionListener());
		botonSalir.addActionListener(new botonSalirActionListener());
	}
 
	/*
	 * Métodos para la lectura y escritura de datos
	 */
 
    private void recuperarDeFichero() throws FileNotFoundException {
        Scanner sc = new Scanner(new File(rutaFichero));
 
        while (sc.hasNextLine()) {
            String lineaCsv = sc.nextLine();
            if (lineaCsv != null && lineaCsv.length() > 0) {
                listEstudiantes.add(new Estudiante(lineaCsv));
            }
        }
 
    }
 
	public static void escribirDatosDeSalida(String texto) {
		String formato = "hh:mm:ss a";
		DateFormat dateFormat = new SimpleDateFormat(formato);
		String tiempo = dateFormat.format(new GregorianCalendar().getTime());
		cajaTextoSalida.append(tiempo + " :: " + texto + "\n");
	}
 
    /**
     * Metodo para recuperar un fichero
     */
 
 
	/**
	 * Otros metodos de interes
	 *
	 */
	 public void activarListadoEstudiantes() {
        this.panelInicio.setVisible(true);
    }
}

Además tengo creado el botón crearEstudiante:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class botonCrearEstudianteActionListener implements ActionListener {
 
 
	private Ventana ventana;
 
	  public botonCrearEstudianteActionListener() {
	        this.ventana = ventana;
	    }
 
	    @Override
	    public void actionPerformed(ActionEvent e) {
	        String listaEstudiantes;
 
 
	    }
 
	}
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 Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Franklin (179 intervenciones) el 09/06/2020 15:10:26
hmmm no sé si entendí del todo bien.

pero para abrir una nueva ventana basta con:

1) new NombreDeMiFrame().setVisible(true);

o

2) NombreDeMiFrame nuevoFrame = new NombreDeMiFrame();
nuevoFrame.setVisible(true);

ambas hacen lo mismo, crear una nueva instancia del Frame y hacerlo visible.

En caso de que tu frame o ventana tenga un constructor que pida algún objeto solo es cuestion de enviarlo en su creación.

1) new NombreDeMiFrame(String valor).setVisible(true);

o

2) NombreDeMiFrame nuevoFrame = new NombreDeMiFrame(String valor);
nuevoFrame.setVisible(true);

no necesariamente es un String, pero es un ejemplo de mandar un valor, objeto, clase a la instancia del frame
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 Lucas
Val: 68
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Lucas (23 intervenciones) el 09/06/2020 16:01:48
Tengo una duda...

Como hago para que al hacer clic en el botón "Crear un nuevo estudiante" se abra la nueva ventana para pedir los datos?

Gracias.
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
sin imagen de perfil
Val: 755
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Yamil (2315 intervenciones) el 09/06/2020 16:31:50
Seria algo como :

1
2
3
4
5
6
7
8
9
10
11
12
13
jcomp4 = new JButton ("openNewWindow");
 
jcomp4.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        JFrame frame = new JFrame ("MyPanel");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add (new MyPanel2());
        frame.pack();
        frame.setVisible (true);
 
    }
});
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 Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Franklin (179 intervenciones) el 09/06/2020 16:34:37
hmmm para abrir una ventana la cual pida los datos, no deberías primero crear la ventana que pida los datos y luego en el momento que haces click solo la muestras.
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 Lucas
Val: 68
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Lucas (23 intervenciones) el 09/06/2020 18:06:32
Es decir, creo una ventana similar a la principal pero que solo contenga las etiquetas y campos de texto que necesite, no?

Y después la podré llamar desde el botón de la primera ventana?
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 Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Franklin (179 intervenciones) el 09/06/2020 18:26:27
en teoría, si.
si la intención / necesidad es abrir una ventana para que cumpla con cierta función, entonces, primero crea la ventana que cumpla con lo que necesitas y por última solo la "llamas" o la instancias, la creas (como prefieras llamarlo) cuando presiones click en el botón.

Resumido: Primero crea el botón y luego lo llamas para que haga lo que has codificado.
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 Lucas
Val: 68
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Lucas (23 intervenciones) el 10/06/2020 10:36:22
Entiendo que en el código de la nueva ventana deberé poner un método que guarde la información obtenida,no?
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 Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Franklin (179 intervenciones) el 10/06/2020 14:15:59
En teoría si.
En realidad no tiene mucha dificultad.

Si tienes una ventana que muestra un listado de datos, y quieres que otra ventana se encargue de agregar mas datos o editarlos.
Primero códifica la ventana, que cumpla con lo que necesitas que es agregar datos.

por ultimo, solo creas una nueva instancia de esa ventana para que haga su trabajo.
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 Lucas
Val: 68
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Lucas (23 intervenciones) el 11/06/2020 10:50:04
Los métodos se deben colocar en la ventana principal o en la auxiliar que se recogen los datos?

Como ejemplo:

1
2
3
4
5
6
7
public String getNombre() {
    return txtNombre.getText();
}
 
public String getApellidos() {
    return txtApellidos.getText();
}
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 Gustavo
Val: 12
Ha disminuido su posición en 21 puestos en Java (en relación al último mes)
Gráfica de Java

Abrir nueva ventana al hacer clic en un botón

Publicado por Gustavo (4 intervenciones) el 12/06/2020 06:27:47
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
jcomp4 = new JButton ("openNewWindow");
 
 
 
jcomp4.addActionListener(new ActionListener() {
 
    @Override
 
    public void actionPerformed(ActionEvent e) {
 
        JFrame frame = new JFrame ("MyPanel");
 
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
 
        frame.getContentPane().add (new MyPanel2());
 
        frame.pack();
 
        frame.setVisible (true);
 
 
 
    }
 
});
el codigo esta bien pero como usas el metodo pack() y no defines un tamaño(Dimenciones alto y ancho) en el MyPanel2() la ventana cuando la llames estará minimizada.
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