Actualmente estoy trabajando en un programa que se inserta en una base de datos SQL. Mi inserto funciona bien. Creé una ventana para abrir con 8 JTextFields para que el usuario ingrese su información. Sin embargo, tengo problemas para obtener la información de JTextField. Obtengo valores en blanco cuando intento imprimir, por ejemplo, var1
. ¿Está mal mi sintaxis? -postToTable es un método estático en otra clase que agrega un usuario a la base de datos.
private void initialize() { textField_FName = new JTextField(); textField_FName.setBounds(239, 32, 130, 26); frame.getContentPane().add(textField_FName); textField_FName.setColumns(10); vari0 = textField_FName.getText(); btnSubmit = new JButton("Submit"); btnSubmit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { JOptionPane.showMessageDialog(null, "('"+vari0+"','"+vari1+"','"+vari2+"','"+vari3+"','"+vari4+"','"+vari5+"','"+vari6+"','"+vari7+"')"); DB_Jpanel.postToTable(vari0,vari1,vari2,vari3,vari4,vari5,vari6,vari7); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); btnSubmit.setBounds(143, 249, 117, 29); frame.getContentPane().add(btnSubmit); } }
Está extrayendo el texto del JTextField llamando a getText()
inmediatamente después de haber creado el JTextField, y mucho antes de que el usuario haya tenido tiempo de colocar texto dentro de él. No es así como funciona la GUI de Swing o cualquier GUI basada en eventos . La clave es comprender cómo funciona la programación impulsada por eventos y, en su lugar, extraer el texto, por ejemplo, llamar a getText()
, desde el JTextField en respuesta a un evento, aquí dentro del ActionListener de su botón. Luego, se llamará a este código cuando el usuario presione el botón y, con suerte, después de que haya colocado el texto pertinente dentro del JTextField.
Así que cambia como:
private void initialize() { textField_FName = new JTextField(); // .... // vari0 = textField_FName.getText(); // ****** remove this ***** btnSubmit = new JButton("Submit"); btnSubmit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { vari0 = textField_FName.getText(); // ***** add this ****** try { JOptionPane.showMessageDialog(null, "('"+vari0+"','"+vari1+"','"+vari2+"','"+vari3+"','"+vari4+"','"+vari5+"','"+vari6+"','"+vari7+"')"); DB_Jpanel.postToTable(vari0,vari1,vari2,vari3,vari4,vari5,vari6,vari7); } catch (Exception e1) { e1.printStackTrace(); } } }); // ... }
Notas:
setBounds()
pueden parecer a los novatos de Swing como la forma más fácil y mejor de crear GUI complejas, cuantas más GUI de Swing cree, más serias serán las dificultades con las que se encontrará al usarlos. No cambiarán el tamaño de sus componentes cuando la GUI cambie de tamaño, son una bruja real para mejorar o mantener, fallan por completo cuando se colocan en paneles de desplazamiento, se ven horribles cuando se ven en todas las plataformas o resoluciones de pantalla que son diferentes de la original. .