带有focusLost事件的Java多个消息对话框

时间:2019-05-30 20:33:12

标签: java

问题是,当我在姓字段为空的情况下单击姓字段时,都会出现两条消息,因为即使出现消息对话框,焦点甚至会因为姓而失去焦点。我可以做些什么使程序显示名称消息以及将焦点保持在名称字段上吗?

我尝试了.requestFocus(),但是没有用。

    private void NameFieldFocusLost(java.awt.event.FocusEvent evt) {                                    
            if (NameField.getText().equals('smth')) {
                JOptionPane.showMessageDialog(null, "Please put a name!","Error!", JOptionPane.INFORMATION_MESSAGE);
                }
    }                                                    
    private void SurnameFieldFocusLost(java.awt.event.FocusEvent evt) {                                       
            if (SurnameField.getText().equals("smth")) {
                JOptionPane.showMessageDialog(null, "Please put a surname!","Error!", JOptionPane.INFORMATION_MESSAGE);
            }      
    } 

1 个答案:

答案 0 :(得分:0)

首先,在 NameFieldFocusLost 事件中:if (NameField.getText().equals('smth')) {不会飞行。 equals()方法需要一个字符串:if (NameField.getText().equals("smth")) {或更好的字符串,因为您想确保实际上提供了一个名称:

if (NameField.getText().trim().equals("")) {

一定有一些我们没有被展示的东西。我不明白当焦点从NameFieldFocusLost事件移开时,为什么两个MessageBox都将显示。除非您有代码将焦点移到尤其是在表单真正可见之前,否则这不会发生。 requestFocus()方法应该也可以正常工作,并且应该在显示消息框后的后直接调用,例如:

private void NameFieldFocusLost(java.awt.event.FocusEvent evt) {                                    
    if (NameField.getText().trim().equals("")) {
        JOptionPane.showMessageDialog(this, "Please put a name!","Error!", JOptionPane.INFORMATION_MESSAGE);
        NameField.setText("");      // Clear the JTextField in case a white-space was placed there.
        NameField.requestFocus();   // Force focus back onto the JTextField.
    }
}

如果要在父容器可见之前将焦点移到JTextField (窗体/ JDialog),则可能会遇到特定的问题。