如何停止限制JavaFX文本框上的击键

时间:2013-12-23 17:11:54

标签: java javafx

就像标题所说,我试图将Javafx文本字段限制为30个字符。我不想创建自己的文本字段,因为那时,你不能在场景构建器中使用它。到目前为止,我使用OnKeyPressed

调用以下函数
@FXML public void limitKeys(KeyEvent e){
  if(e.getSource().equals(this.propertySerialNum)){
      if(this.propertySerialNum.getLength() > 30){
          switch(e.getCode()){
              case BACK_SPACE:
                  break;
              default:
                  e.consume();
                  break;
          }
      }
  }
}

所以我试图只在长度超过30个字符时才使用keyevent。但是用户可以一直使用退格键。但目前它消耗了该事件但仍显示文本。我不知道我在这里失踪了什么。

1 个答案:

答案 0 :(得分:1)

您可以创建自己的TextField并在SceneBuilder

中使用它

这个post中解释了一个很好的例子。

通常,在OnKeyPressed事件上绑定自己不会总是阻止字段上的最大长度(在TextField内部粘贴内容)。我链接的帖子中描述了很多很好的例子。

主要是,您要创建一个覆盖以下方法的TextField

class LimitedTextField extends TextField {

    private final int limit;

    public LimitedTextField(int limit) {
        this.limit = limit;
    }

    @Override
    public void replaceText(int start, int end, String text) {
        super.replaceText(start, end, text);
        verify();
    }

    @Override
    public void replaceSelection(String text) {
        super.replaceSelection(text);
        verify();
    }

    private void verify() {
        if (getText().length() > limit) {
            setText(getText().substring(0, limit));
        }

    }
};