Checkbox Vaadin-如何将具有布尔值的网格列转换为复选框

Checkbox Vaadin-如何将具有布尔值的网格列转换为复选框,checkbox,vaadin,Checkbox,Vaadin,我正在使用Vaadin 7.6.4进行UI工作。这有以下几点:- 我有一个窗口,其中包含一个包含数据的网格。该窗口实际上是一种弹出窗口[当我的主屏幕点击设置图标(此处未显示)时显示出来]。这工作正常(当点击主屏幕上的设置图标时,让UI屏幕打开Vaadin窗口) 问题在于如下所述显示数据 该网格将有4列,其中数据来自bean容器 第一列是一个布尔字段,根据bean容器中的数据显示true/false 我需要将此布尔字段列转换为带有true的复选框,将字段显示为选中值的复选框。如果该值为false

我正在使用Vaadin 7.6.4进行UI工作。这有以下几点:-

  • 我有一个窗口,其中包含一个包含数据的网格。该窗口实际上是一种弹出窗口[当我的主屏幕点击设置图标(此处未显示)时显示出来]。这工作正常(当点击主屏幕上的设置图标时,让UI屏幕打开Vaadin窗口)
  • 问题在于如下所述显示数据
  • 该网格将有4列,其中数据来自bean容器
  • 第一列是一个布尔字段,根据bean容器中的数据显示true/false
  • 我需要将此布尔字段列转换为带有true的复选框,将字段显示为选中值的复选框。如果该值为false,则显示未选中的复选框
  • 我正试图这样做,如下面的代码所示,但我一直得到这个复选框的名称打印。我没有看到复选框,但字“复选框”打印在那里
  • 该复选框应该是可编辑的。其想法是用户应该能够选择一些复选框,并且选中的复选框应该显示在面板中(此处未显示)。因此,该复选框必须是可编辑的
如何修复此问题?窗口的代码如下所示

package com.platform28.mybatis;

import java.util.List;

import com.vaadin.data.Item;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.data.util.GeneratedPropertyContainer;
import com.vaadin.data.util.PropertyValueGenerator;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
@SuppressWarnings("serial")
public class ConfigPopUp extends Window {
VaadinUtils vaadinUtils = null;

public ConfigPopUp(List<TableColumnData> tblDataLst) {
    vaadinUtils = new VaadinUtils();

    // Some basic content for the window
    VerticalLayout configLayout = new VerticalLayout();
    configLayout.addComponent(new Label("Settings"));
    configLayout.setMargin(true);
    //configLayout.setWidth(null);;
    setContent(configLayout);
    //adding grid.
    List<SettingsColumnData> settingsList = vaadinUtils.processSettingsList(tblDataLst);
    final BeanItemContainer<SettingsColumnData> gridDataSource = new BeanItemContainer<SettingsColumnData>(SettingsColumnData.class, settingsList);

    //change boolean value to checkbox.
    GeneratedPropertyContainer gp = new GeneratedPropertyContainer(gridDataSource);
    gp.addGeneratedProperty("columnDisplayed", new PropertyValueGenerator<CheckBox>() {

        @Override
        public CheckBox getValue(Item item, Object itemId, Object propertyId) {
            boolean currentCheckBoxValue = (boolean) item.getItemProperty("columnDisplayed").getValue();
            CheckBox chkBox = new CheckBox();
            chkBox.setValue(currentCheckBoxValue);
            return chkBox;
        }

        @Override
        public Class<CheckBox> getType() {
            return CheckBox.class;
        }
    });



    Grid settingsGrid = new Grid(gp);
    settingsGrid.setWidth("100%");
    settingsGrid.setSizeFull();
    settingsGrid.setColumnOrder("columnDisplayed", "columnName","columnShortName","columnDescription");
    configLayout.addComponent(settingsGrid);
    //configLayout.setExpandRatio(settingsGrid, 1);

    // Disable the close button
    setClosable(false);

    HorizontalLayout hLayout = new HorizontalLayout();
    hLayout.setSpacing(true);
    hLayout.setMargin(true);

    // Trivial logic for closing the sub-window
    Button ok = new Button("Ok");
    ok.addClickListener(new ClickListener() {
        public void buttonClick(ClickEvent event) {
            close(); // Close the sub-window
        }
    });
    hLayout.addComponent(ok);

    // Trivial logic for closing the sub-window
    Button cancelBtn = new Button("Cancel");
    cancelBtn.addClickListener(new ClickListener() {
        public void buttonClick(ClickEvent event) {
            close(); // Close the sub-window
        }
    });
    hLayout.addComponent(cancelBtn);

    configLayout.addComponent(hLayout);

    // set pop up to center.
    center();
    // should be resizable
    setResizable(true);
    // should not be draggable
    setDraggable(false);
    //set it as modal window
    setModal(true);

    setWidth("50%");

    setHeight("75%");

}
package com.platform28.mybatis;
导入java.util.List;
导入com.vaadin.data.Item;
导入com.vaadin.data.util.BeanItemContainer;
导入com.vaadin.data.util.GeneratedPropertyContainer;
导入com.vaadin.data.util.PropertyValueGenerator;
导入com.vaadin.ui.Button;
导入com.vaadin.ui.Button.ClickEvent;
导入com.vaadin.ui.Button.ClickListener;
导入com.vaadin.ui.CheckBox;
导入com.vaadin.ui.Grid;
导入com.vaadin.ui.HorizontalLayout;
导入com.vaadin.ui.Label;
导入com.vaadin.ui.VerticalLayout;
导入com.vaadin.ui.Window;
@抑制警告(“串行”)
公共类配置窗口{
VaadinUtils VaadinUtils=null;
公共配置弹出窗口(列表TBLDatalist){
vaadinUtils=新的vaadinUtils();
//窗口的一些基本内容
VerticalLayout configLayout=新建VerticalLayout();
configLayout.addComponent(新标签(“设置”);
configLayout.setMargin(true);
//configLayout.setWidth(null);;
设置内容(配置布局);
//添加网格。
列表设置列表=vaadinUtils.processSettingsList(TBLDatalist);
final BeanItemContainer gridDataSource=新的BeanItemContainer(SettingsColumnData.class,settingsList);
//将布尔值更改为复选框。
GeneratedPropertyContainer gp=新生成的PropertyContainer(gridDataSource);
gp.addGeneratedProperty(“columnDisplayed”,新属性ValueGenerator(){
@凌驾
公共复选框getValue(项项、对象项ID、对象属性ID){
布尔currentCheckBoxValue=(布尔)项.getItemProperty(“columnDisplayed”).getValue();
复选框chkBox=新复选框();
chkBox.setValue(currentCheckBoxValue);
返回chkBox;
}
@凌驾
公共类getType(){
返回CheckBox.class;
}
});
网格设置网格=新网格(gp);
settingsGrid.setWidth(“100%”);
setingsGrid.setSizeFull();
settingsGrid.setColumnOrder(“columnDisplayed”、“columnName”、“columnShortName”、“columnDescription”);
configLayout.addComponent(设置网格);
//configLayout.setExpandRatio(settingsGrid,1);
//禁用关闭按钮
可设置(假);
HorizontalLayout hLayout=新的HorizontalLayout();
hLayout.setspace(真);
hLayout.setMargin(真);
//关闭子窗口的简单逻辑
按钮ok=新按钮(“ok”);
ok.addClickListener(新建ClickListener(){
公共作废按钮单击(单击事件){
close();//关闭子窗口
}
});
hLayout.addComponent(确定);
//关闭子窗口的简单逻辑
按钮取消BTN=新按钮(“取消”);
cancelBtn.addClickListener(新建ClickListener(){
公共作废按钮单击(单击事件){
close();//关闭子窗口
}
});
hLayout.addComponent(取消BTN);
configLayout.addComponent(hLayout);
//将弹出窗口设置为中心。
中心();
//应该可以调整大小
可设置大小(真);
//不应该是拖拉的
可设置的(假);
//将其设置为模态窗口
setModal(真);
设置宽度(“50%”);
设定高度(“75%”);
}

}

好的,我们使用SelectionMode.MULTI来显示其中的行选择。

尽管如此,我还是想了解更多关于如何完成上述问题所示的变更的信息


仍在寻找答案。

使用渲染器和转换器,您不需要使用
SelectionMode.MULTI


发布了一个这样的示例。

来自的
CheckboxRenderer
似乎做了您想要的事情,尽管在我的测试中,它在编辑时有一种奇怪的行为。也许您可以从中获得一些灵感,并创建自己的呈现程序,其行为与您想要的一样。作为替代方案,您可以看看装饰gri的插件d与组件的渲染器。感谢您的帮助。但是,我们最终使用了SelectionMode.MULTI选项