首页 > 解决方案 > JavaFX 输入字段不接受制表符

问题描述

所以我可能有一个简单的问题,但我在谷歌上找不到任何人问这个问题,所以现在我在这里。

问题很简单 - 我必须复制一行包含空格和制表符的文本,但是一旦我将它复制到我的文本(输入)字段中,由于某种原因它会删除所有制表符,所以它将文本全部保留在一大堆东西,我无法从中过滤掉任何东西。

任何想法可以做些什么,以便这些输入字段允许制表符?

PS通过在输入字段内按tab,它在按钮之间移动,而不是输入制表符。

标签: javajavafx

解决方案


a 的内容TextField由私有静态类表示TextFieldContentTextFieldContent实现insert(int index, String text, boolean notifyListeners)过滤输入文本的方法。该方法使用TextInputControl类中的静态方法来删除“非法”字符,这里是实现:

@Override 
public void insert(int index, String text, boolean notifyListeners) {
    text = TextInputControl.filterInput(text, true, true);
    if (!text.isEmpty()) {
        characters.insert(index, text);
        if (notifyListeners) {
            ExpressionHelper.fireValueChangedEvent(helper);
        }
    }
}

最后一个参数TextInputControl.filterInput(text, true, true)定义制表符是否“非法”。它设置为true,正如我之前提到的,该类是一个私有静态最终类,您不能扩展它并覆盖insert方法

解决方案是扩展TextInputControl并创建一个Content不删除制表符的自定义类。

作为替代方案,您可以使用TextArea, 文本区域接受制表符。


推荐阅读