如何在Vaadin 7中创建一对单选按钮来表示真/假值但是本地化文本?

Bas*_*que 6 java radio-button vaadin vaadin7

我想在Vaadin 7中使用一对单选按钮来表示布尔值,其中每个值都有一个文本显示,例如"活动"和"非活动".

标有

Bas*_*que 11

瓦丁7

本答复针对问题中提出的Vaadin 7.请注意,Vaadin 8使这容易.看到我的另一个答案.

OptionGroup 窗口小部件

在Vaadin 7中,单选按钮作为单个小部件处理,是OptionGroup的一个实例.窗口小部件包含多个项目,如果设置为单项目选择模式,它们将显示为一组单选按钮.

项目ID与项目

对我来说棘手的部分是理解这些命令addItem有点用词不当.我们没有传递完整的Item实例.相反,我们传递一个对象作为项目id.

addItem命令获取项ID,生成一个Item实例并将其返回给您.这有明确记录,但需要一段时间让我沉沦.您可能认为您有义务跟踪返回的项目.但是,不,您可以使用item id稍后检索或比较OptionGroup中的项目.

由于我们不需要跟踪返回的项目,我们可以调用addItems(复数)命令使用一行代码为多个单选按钮创建多个项目.

Boolean作为项目标识

在我们的例子中,我们希望使用布尔值作为核心数据.我们需要对象而不是boolean基元,因为我们正在传递对象.所以我们使用这个Boolean类.请注意,布尔类有几个方便的常量:Boolean.TRUE&Boolean.FALSE.

这些布尔对象可用作项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 );
    }
} );
Run Code Online (Sandbox Code Playgroud)

Lambda语法

顺便说一下......在Java 8中,您可以使用新的备用Lambda语法.如果您愿意,NetBeans 8将建议并执行到lambda语法的转换.

this.activeSupplierRadio.addValueChangeListener(( Property.ValueChangeEvent event ) -> {
    Notification.show( "Radio Button" ,
            "You chose: " + event.getProperty().getValue().toString() ,
            Notification.Type.HUMANIZED_MESSAGE );
});
Run Code Online (Sandbox Code Playgroud)

  • 我在亲对象阵营,希望Java永远不会有原语.我想自动装箱会在这段代码中起作用.但我没有看到好处. (2认同)