2017-01-14 1 views
0

하나의 포커스 리스너에 여러 개의 텍스트 필드를 추가하려고하는데, 현재 텍스트 필드를 추가했지만 현재 여러 텍스트 필드를 추가하는 방법을 알지 못합니다.하나의 포커스 리스너에 여러 텍스트 필드 추가하기

+0

에 오신 것을 환영합니다 스택 오버플로! [둘러보기] (http://stackoverflow.com/tour)를 방문하고 둘러보고 [도움말 센터] (http://stackoverflow.com/help)를 읽으십시오. 특히 [어떻게 묻는가?] 좋은 질문입니까?] (http://stackoverflow.com/help/how-to-ask) 및 [여기에 대해 내가 들려 줄 주제는 무엇입니까?] (http://stackoverflow.com/help/on-topic). –

답변

2

각 텍스트 필드에 대한 포커스 수신기를 만드는 것보다 효과적이라고 생각합니다.

보통 그쪽으로 답변은 : "그것은 의존한다 ..."

하지만 귀하의 경우 이드

말 : 각 텍스트 필드는 자신의 수신기 (인스턴스)를 가져야한다. 그 이유는 텍스트 필드의 내용을 변경하기 때문입니다. 하나의 Listener 인스턴스에서만이 작업을 수행하면 영향을받는 텍스트 필드가 무엇이든 상관없이 이벤트가 발생할 때마다 모든 텍스트 필드를 변경하거나 다른 텍스트 필드를 추가하는 경우 if/ else 연쇄가 새 항목을 필요로합니다.

class MyTextFiledFocusListener implements FocusListener { 
    private final JTextFiled textField; 
    MyTextFiledFocusListener(JTextFiled textField){ 
    this.textField = textField; 
    textField.addFocusListener(this); 
    } 
    public void focusGained(FocusEvent e) 
    { 
    textField.setText(""); 
    } 

    public void focusLost(FocusEvent e) 
    { 
    // nothing 
    } 
} 

및 변경에 게시 된 비트 : : 그냥에 대한

new MyTextFiledFocusListener(JT_id); 

나는 당신이 그것을 매개 변수로 텍스트 필드를주는 리스너에 대한 명명 된 내부 클래스를 만들 것을 제안 레코드 :

꽤 많은 스윙 관련 인터페이스는 하나 이상의 메소드가 기본 im을 가지고 있습니다. 빈 메소드를 가진 plement (기본 메소드에 대한 사전 java8 솔루션)은 FocusListener입니다. 이러한 기본 구현은 보통 *Adapter입니다. 당신이 FocusAdapter을 확장 할 때 따라서 당신은 FocusListener을 구현하는 insted 코드를 단축 할 수있다 :

class MyTextFiledFocusListener extends FocusAdapter { 
    private final JTextFiled textField; 
    MyTextFiledFocusListener(JTextFiled textField){ 
    this.textField = textField; 
    textField.addFocusListener(this); 
    } 
    public void focusGained(FocusEvent e) 
    { 
    textField.setText(""); 
    } 
} 
+0

선생님, 도와 주셔서 감사합니다. –

1

어때? 클릭하는 동안

FocusListener clearFields = new FocusListener() { 
public void focusGained(FocusEvent e) 
{ 
    JT_id.setText(""); 
    JT_name.setText(""); 
    JT_add.setText(""); 
    JT_cno.setText(""); 
    JT_email.setText(""); 
} 

public void focusLost(FocusEvent e) 
{ 
    // nothing 
} 
}); 

JT_id.addFocusListener(clearFields); 
JT_name.addFocusListener(clearFields); 
JT_add.addFocusListener(clearFields); 
JT_cno.addFocusListener(clearFields); 
JT_email.addFocusListener(clearFields) 

당신은 여전히 ​​다른 사람에 초점/모두 삭제됩니다/클릭 첫 번째 (JT_id)에 초점을 맞춘 상황을 피하기 위해 텍스트 필드의 모든 포커스 리스너를 추가해야합니다 아무것도하지 않을 것이다.

대체 방법 - 각 텍스트 필드에 해당 필드 만 지우는 포커스 리스너를 지정하십시오.

+0

선생님, 모든 텍스트 필드에 focusListener를 추가하지 않고 특정 필드를 지우는 방법은 없습니까? –

+0

unfortunatelly no. 또는 기다릴 때, 나는 당신이 클릭 한 필드 (포커스를 얻은 필드)를 지우고 싶어한다는 것을 이해했다. 그렇지 않다면 코멘트를 남겨 주시고 질문을 업데이트 해주시기 바랍니다. 그렇지 않으면 "unfortuantelly no"주석이 적용됩니다. – Shark

관련 문제