2017-05-16 12 views
0

구성 요소를 클릭하면 JTextField로 텍스트를 설정할 수 있습니까? 나는 그것을 클릭 할 때마다,이 같은 텍스트를 삭제합니다 : 나는 텍스트 필드를 클릭하면JTextField를 클릭 할 때 텍스트를 설정하는 방법은 무엇입니까?

// Clears the "Enter text here..." when clicked 
    commandLine.addMouseListener(new MouseAdapter(){ 
     @Override 
     public void mouseClicked(MouseEvent e){ 
      commandLine.setText(""); 
     } 
    }); 

그러나이, 어떻게 재설정 할 수 있습니까? FocusEvent를 시도했지만 원했던 것처럼 작동하지 않았습니다.

+0

당신은 자리를 구현하려고합니까? – Ollaw

+0

그게 무슨 뜻인지는 모르겠다. JTextField는 "이미 여기에 메시지를 입력하십시오."라고 쓰여져 있습니다 만, JTextField를 클릭하면 메시지가 사라집니다. 클릭하면 같은 메시지가 다시 나타납니다. – Timppa

+0

그 자리 표시 자입니다. 텍스트를 입력하면 예제 텍스트가 남아 있어야합니까? – Ollaw

답변

1

TextField에 FocusListener를 추가하면됩니다. 여기에 제가 작성한 수업이 있습니다.

class CustomPlaceholderTextField extends JTextField implements FocusListener { 

private static final long serialVersionUID = 1L; 
private boolean changedText = false; 
private final String placeholder; 


public CustomPlaceholderTextField(String placeholder){ 
    super(); 
    this.placeholder = Objects.requireNonNull(placeholder); 
    this.addFocusListener(this); 
    super.setText(placeholder); 

} 

@Override 
public String getText() { 
    if (this.changedText) { 
     return super.getText(); 
    } else { 
     return ""; 
    } 
} 

@Override 
public void setText(String t) { 
    if (t == null || t.isEmpty()) { 
     super.setText(this.placeholder); 
     this.changedText = false; 
    } else { 
     super.setText(t); 
     this.changedText = true; 
    } 
} 

@Override 
public void focusGained(FocusEvent e) { 
    if (!this.changedText) { 
     super.setText(""); 
     this.changedText = true; 
    } 
} 

@Override 
public void focusLost(FocusEvent e) { 
    if (this.getText().isEmpty()) { 
     super.setText(this.placeholder); 
     this.changedText = false; 
    } else { 
     this.changedText = true; 
    } 
} 

}

+0

멋지다. commandLine.FocusEvent와 같이 추가 할 수있는 방법이 있습니까? 다른 클래스를 만들 필요가없는 것처럼, 그냥 작은 메서드? – Timppa

+0

그리고 문제는 내가 NetBeans의 WindowBuilder로 내 GUi를 만들었 기 때문에 속성에 가서 편집하지 않으면 스크립트를 편집 할 수 없다는 것입니다. 그래서 그 대신에 몇 가지 방법을 사용합니다. – Timppa

+0

TextField에 FocusListener를 추가하고 focusGained() 및 focusLost()를 원하는대로 구현하십시오. – Ollaw