사용자 유형으로 Jtextfield의 내용의 길이를 어떻게 얻을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/401598

  •  03-07-2019
  •  | 
  •  

문제

Jtextfield에는 키가 큰 이벤트가 있지만 당시에는 셀의 내용물이 아직 변경되지 않은 것 같습니다.

이 때문에 .length ()는 여기를 읽으면 항상 잘못입니다.

키 스트로크 후 사용자에게 나타나는 길이를 얻는 간단한 방법이 있어야합니까?

도움이 되었습니까?

해결책

이것은 아마도 최적의 방법이 아니지만 (오랜 시간이 지났는가), 과거에는 jtextfield와 모든 이벤트 (삽입, 업데이트, 제거)에 DocumentListener를 추가했습니다. i :

evt.getDocument().getLength()

텍스트 필드의 내용의 총 길이를 반환합니다.

다른 팁

이것은 이것과 관련이있을 수 있습니다 "버그"(또는 오히려 "기능")

청취자는 청취자가 이벤트를 소비함으로써 이벤트를 "도둑질"할 수 있도록 처리하기 전에 주요 이벤트를 통보받습니다. 이것은 이벤트 소비에 대한 오래된 AWT 개념과 호환성을 제공합니다.
"입력 된"이벤트는 텍스트가 구성 요소에 입력되었음을 의미하지 않습니다.. 이것은 버그가 아니며 의도 된 행동입니다.

가능한 해결책은 An의 말을 듣는 것입니다 관련 문서

// Listen for changes in the text
myTextField.getDocument().addDocumentListener(new DocumentListener() {
  public void changedUpdate(DocumentEvent e) {
  // text was changed
}
public void removeUpdate(DocumentEvent e) {
  // text was deleted
}
public void insertUpdate(DocumentEvent e) {
  // text was inserted
}
});

텍스트가 어떻게 변경 되든 관계없이 이것은 작동합니다. 클립 보드 컷/페이스트를 통해 Progamatic "settext ()"또는 텍스트 필드 또는 UI의 필드에 입력 한 사용자.

KeyEventS는 여기서 적절하지 않은 낮은 수준의 이벤트입니다.

어떻게 JTextField 시스템은 캐릭터가 입력되었음을 알고 있습니까? 주요 유형 이벤트 (IIRC, PL & F를 통해 수행)를 통해. 이벤트가 청취자 전에 시스템 리스너에게 파견됩니까? 그렇지 않을 수도 있습니다.

이 경우, 당신은 아마도 Document 더 높은 수준의 리스너를 추가하십시오. 스윙을 사용하면 'J'클래스 인터페이스가 일관되지 않습니다. 입력 데이터를 가로 채고있는 경우 사용자 정의 모델 (또는 경우 DocumentDocumentFilter).

이 코드 사용 :

public void jTextField6KeyReleased(java.awt.event.KeyEvent evt)
{
    System.out.println(jTextField6.getText().length());
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top