【问题标题】:Space after clearing TextField in JavaFx在 JavaFx 中清除 TextField 后的空格
【发布时间】:2015-10-28 13:56:50
【问题描述】:

我正在使用 JavaFX 制作一个应用程序,并且想知道为什么在我清除我的 TextField 后会有一个空格。以下代码是出现此错误的地方。

    TextField field = new TextField();  

    field.setPromptText("Start typing!");

    field.setOnKeyTyped(e -> {

        if (Character.isWhitespace(e.getCharacter().charAt(0))) {

            System.out.println(field.getText());
            field.clear();
        }
    });

这是添加一个简单的 if 语句后的简单修复。

    TextField field = new TextField();  

    field.setPromptText("Start typing!");

    field.setOnKeyTyped(e -> {

        if (Character.isWhitespace(e.getCharacter().charAt(0))) {

            if (Character.isWhitespace(field.getText().charAt(0)))
                field.setText(field.getText().substring(1, field.getText().length()));

            System.out.println(field.getText());
            field.clear();
        }
    });

但是,这并没有告诉我为什么在我清除文本 field.clear(); 或将文本设置为空字符串 field.setText(""); 后会有空格。有没有办法在不添加空格的情况下清除文本,或者这只是 TextFields 的一个错误?

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    这是因为handle() 在字符添加到文本字段之前被调用。每次键入时,都会发生以下情况:

    • handle 方法被调用,它检查字符,清除文本字段。
    • 文本字段在从方法返回后将字符添加到文本字段。

    有一个称为consume() 的方法可以阻止事件的进一步传播。只要条件为真,您就可以使用它,这将防止添加空间。

    if (Character.isWhitespace(e.getCharacter().charAt(0))) {
       System.out.println(field.getText());
       field.clear();
       e.consume();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2014-03-15
      • 2022-06-12
      • 1970-01-01
      相关资源
      最近更新 更多