En los proyectos varias veces es necesario de disponer de diferentes ventanas (JFrame) destinadas a alguna operación en particular, supongamos que tenemos una ventana principal, en esta podremos escoger diferentes operaciones: Conectar, Ingresar datos, Limpiar datos, Desconectar, etc. Ahora, con este ejemplo se dispondrá una ventana para realizar la conexión y otra para ingresar datos, hasta el momento se tiene como ejemplo 3 ventanas en una sola aplicación (Ventana principal, ventana de conexión y ventana de ingreso de datos). La gran pregunta es: ¿Como cerrar la ventana de conexión o de ingreso de datos después que se realice la operación?
Bueno, para tal tarea Java nos proporciona dos métodos interesantes: dispose() y hide(); solo hace falta el buen ejemplo, para esto usaremos el caso particular que describí en la «introducción»:
package ejemcloseventanas;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class EjemCloseVentanas implements ActionListener{
private JButton btCon, btIng, btLim, btDes, btConUser, btIngUser;
private JTextArea jtAMos = new JTextArea(30, 30);
JPanel jp1;
private JLabel jlNom, jlPas, jlIngNom, jlIngTel;
private JTextField jtNom, jtIngNom, jtIngTel;
private JPasswordField jpFPas;
JFrame VenCon, VenIng;
private EjemCloseVentanas(){
JFrame VentMain = new JFrame("Ventana Principal");
VentMain.setLayout(new BorderLayout(30, 25));
VentMain.setSize(640, 480);
VentMain.setLocation(60, 40);
VentMain.setResizable(false);
VentMain.setVisible(true);
VentMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
botones();
jtAMos.setEditable(false);
VentMain.add(jp1, BorderLayout.WEST);
VentMain.add(jtAMos, BorderLayout.EAST);
}
private void botones (){
jp1 = new JPanel( new GridLayout(4, 1, 25, 55));
btCon = new JButton("Conectar");
btIng = new JButton("Ingresar");
btLim = new JButton("Limpiar");
btDes = new JButton("Desconectar");
jp1.add(btCon); jp1.add(btIng); jp1.add(btLim); jp1.add(btDes);
btIng.setEnabled(false); btLim.setEnabled(false); btDes.setEnabled(false);
btCon.addActionListener(this); btIng.addActionListener(this);
btLim.addActionListener(this); btDes.addActionListener(this);
jp1.setVisible(true);
}
public void Conectar (){
VenCon = new JFrame("Ventana Conectar");
VenCon.setLayout(null);
jlNom = new JLabel("Nombre "); jlPas = new JLabel("Contraseña ");
jtNom = new JTextField(); jpFPas = new JPasswordField();
btConUser = new JButton("Conectar !");
jpFPas.addActionListener(this); btConUser.addActionListener(this);
VenCon.add(jlNom); VenCon.add(jtNom); VenCon.add(jlPas); VenCon.add(jpFPas);
VenCon.add(btConUser);
jlNom.setBounds(10, 20, 60, 20); jtNom.setBounds(90, 20, 70, 20);
jlPas.setBounds(10, 50, 70, 20); jpFPas.setBounds(90, 50, 70, 20);
btConUser.setBounds(50, 80, 95, 20);
VenCon.setVisible(true); VenCon.setResizable(false);
VenCon.setSize(300, 250);
VenCon.setLocation(100, 60);
}
public void ingresar(){
VenIng = new JFrame("Ventana Ingresar");
VenIng.setLayout(null);
jlIngNom = new JLabel("Nombre "); jtIngNom = new JTextField();
jlIngTel = new JLabel("Telefono "); jtIngTel = new JTextField();
btIngUser = new JButton("Ingresar");
VenIng.add(jlIngNom); VenIng.add(jtIngNom);
VenIng.add(jlIngTel); VenIng.add(jtIngTel); VenIng.add(btIngUser);
jlIngNom.setBounds(10, 20, 65, 24); jtIngNom.setBounds(80, 20, 65, 24);
jlIngTel.setBounds(10, 45, 65, 24); jtIngTel.setBounds(80, 45, 65, 24);
btIngUser.setBounds(30, 70, 90, 24);
jtIngTel.addActionListener(this); btIngUser.addActionListener(this);
VenIng.setVisible(true); VenIng.setResizable(false);
VenIng.setSize(250, 200); VenIng.setLocation(100, 60);
}
public static void main(String[] args) {
EjemCloseVentanas Vent1 = new EjemCloseVentanas();
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btCon){
Conectar();
}
else if(e.getSource() == btConUser || e.getSource() == jpFPas){
String user="admin", pass="1234";
if(jlNom.getText().equals("") || String.valueOf(jpFPas.getPassword()).equals("")){
JOptionPane.showMessageDialog(null, "Digite valores validos en ambos campos");
}
else if(jlNom.getText().equals(user) || String.valueOf(jpFPas.getPassword()).equals(pass)){
btCon.setEnabled(false);
btIng.setEnabled(true); btLim.setEnabled(true); btDes.setEnabled(true);
VenCon.dispose();//linea destruir la ventana de conectar
}
}
else if(e.getSource() == btIng){
ingresar();
}
else if(e.getSource() == btIngUser || e.getSource() == jtIngTel){
if( jtIngNom.getText().equals("") || jtIngTel.getText().equals("")){
JOptionPane.showMessageDialog(null, "Digite valores validos en ambos campos");
}
else{
jtAMos.append("Nombre: "+ jtIngNom.getText() + "t"+ "Telefono: "+jtIngTel.getText() + "n");
VenIng.hide(); //linea ocultar la ventana de ingresar datos
}
}
else if(e.getSource() == btLim){
jtAMos.setText("");
}
else if(e.getSource() == btDes){
jtAMos.setText("");
btCon.setEnabled(true);
btIng.setEnabled(false); btLim.setEnabled(false); btDes.setEnabled(false);
}
}
}
Esta aplicación de ejemplo tiene ciertos requerimientos, primero se tiene que conectar para realizar las demás operaciones, mientras no se conecte los demás botones estarán des habilitados; los métodos para cerrar las ventanas se usan en las lineas 127 y 139, en la linea 127 se usa dispose para asegurarnos de no usar recursos del sistema innecesareamente, en cambio en la linea 139 usamos hide ya que seguramente ingresaremos muchos datos y la ventana necesita estar lista cuando se necesite. Ademas, se tiene un área de texto al lado derecho para mostrar los datos que se han ingresado.
¿Has notado aplicaciones desconocidas o un drenaje inesperado de la batería? Estos podrían ser indicios…
Saber cómo Restablecer un iPhone a su Estado de Fábrica es clave para solucionar problemas…
Motorola ha confirmado el lanzamiento de Moto G84 5G y Moto G54 5G en India,…
Recuerde WizardCoder, ¿el codificador de IA que cubrimos recientemente aquí en Windows Report? Nos jactamos…
Los investigadores han descubierto numerosos fallos de seguridad en el complemento WordPress Jupiter X Core…
Para solucionar problemas del sistema de PC con Windows, necesitará una herramienta dedicada Fortect es…
Ver comentarios
Belial9826 no puedo conectarme :( ¿Que debo hacer?