我想要一双radio buttons在 Vaadin 7 表示 boolean 值,其中每个值都有文本显示,例如“Activity ”和“非 Activity ”。
最佳答案
Vaadin 7
此答案针对问题中提出的 Vaadin 7。请注意,Vaadin 8 使这很多变得更容易。参见 my other Answer .
选项组
小部件
在 Vaadin 7 中,单选按钮作为单个小部件处理,是 OptionGroup 的实例。 .该小部件包含多个 Items , 如果设置为 single item selection mode , 它们显示为一组单选按钮。
项目 ID 与项目
对我来说棘手的部分是理解 addItem
这样的命令有点用词不当。我们不传全Item
实例。相反,我们传递一个对象作为 项目的 ID。
addItem
命令获取项目 ID,生成一个 Item
实例并将其返回给您。这已清楚地记录在案,但我花了一段时间才明白。您可能认为您有义务跟踪退回的元素。但是,不,您可以使用项目 ID 稍后检索或比较 OptionGroup 中的项目。
由于我们不需要跟踪退回的元素,我们可以调用 addItems
(复数)命令使用一行代码为多个单选按钮创建多个项目。
boolean 值作为项目 ID
在我们的例子中,我们想使用 boolean 值作为我们的核心数据。我们需要对象而不是 boolean
基元,因为我们要传递对象。所以我们使用 Boolean
类(class)。请注意 Boolean 类有几个方便的常量:Boolean.TRUE
和 Boolean.FALSE
。
这些 boolean 对象可以用作项目 ID。
示例代码
使用 Vaadin 7.3.2 的一些示例代码。
this.activeCustomerRadio = new OptionGroup( "Filter By:" ); // Pass a string used as caption (title) of the group of radio buttons.
this.activeCustomerRadio.addItems( Boolean.TRUE , Boolean.FALSE ); // Pass item ids to be used in constructing Item objects on our behalf.
this.activeCustomerRadio.setItemCaption( Boolean.TRUE , "Active" ); // Specify a textual label rather than default generated value "true" & "false".
this.activeCustomerRadio.setItemCaption( Boolean.FALSE , "Inactive" );
this.activeCustomerRadio.setValue( Boolean.FALSE ); // Specify which radio button is selected by default.
// Add a listener to react to user selection.
this.activeCustomerRadio.addValueChangeListener( new Property.ValueChangeListener()
{
@Override
public void valueChange ( Property.ValueChangeEvent event )
{
Notification.show( "Radio Button" ,
"You chose: " + event.getProperty().getValue().toString() ,
Notification.Type.HUMANIZED_MESSAGE );
}
} );
Lambda 语法
顺便说一下……在 Java 8 中,您可以使用新的替代项 Lambda syntax .如果您愿意,NetBeans 8 会建议并执行到 lambda 语法的转换。
this.activeSupplierRadio.addValueChangeListener(( Property.ValueChangeEvent event ) -> {
Notification.show( "Radio Button" ,
"You chose: " + event.getProperty().getValue().toString() ,
Notification.Type.HUMANIZED_MESSAGE );
});
关于java - 如何在 Vaadin 7 中制作一对单选按钮来表示真/假值但本地化文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26352420/