2017-05-13 1 views
0

이 항목은 link이 유용한 것으로 나타났습니다. JavaFX TextField는 숫자 값만 허용합니다. 그러나 여러 개의 TextField에 구현할 수 있도록 솔루션을 단순화하고 싶습니다.JavaFX TextField에서 숫자 입력 만 허용하는 공통 함수

ChangeListener<String> numericTextFieldListener = (observable, oldValue, newValue) -> { 
    if(!newValue.matches("\\d*")) { 
     //textField.setText(newValue.replaceAll("[^\\d]", "")); //how to set this new value to parent text field? 
    } 
}; 

textField1.textProperty().addListener(numericTextFieldListener); 
textField2.textProperty().addListener(numericTextFieldListener); 
textField3.textProperty().addListener(numericTextFieldListener); 
textField4.textProperty().addListener(numericTextFieldListener); 
// ... and so on 

모든 추천 :

같은 뭔가를 찾고 계십니까?

답변

0

당신은 단순히 ChangeListener를 구현하는 새로운 클래스를 만들고 생성자의 인수로 TextField를 전달할 수 1

방법.

class MyChangeListener implements ChangeListener<String> { 

    TextField txt; 

    public MyChangeListener(TextField txt) { 
     this.txt = txt; 
    } 

    @Override 
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { 
     if (!newValue.matches("\\d*")) { 
      txt.setText(newValue.replaceAll("[^\\d]", "")); 
     } 
    } 
} 

이제 MyChangeListener를 인스턴스화하고이 같이 당신의 텍스트 필드에 사용자 정의 ChangeListener를 적용 할 수 있습니다.

textField1.textProperty().addListener(new MyChangeListener(textField1)); 
textField2.textProperty().addListener(new MyChangeListener(textField2)); 
textField3.textProperty().addListener(new MyChangeListener(textField3)); 

당신은 다음과 같이 사용자 정의 텍스트 필드를 만들 수 2

방법.

class NumericalTextField extends TextField { 

    public NumericalTextField() { 
     super(); 
     addListener(); 
    } 

    public NumericalTextField(String txt) { 
     super(txt); 
     addListener(); 
    } 

    private void addListener() { 
     this.textProperty().addListener((observable, oldValue, newValue) -> { 
      if (!newValue.matches("\\d*")) { 
       this.setText(newValue.replaceAll("[^\\d]", "")); 
      } 
     }); 
    } 
} 

및 인스턴스화.

TextField txt1 = new NumericalTextField(); 
TextField txt2 = new NumericalTextField("Text"); 
관련 문제