2016-06-16 2 views
-1

First, Last 및 LastFirst라는 세 개의 텍스트 필드가있는 JDialog가 있다고 가정합니다. LastFirst가 포커스를 받으면 처음에는 &의 연결로 설정되지만, 처음에는 &이 비어 있지 않은 경우에만 연결됩니다. 내 예제의 적절한 코드는 작동하지 않습니다. 무엇이 누락 되었습니까?확인 된 다른 필드를 기반으로 필드 설정

import java.awt.Container; 
import java.awt.GridLayout; 
import javax.swing.JOptionPane; 
public class FieldValidatedSetting extends javax.swing.JFrame { 
private javax.swing.JTextField txtFirst; 
private javax.swing.JTextField txtLast; 
private javax.swing.JTextField txtLastFirst; 
// 
//This is supposed to concatenate Last & First and set LastFirst. 
// Empty First or Last fields should result in a message dialog 
// and return for user correction. Problem is it issues the message twice! 
// Please excuse the crummy layout./ 
// Constructor 
private void txtLastFirstFocusGained(java.awt.event.FocusEvent evt)            
if(txtLast.getText().isEmpty() || txtFirst.getText().isEmpty()){ 
     JOptionPane.showMessageDialog(null, "You must enter First & Last"); 
     txtFirst.requestFocusInWindow(); 
    } else{ 
     txtLastFirst.setText(txtLast.getText() + txtFirst.getText()); 
    } 
}    

public FieldValidatedSetting() { 
txtFirst = new javax.swing.JTextField(); 
txtLast = new javax.swing.JTextField(); 
txtLastFirst = new javax.swing.JTextField(); 

txtLastFirst.addFocusListener(new java.awt.event.FocusAdapter() { 
public void focusGained(java.awt.event.FocusEvent evt) { 
      txtLastFirstFocusGained(evt); 
} 
}); 
Container pane = getContentPane(); 
pane.setLayout(new GridLayout(1, 3)); 
pane.add(txtFirst); 
pane.add(txtLast); 
pane.add(txtLastFirst); 
pack(); 
} 
public static void main(String args[]) { 
java.awt.EventQueue.invokeLater(new Runnable() { 
public void run() { 
new FieldValidatedSetting().setVisible(true); 
} 
}); 
} 
} 
+1

''나는 무엇을 놓치고 있습니까? '- 유효한 [mcve]라는 작고도 완벽한 프로그램을 작성하여 게시하면 문제를 증명하는 데 필요한 코드 만 있고, 복사하여 붙여 넣을 수 있습니다 , 수정없이 컴파일하고 실행하면 잘못된 일을 완전히 이해하는 데 도움이됩니다. 이 코드는 오프 사이트 리소스에 대한 링크가 아닌 코드 형식의 텍스트로 게시됩니다. –

+0

[FocusListener]와 [PropertyChangeListener]를 [example] (http://stackoverflow.com/a/8703807/230513)에 사용할 수 있습니다. – trashgod

답변

0

내 실수는 showMessageDialog 후 txtFirst.requestFocusInWindow()를 발행했다. showMessageDialog가 문제를 해결하기 전에 그것을 옮깁니다.

분명히, LastFirst가 포커스를 다시 받기 전에 초점이 다시 잡히지 만 초점이 처음으로 재설정되었습니다. 설명하기는 어렵지만 대답은 먼저 requestFocus에 먼저 전달한 다음 메시지를 발행하는 것입니다.

관련 문제