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»:
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 141 142 143 144 145 146 147 148 149 150 151 | 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); } } } |
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.
Belial9826 no puedo conectarme 🙁 ¿Que debo hacer?