我有一个DAO类,其中包含一些方法,例如通过ID和数据库中的名称获取员工 . 方法正常 .
现在我决定使用IntelliJ IDEA的GUI Designer创建一个简单的表单 . 我希望能够在同一个JtextField中输入ID(int值)或名称(String值),并在单击“Submit”按钮后显示结果 . 是否可以或者我应该为每种类型的输入创建额外的JTextField和JButton对?
现在我可以使actionPerformed方法只对方法searchEmployees(按名称)和getAllEmployees正常工作(如果用户单击带有空JTextField的JButton,它只会生成“SELECT * FROM employees”) . 我是构建GUI应用程序的新手,因此欢迎所有改进代码的建议 .
这是我的代码
public class EmployeeApp extends JFrame {
private JPanel panelMain;
private JButton searchButton;
private JScrollPane scrollPane;
private JTextField idTextField;
private JLabel lastNameLabel;
private EmployeesDao employeesDao;
public EmployeeApp() {
// create the DAO
try {
employeesDao = new EmployeesDao();
} catch (Exception exc) {
JOptionPane.showMessageDialog(this, "Error: " + exc, "Error", JOptionPane.ERROR_MESSAGE);
}
searchButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
String searchValue = idTextField.getText();
List<Employee> employees;
if (searchValue != null && searchValue.trim().length() > 0) {
employees = employeesDao.searchEmployees(searchValue);
} else {
employees = employeesDao.getAllEmployees();
}
for (Employee temp : employees) {
System.out.println(temp);
}
} catch (Exception exc) {
JOptionPane.showMessageDialog(EmployeeApp.this, "Error: " + exc, "Error", JOptionPane.ERROR_MESSAGE);
}
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame("EmployeeApp");
frame.setContentPane(new EmployeeApp().panelMain);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}}
Edit: 我试图修改try / catch块,现在当我在JTextField中输入一个数字时,getEmployeeById方法正常工作 . 但是当输入一个字符串时,我得到一个NumberFormatException .
searchButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String searchValue = idTextField.getText();
List<Employee> employees;
Employee employee;
try {
int numValue = Integer.parseInt(searchValue);
employee = employeesDao.getEmployeeById(numValue);
System.out.println(employee);
if (searchValue != null && searchValue.trim().length() > 0) {
employees = employeesDao.searchEmployees(searchValue);
}
else {
employees = employeesDao.getAllEmployees();
}
for (Employee temp : employees) {
System.out.println(temp);
}
} catch (Exception exc) {
JOptionPane.showMessageDialog(EmployeeApp.this, "Error: " + exc, "Error", JOptionPane.ERROR_MESSAGE);
}
}
});
1 回答
我们建议您从catch块中获取错误消息,而是在那里做一些更有用的事情 . 如果输入了catch块,那么您知道idTextField不包含有效的数字数据,您应该使用该文本使用名称或文本数据而不是数字数据来提取数据 . 就像是:
但是我自己,我不喜欢这种类型的kludgery,而是试图使我的代码更加白痴 . 您可以使用JRadioButtons允许用户使用文本或数字进行数据提取,然后装配JTextField,以便在用户选择数字选项时它不接受文本 . 例如,可以通过在JTextField的Document上设置和删除DocumentFilter来完成此操作 .