JavaFX fxml "fx:id" 属性的有效字符是什么?

What are the valid characters for a JavaFX fxml "fx:id" attribute?

这在某处有记录吗?它是标准 XML 准则吗?

我可以在 SceneBuilder 中分配 fx:id="table$abc",但是 "table>abc" 出错了。

在 FXMLLoader 的源代码中有一个方法 processAttribute(...)"uumh" 处理 fx:idfx:controller 等属性。验证 fx:id 的代码是:

if ( localName.equals( FX_ID_ATTRIBUTE ) )
{
    // Verify that ID is a valid identifier
    if ( value.equals( NULL_KEYWORD ) )
    {
        throw constructLoadException( "Invalid identifier." );
    }

    for ( int i = 0, n = value.length(); i < n; i++ )
    {
        if ( !Character.isJavaIdentifierPart( value.charAt( i ) ) )
        {
            throw constructLoadException( "Invalid identifier." );
        }
    }

    fx_id = value;
}

所以 fx:id 中的每个字符都用 Character.isJavaIdentifierPart() 检查。

Character.isJavaIdentifierPart('$');  // returns true
Character.isJavaIdentifierPart('>');  // returns false

因此使用 > 字符将抛出 LoadException,而 $ 则不会。

可能不存在有效 fx:id 名称的文档,但至少阅读 Character.isJavaIdentifierPart() 的 javadoc 会给你一些见解。