Widget Types
While Widget
is pretty straightforward as far as the interface is concerned, there are several intermediate implementations to make it easier to define the widget.
Class |
Description |
---|---|
|
Implements |
|
Adds properties for widgets that only support a single data type |
|
Adds default implementations for
|
|
For widgets with only a single source (by default, widgets support multiple sources) |
|
Combines |
There are also two annotations to help define widgets:
Name |
Description |
---|---|
|
Allows widgets to be FXML controllers for JavaFX views defined via FXML |
|
Lets the name and supported data types be defined in a single line |
AbstractWidget
This class implements getProperties()
, getSources()
, addSource()
, and titleProperty()
. It also defines a method exportProperties(Property<?>...)
method so subclasses can easy add custom widget properties, or properties for the JavaFX components in the widget. Most of the widgets in the base plugin use this.
SingleTypeWidget
A type of widget that only supports a single data type. This interface is parametrized and has methods for setting or getting the data, as well as a method for getting the (single) data type of the widget.
AnnotatedWidget
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 {
// ...
}
SingleSourceWidget
A type of widget that only uses a single source.
SimpleAnnotatedWidget
A combination of SingleTypeWidget<T>
, AnnotatedWidget
, and SingleSourceWidget
. Most widgets in the base plugin extend from this class. This also has a protected
field called dataOrDefault
that lets subclasses use a default data value if the widget doesn’t have a source, or if the source is providing null
.
@ParametrizedController
This annotation can be placed on a widget class to let shuffleboard know that it’s an FXML controller for a JavaFX view defined via FXML. The annotation takes a single parameter that defines where the FXML file in relation to the class on which it is placed. For example, a widget in the directory src/main/java/com/acme
that is an FXML controller for a FXML file in src/main/resources/com/acme
can use the annotation as either
@ParametrizedController("MyWidget.fxml")
or as
@ParametrizedController("/com/acme/MyWidget.fxml")
@Description
This allows widgets to have their name and supported data types defined by a single annotation, when used alongside AnnotatedWidget.