2015-07-13 1 views
0

Я создаю простое приложение, которое позволяет мне искать информацию сотрудника до сих пор, я могу найти имя, но хочу добавить в поиск больше переменных, например Дата рождения , Адрес, профессия и т. Д., Который отправляется одним действием на JButton.Java Swing: Action Событие для отправки нескольких переменных

Как бы я это сделал? Я изучил использование IF Else и оператора Switch, но у меня нет подсказки, как идти вперед.

private void searchActionPerformed(java.awt.event.ActionEvent evt) {          
    String val1 = textFirstName.getText();  

    try { 
      String sql = "select * from employees where first_name = '"+val1+"'"; 
      stmt = con.createStatement(); 
      rs = stmt.executeQuery(sql); 
      dataTable.setModel(DbUtils.resultSetToTableModel(rs)); 
     } 

    catch (SQLException err) { 
      JOptionPane.showMessageDialog(Appointments.this, err.getMessage()); 

    } 

} 
+0

Пожалуйста, добавьте небольшое количество кода, чтобы показать свою проблему и в идеале, что вы пробовали. – npinti

+0

ОК сделали, в рамках метода я просто хочу, чтобы иметь возможность искать несколько переменных и иметь возможность отправить его с помощью одного JButton. –

ответ

3

Что вы могли бы сделать, это создать динамическую панель, которая будет расти по мере того, как пользователи добавят больше параметров поиска. По существу, у вас будет кнопка Add Search, которая будет добавлять новое поле со списком и текстовое поле при каждом нажатии (при условии, что последнее поле со списком в списке не пуст).

Вам нужно будет создать класс вида:

public class SearchTerm { 
    private int id; 
    private String column; 
    private String value; 

    //Getters and setters and the rest. 
    ... 
} 

После того, что вы создаете поле со списком (который будет содержать все поля, которые пользователи могут осуществлять поиск через) и текстовое поле, которое будет содержать текст, вы можете добавить новый объект SearchTerm в список условий поиска. Поле Id пригодится, если вы хотите разрешить пользователям удалять и/или изменять существующие условия поиска.

Следующим шагом будет создание отдельного слоя, который по существу выполняет поиск. Это приведет к тому, что ваш уровень пользовательского интерфейса будет содержать функциональность пользовательского интерфейса. Шаблон единой ответственности диктует, что класс делает только одно. В настоящее время ваш класс отвечает за операции пользовательского интерфейса и базы данных.

Этот новый слой будет иметь метод, который принимает список из SearchTerm элементов. Оттуда вы создадите свой поисковый запрос, выполнив итерацию по предоставленным объектам SearchTerm и их соответствующим значениям. После этого вы можете вернуть список объектов User, которые напоминают данные в вашей базе данных. Все это должно выполняться в отдельном потоке. Для этого вам понадобятся фоновые работники.

Некоторые дополнительные пункты:

  1. Пожалуйста, убедитесь, что вы используете подготовленные заявления вместо SQL конкатенации. Кроме того, ваше приложение подвержено SQL-инъекции.

  2. В настоящий момент вы выполняете операцию поиска в потоке Диспетчера событий (EDT). Это не рекомендуется, так как этот поток отвечает за поддержание пользовательского интерфейса. Таким образом, если вы выполняете интенсивные операции над этим потоком, пользовательский интерфейс будет страдать (становясь менее отзывчивым или простым замораживанием). Запуск операции поиска в отдельном потоке гарантирует, что EDT не будет увязнуть с не связанными с UI операциями. Затем вы можете обновить пользовательский интерфейс из фонового потока через механизм SwingUtilities.invokeLater.

Смежные вопросы