Java GUI使用一个Jtextfield进行文本和数字输入

时间:2016-11-21 01:17:59

标签: java swing user-interface intellij-idea jframe

我有一个DAO类,其中包含一些方法,例如通过ID和数据库中的名称获取员工。方法运作正常。

现在我决定使用IntelliJ IDEA的GUI Designer创建一个简单的表单。我希望能够在同一个JtextField中输入ID(int值)或名称(String值),并在单击" Submit"之后显示结果。按钮。是否可以或者我应该为每种类型的输入创建额外的JTextField和JButton对吗?

现在我可以使actionPerformed方法仅对方法searchEmployees(按名称)和getAllEmployees正常工作(它只是使" SELECT * FROM employees"如果用户点击带有空JTextField的JButton)。 我是构建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);
}}

修改 我试图修改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 个答案:

答案 0 :(得分:0)

我们建议您从catch块中获取错误消息,而是在那里做一些更有用的事情。如果输入了catch块,那么您知道idTextField不包含有效的数字数据,您应该使用该文本使用名称或文本数据而不是数字数据来提取数据。类似的东西:

    @Override
    public void actionPerformed(ActionEvent e) {
        String idText = idTextField.getText().trim();
        try {
            int value = Integer.parseInt(idText);

            // if we have reached this line, then idText is numeric

            // code here to get Employee by value number

        } catch (NumberFormatException e1) {

            // don't show an error message here!
            // If we get here we know that idText is **not** numeric

            // code here to to get Employee by name using idText
        }
    }

但是我自己,我不喜欢这种kludgery,而是试图让我的代码更加白痴。您可以使用JRadioButtons允许用户使用文本或数字进行数据提取,然后装配JTextField,以便在用户选择数字选项时不会接受文本。例如,可以通过在JTextField文档上设置和删除DocumentFilter来完成此操作。