Java - Abrir un Menu desde un JButton

 
Vista:
sin imagen de perfil

Abrir un Menu desde un JButton

Publicado por Omar (3 intervenciones) el 02/12/2015 23:56:44
Buenas tardes a todos, estoy empezando con esto de programar gráficamente en java con WindowBuilder en mi escuela, y me seria de gran ayuda que me puedan aclarar porque no me sale correctamente o en que tengo errores.

Tengo un pequeño programa donde muestra una ventana de iniciar sesion y al introducir el usuario y contraseña muestra una ventana JOptionPane que dice "Bienvenido al sistema", pero tambien deberia de abrir otra ventana JPanel con un menú y ese menú contiene mas JButtons para abrir otras ventanas con información.

Pero al introducir los datos el menú no abre, solamente muestra la bienvenida.

Coloque la parte del codigo con el JButton un poco mas separada de lo demas.


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
129
130
131
132
133
134
135
136
137
138
139
140
import java.awt.BorderLayout;
import java.awt.EventQueue;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
 
import java.awt.GridBagConstraints;
import javax.swing.JTextField;
import java.awt.Insets;
import javax.swing.JPasswordField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
 
public class Contraseña extends JFrame {
 
	private JPanel contentPane;
	public static JTextField textUsuario;
	private JLabel Contraseña;
	public static JPasswordField textPass;
	private JButton Salir;
	private JButton Entrar;
 
 
	public Contraseña() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		GridBagLayout gbl_contentPane = new GridBagLayout();
		gbl_contentPane.columnWidths = new int[]{0, 0, 0, 0, 0};
		gbl_contentPane.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0};
		gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
		gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		contentPane.setLayout(gbl_contentPane);
 
		JLabel lblUsuario = new JLabel("Usuario");
		GridBagConstraints gbc_lblUsuario = new GridBagConstraints();
		gbc_lblUsuario.insets = new Insets(0, 0, 5, 5);
		gbc_lblUsuario.gridx = 1;
		gbc_lblUsuario.gridy = 1;
		contentPane.add(lblUsuario, gbc_lblUsuario);
 
		textUsuario = new JTextField();
		GridBagConstraints gbc_textUsuario = new GridBagConstraints();
		gbc_textUsuario.insets = new Insets(0, 0, 5, 0);
		gbc_textUsuario.anchor = GridBagConstraints.NORTH;
		gbc_textUsuario.fill = GridBagConstraints.HORIZONTAL;
		gbc_textUsuario.gridx = 3;
		gbc_textUsuario.gridy = 1;
		contentPane.add(textUsuario, gbc_textUsuario);
		textUsuario.setColumns(10);
 
		Contraseña = new JLabel("Contrase\u00F1a");
		GridBagConstraints gbc_Contraseña = new GridBagConstraints();
		gbc_Contraseña.insets = new Insets(0, 0, 5, 5);
		gbc_Contraseña.gridx = 1;
		gbc_Contraseña.gridy = 3;
		contentPane.add(Contraseña, gbc_Contraseña);
 
		textPass = new JPasswordField();
		GridBagConstraints gbc_textPass = new GridBagConstraints();
		gbc_textPass.insets = new Insets(0, 0, 5, 0);
		gbc_textPass.fill = GridBagConstraints.HORIZONTAL;
		gbc_textPass.gridx = 3;
		gbc_textPass.gridy = 3;
		contentPane.add(textPass, gbc_textPass);
 
 
 
 
 
 
 
 
 
 
 
 
 
		Entrar = new JButton("Entrar");
		Entrar.addActionListener(new ActionListener() {
 
		Menu MENU = new Menu();
		final datosUsuario DU = new datosUsuario();
			public void actionPerformed(ActionEvent arg0) {
				if (DU.probarPass()==1)
				{
					JOptionPane.showMessageDialog(null, "Bienvenido al sistema");
 
					MENU.setVisible(true);
					dispose();
 
				}
				else
				{
					JOptionPane.showMessageDialog(null, "Contraseña o usuario incorrecto");
				}
 
			}
		});
		GridBagConstraints gbc_Entrar = new GridBagConstraints();
		gbc_Entrar.insets = new Insets(0, 0, 5, 0);
		gbc_Entrar.gridx = 3;
		gbc_Entrar.gridy = 5;
		contentPane.add(Entrar, gbc_Entrar);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
		Salir = new JButton("Salir");
		Salir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
		GridBagConstraints gbc_Salir = new GridBagConstraints();
		gbc_Salir.gridx = 3;
		gbc_Salir.gridy = 7;
		contentPane.add(Salir, gbc_Salir);
	}
 
}




Este es el codigo del Menu:

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
import javax.swing.JPanel;
import java.awt.GridBagLayout;
import javax.swing.border.TitledBorder;
import javax.swing.JButton;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
 
public class Menu extends JPanel {
 
	/**
	 * Create the panel.
	 */
	public Menu() {
		setBorder(new TitledBorder(null, "Menu", TitledBorder.CENTER, TitledBorder.TOP, null, null));
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
		gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
		gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		setLayout(gridBagLayout);
 
		JButton Alumnos = new JButton("Alumnos");
		GridBagConstraints gbc_Alumnos = new GridBagConstraints();
		gbc_Alumnos.insets = new Insets(0, 0, 5, 5);
		gbc_Alumnos.gridx = 2;
		gbc_Alumnos.gridy = 1;
		add(Alumnos, gbc_Alumnos);
 
		JButton Docentes = new JButton("Docentes");
		GridBagConstraints gbc_Docentes = new GridBagConstraints();
		gbc_Docentes.insets = new Insets(0, 0, 5, 5);
		gbc_Docentes.gridx = 6;
		gbc_Docentes.gridy = 1;
		add(Docentes, gbc_Docentes);
 
		JButton Asignaturas = new JButton("Asignaturas");
		GridBagConstraints gbc_Asignaturas = new GridBagConstraints();
		gbc_Asignaturas.insets = new Insets(0, 0, 5, 5);
		gbc_Asignaturas.gridx = 2;
		gbc_Asignaturas.gridy = 3;
		add(Asignaturas, gbc_Asignaturas);
 
		JButton Especialidades = new JButton("Especialidades");
		GridBagConstraints gbc_Especialidades = new GridBagConstraints();
		gbc_Especialidades.insets = new Insets(0, 0, 5, 5);
		gbc_Especialidades.gridx = 6;
		gbc_Especialidades.gridy = 3;
		add(Especialidades, gbc_Especialidades);
 
		JButton Calificaciones = new JButton("Calificaciones");
		GridBagConstraints gbc_Calificaciones = new GridBagConstraints();
		gbc_Calificaciones.insets = new Insets(0, 0, 5, 5);
		gbc_Calificaciones.gridx = 2;
		gbc_Calificaciones.gridy = 5;
		add(Calificaciones, gbc_Calificaciones);
 
		JButton Horarios = new JButton("Horarios");
		GridBagConstraints gbc_Horarios = new GridBagConstraints();
		gbc_Horarios.insets = new Insets(0, 0, 5, 5);
		gbc_Horarios.gridx = 6;
		gbc_Horarios.gridy = 5;
		add(Horarios, gbc_Horarios);
 
		JButton Salida = new JButton("Salir");
		Salida.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
		GridBagConstraints gbc_Salida = new GridBagConstraints();
		gbc_Salida.insets = new Insets(0, 0, 0, 5);
		gbc_Salida.gridx = 4;
		gbc_Salida.gridy = 8;
		add(Salida, gbc_Salida);
 
	}
 
}





Y este es el codigo de "datosUsuario"
Aunque no tengo problema con llamar a esta desde el JButton se los dejo aqui:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import javax.swing.JOptionPane;
public class datosUsuario {
 
	public datosUsuario(){
	}
 
	String Usuario="", Pass="";
 
	public int probarPass()
	{
		Usuario=Contraseña.textUsuario.getText();
		Pass=Contraseña.textPass.getText();
 
		if (Usuario.equals("OmarB")&&Pass.equals("OBL"))
		{	return 1;	       }
 
		else
		{	return 2; 	}
 
	}
 
 
}

De antemano muchas gracias
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
sin imagen de perfil

Abrir un Menu desde un JButton

Publicado por Hector (27 intervenciones) el 04/12/2015 01:44:28
Hola Omar, el problema esta en que tienes el concepto de JPanel mezclado con el JFrame, el JFrame es la ventana en donde podrás agregar todos los componentes que quieras, uno de esos componentes puede ser un JPanel que contendrá tus botones, áreas de texto, etc.

Lo que estas haciendo es simplemente instanciar un JPanel de tipo Menu mas no estas cambiando lo que muestra la ventana ni creando otra.

Tienes dos opciones a escoger:

1) Crear una nueva ventana que contendra el menu:

Creas otro JFrame y al JFrame le asignas el Jpanel de Menu, luego ocultas la otra ventana.

2) Cambias los JPanel entre si:

Para cambiar en la misma ventana los visuales, remueves el content actual y luego agregas el nuevo.

1
2
3
4
5
6
    // Reemplazalo por las lineas 97 98 del JFrame
    java.awt.Container content = getContentPane();
    content.removeAll();
    content.add(new Menu());
    content.validate();
    content.repaint();
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
sin imagen de perfil

Abrir un Menu desde un JButton

Publicado por Omar (3 intervenciones) el 04/12/2015 04:29:30
Muchas gracias Hector, ya pude abrir el menú.

Entonces el JFrame es en si la ventana y el JPanel son los contenidos de la ventana, y no podía abrir el menú porque solo tenia guardado su contenido y no lo tenia guardado en una ventana, estoy en lo correcto?

Dentro del menu para abrir las siguientes ventanas con información solamente vuelvo a colocar esos códigos pero cambiando el nombre del JPanel a abrir. Me marcaba error en "getContentPane()" y lo cambie por "getRootPane" y ya ejecutaba, pero al hacer clic se elimina el contenido de la ventana y no aparece la siguiente.
En cambio si abro esa desde la ventana de iniciar sesion si aparece todo correctamente.

Aquí supongo que me falta insertar algo. Ya que antes fue de un JFrame a un JPanel, y ahora quiero reemplazar un JPanel por otro JPanel.
Disculpa las molestias pero si podrias explicarme este otro te lo agradecería mucho.

Este es el codigo de la que quiero abrir desde el menu:
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
import javax.swing.JPanel;
import java.awt.GridBagLayout;
import javax.swing.border.TitledBorder;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;
import javax.swing.JTextField;
import java.awt.Insets;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
 
public class Especialidades extends JPanel {
	private JTextField textNombre;
	private JTextField textClaveEspe;
	private JTextField textPlanEstudio;
 
	/**
	 * Create the panel.
	 */
	public Especialidades() {
		setBorder(new TitledBorder(null, "Especialidades", TitledBorder.CENTER, TitledBorder.TOP, null, null));
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0};
		gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0};
		gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		setLayout(gridBagLayout);
 
		JLabel Nombre = new JLabel("Nombre");
		Nombre.setFont(new Font("Comic Sans MS", Font.BOLD, 16));
		GridBagConstraints gbc_Nombre = new GridBagConstraints();
		gbc_Nombre.insets = new Insets(0, 0, 5, 5);
		gbc_Nombre.gridx = 1;
		gbc_Nombre.gridy = 1;
		add(Nombre, gbc_Nombre);
 
		textNombre = new JTextField();
		GridBagConstraints gbc_textNombre = new GridBagConstraints();
		gbc_textNombre.insets = new Insets(0, 0, 5, 0);
		gbc_textNombre.anchor = GridBagConstraints.NORTH;
		gbc_textNombre.fill = GridBagConstraints.HORIZONTAL;
		gbc_textNombre.gridx = 3;
		gbc_textNombre.gridy = 1;
		add(textNombre, gbc_textNombre);
		textNombre.setColumns(10);
 
		JLabel ClaveEspe = new JLabel("Clave Especialidad");
		ClaveEspe.setFont(new Font("Comic Sans MS", Font.BOLD, 16));
		GridBagConstraints gbc_ClaveEspe = new GridBagConstraints();
		gbc_ClaveEspe.insets = new Insets(0, 0, 5, 5);
		gbc_ClaveEspe.gridx = 1;
		gbc_ClaveEspe.gridy = 3;
		add(ClaveEspe, gbc_ClaveEspe);
 
		textClaveEspe = new JTextField();
		GridBagConstraints gbc_textClaveEspe = new GridBagConstraints();
		gbc_textClaveEspe.insets = new Insets(0, 0, 5, 0);
		gbc_textClaveEspe.fill = GridBagConstraints.HORIZONTAL;
		gbc_textClaveEspe.gridx = 3;
		gbc_textClaveEspe.gridy = 3;
		add(textClaveEspe, gbc_textClaveEspe);
		textClaveEspe.setColumns(10);
 
		JLabel PlanEstudio = new JLabel("Plan estudios");
		PlanEstudio.setFont(new Font("Comic Sans MS", Font.BOLD, 16));
		GridBagConstraints gbc_PlanEstudio = new GridBagConstraints();
		gbc_PlanEstudio.insets = new Insets(0, 0, 5, 5);
		gbc_PlanEstudio.gridx = 1;
		gbc_PlanEstudio.gridy = 5;
		add(PlanEstudio, gbc_PlanEstudio);
 
		textPlanEstudio = new JTextField();
		GridBagConstraints gbc_textPlanEstudio = new GridBagConstraints();
		gbc_textPlanEstudio.insets = new Insets(0, 0, 5, 0);
		gbc_textPlanEstudio.fill = GridBagConstraints.HORIZONTAL;
		gbc_textPlanEstudio.gridx = 3;
		gbc_textPlanEstudio.gridy = 5;
		add(textPlanEstudio, gbc_textPlanEstudio);
		textPlanEstudio.setColumns(10);
 
		JButton Salida = new JButton("Salir");
		Salida.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
		GridBagConstraints gbc_Salida = new GridBagConstraints();
		gbc_Salida.gridx = 3;
		gbc_Salida.gridy = 7;
		add(Salida, gbc_Salida);
 
	}
 
}
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
sin imagen de perfil

Abrir un Menu desde un JButton

Publicado por Hector (27 intervenciones) el 04/12/2015 16:01:40
Es exactamente como dijiste. El Jpanel Menu que habias instanciado no lo estabas ni asignando a otro JFrame ni reemplazandolo en la ventana actual.

Antes lo que estabas haciendo era reemplazar los JPanel desde un JFrame, ahora la cuestion es hacerlo desde un JPanel :)

El problema del getContentPane es porque esa función esta en el objeto JFrame, getRootPane te devuelve el contenedor raiz de ese panel, que en este caso es el mismo, es por eso que te funciona con la solución que usaste, lo unico que te falta es usar el getContentPane para el getRootPane. Seria algo asi:

1
2
3
4
5
6
7
// En el codigo del menu:
javax.awt.Container content = this.getRootPane().getContentPane();
// Otra forma es llamar el contenedor padre, esta forma solo funciona 
// cuando esta siendo contenida directamente por el JFrame
// Si tienes por ejemplo un JPanel que esta siendo contenida por 
// otro JPanel, la opción de arriba es la mas recomendada.
javax.awt.Container content = this.getParent();
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

Abrir un Menu desde un JButton

Publicado por Omar (3 intervenciones) el 10/12/2015 04:48:32
Muchas gracias Héctor, si pude terminar el programa.
De la forma que me dijiste utilizando el
1
javax.awt.Container content = this.getRootPane().getContentPane();
No pude ya que me pedía un muevo método, pero lo que hice fue volver a crear la ventana de Menú pero esta vez como un JFrame y dentro de cada boton ingrese el getContentPane(); para llamar los otros JPanel y asi ya ejecutaba todo correctamente.
Muchisimas gracias por tu ayuda.
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