Как проверить наличие записи, введенной JTextField в базе данных?

У меня есть запрос, который дает мне все фреймы, при заполнении формы и нажатии «ОК» я проверяю, существует ли фрейм, введенный в textfield_bastidor, в BBDD, и если его нет, я выполняю вставку, но я показываю сообщение на экране, что он уже существует, и вставьте еще один.

Не могли бы вы проверить, когда я набираю текст в том же поле ... то есть, проверяю перед отправкой формы, например, когда я оставляю focus() del jTextField, изменяя цвет текстового поля, если он был правильным или неверно?

Код запроса:

public static ArrayList cargar_bastidores() {
        ArrayList<String> bastidores = new ArrayList<String>();
        String bd = Conexiones.bbdd;
        Connection c = (Connection) Conexiones.conexion_a_BBDD(bd);
        Statement stm;
        ResultSet rs;
        try {
            //Consulta para sacar todos los bastidores de la tabla vehiculos.
            stm = c.createStatement();
            String consulta_bastidores = "SELECT bastidor FROM vehiculos ORDER BY bastidor ASC";
            rs = stm.executeQuery(consulta_bastidores);
            //System.out.println("CONSULTA TODOS LOS BASTIDORES: Mostramos todos los bastidores.");
            int i = 0;
            while (rs.next()) {
                String bastidor = rs.getString("bastidor");
                bastidores.add(bastidor);
                i++;
            }
            //System.out.println(bastidores);
            c.close();
        } catch (SQLException e) {
            //e.printStackTrace();
            System.out.println("Ha habido un error.");
        }     
        return bastidores;
    }

Код формы:

//Comprobamos si el bastidor no existe en la base de datos...
        if(!Conexiones.cargar_bastidores().contains(textfield_bastidor.getText())){
            //Depende de qué radiobutton pulsemos...
            if(radiobutton_alquiler.isSelected()){
                //Excepción por si el valor introducido no es un double.
                double precio = 0.0;
                try{
                    precio = Double.parseDouble(textfield_precio.getText());
                }catch(NumberFormatException nfe_precio){
                    nfe_precio.getMessage();
                }
                boolean disponible = checkbox_disponible.isSelected();
                Vehiculo va = new Vehiculo_Alquiler(precio, true, bastidor, color, matricula, modelo, 
                                                    marca, potencia, consumo, f, descripcion);
                //Llamamos al método alta_vehiculo() para insertar el vehículo en la base de datos.
                Conexiones.alta_vehiculo(va);
            }else{
                //Excepción por si el valor introducido no es un double.
                double precio = 0.0;
                try{
                    precio = Double.parseDouble(textfield_precio.getText());
                }catch(NumberFormatException nfe_precio){
                    nfe_precio.getMessage();
                }
                Vehiculo vc = new Vehiculo_Compra(precio, null, bastidor, color, matricula, modelo, 
                                                  marca, potencia, consumo, f, descripcion);
                //Llamamos al método alta_vehiculo() para insertar el vehículo en la base de datos.
                Conexiones.alta_vehiculo(vc);
            }
        }else{
            JOptionPane.showMessageDialog(null, "¡¡¡Este bastidor EXISTE en la base de datos!!!");
            textfield_bastidor.requestFocus();
        }
1
задан 04.01.2017, 19:22
0 ответов

Способ это реализовывать - используя метод addFocusListener, которым обладает класс JTextField.

Этот метод получает инстанцию класса, который осуществлял бы интерфейс FocusListener. Для которого ты хочешь сделать, я смог производить анонимный класс FocusAdapter (FocusAdapter - класс, который осуществляет интерфейс FocusListener) и sobreescribir метод focusLost, что является тем, который взорвется, когда будет теряться фокус ящика текста.

Я помещаю тебе следующий пример, она первый ящик текста - та, кто слушает потерю фокуса:

public class Test {


    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        JPanel panel = (JPanel)frame.getContentPane();
        panel.setLayout( new GridLayout(4, 1));
        final JTextField jTextField = new JTextField();
        final JLabel label = new JLabel("Texto");
        jTextField.addFocusListener( new FocusAdapter() {
            @Override
            public void focusLost(FocusEvent e) {
                System.out.println("Haz perido el foco y tienes en el campo de texto "+jTextField.getText());
                label.setText("Haz escrito: "+jTextField.getText());
            }
        });

        panel.add(jTextField);
        panel.add(label);
        panel.add(new JTextField());
        panel.add(new JTextField());
        frame.pack();
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }
}
0
ответ дан 03.12.2019, 17:53