小部件类型

虽然“ Widget ”对于接口来说非常直观,但是有几个中间实现可以使定义小部件变得更容易。

描述

“抽象小部件”

实现“getProperties()”, “getSources()”, 和 “titleProperty()”

“单一类型小部件”

添加只支持一种数据类型的小部件特性

“带注释的小部件”

给带有 “@Description”注释的小部件添加“getName()” 和 “getDataTypes()” 的默认实现

“单一资源小部件”

对于只有一个源的小部件(默认情况下,小部件支持多个源)

“单一带注释的小部件”

合并“单一类型小部件”,“带注释的小部件” 和“单一资源小部件”

还有两个注释可以帮助定义widget:

名称

描述

“@参数化控制器”

允许小部件成为通过FXML定义的JavaFX视图的FXML控制器

“@描述”

让名称和支持的数据类型定义在一行中

抽象小部件

此类实现了“getProperties()”、“getSources()”、“addSource()”和“titleProperty()”。它还定义了一个方法 exportProperties(Property<?>...) 方法,因此子类可以轻松添加自定义小部件属性,或小部件中 JavaFX 组件的属性。基础插件中的大部分`widgets <https://github.com/wpilibsuite/shuffleboard/tree/main/plugins/base/src/main/java/edu/wpi/first/shuffleboard/plugin/base/widget> `_ 使用这个。

单一类别小部件

一种只支持一种数据类型的小部件。这个接口是参数化的,具有设置或获取数据的方法,以及获取小部件(单个)数据类型的方法。

带注释的小部件

This interface implements getDataTypes() and getName() by looking at the @Description annotation on the implementing class. This requires the annotation to be present, or the widget will not be able to be loaded and used.

// No @Description annotation!
public class WrongImplementation implements AnnotatedWidget {
  // ...
}
@Description(name = ..., dataTypes = ...)
public class CorrectImplementation implements AnnotatedWidget {
  // ...
}

单一资源小部件

一种只用一个资源的小部件。

单一带注释的小部件

“SingleTypeWidget1”, “AnnotatedWidget”, 和“SingleSourceWidget” 的组合。大多数基本插件中的小部件从这个类中拓展而来。这同时也有一个“受保护的”名叫“dataOrDefault” 的字段,它在小部件没有资源或资源显示“null”时使子类别们使用没有资源的默认数据。

@参数化控制器

这个注释可以放在小部件类上,让shuffleboard知道它是通过FXML定义的JavaFX视图的FXML控制器。注释接受一个参数,该参数定义了FXML文件*相对于它所在的类的位置*。例如,目录“src/main/java/com/acme”中的一个小部件,它是“ src/main/resources/com/acme”中的一个FXML文件的FXML控制器,可以使用注释作为任何一种

@ParametrizedController("MyWidget.fxml")

或作为

@ParametrizedController("/com/acme/MyWidget.fxml")

@描述

当与’ AnnotatedWidget ‘ _一起使用时,这允许小部件的名称和受支持的数据类型由单个注释定义。