限制Vaadin中的OptionGroup宽度

时间:2014-02-06 16:53:44

标签: css vaadin styling

我有几个具有很长字幕的OptionGroup,它们在页面宽度上运行,看起来非常糟糕。我尝试使用setWidth和CSS限制OptionGroup的宽度,并尝试限制父容器的宽度;一切都没有效果。

所以我在第一列(跨越所有行)中创建了一个带有选项组的网格布局,并在第二列中创建了标题的单个标签(每行一个)。但是,如果字幕跨越多行(在我的情况下它们会这样做),这会导致单选按钮/复选框不再与字幕对齐。 (遗憾的是,我不允许发布图片。)例如,

(o)这是一条多线 (o)标题
这是另一条多线 字幕

我通过为每个标签创建一个OptionGroup并在第一列中添加每个选项组来解决此问题:

(o)这是一条多线 标题
(o)这是另一条多线 字幕

显然,对于单选按钮,这意味着可以同时选择多个按钮,因为它们不再通过单个OptionGroup链接。因此,我注册了一些听众,每次选择一个按钮时,都会取消选择所有其他按钮。这让我想到了我的问题;由于这种“取消检查”是在服务器端完成的,因此不可避免地存在一些延迟,这意味着在一段时间内,会在客户端选择多个单选按钮。

有关如何解决此问题的任何想法?我最近才开始和Vaadin合作,所以我远非专家。是否有一些简单的方法来限制标题宽度(一些神奇的未记录的CSS类),或者我是否需要扩展/调整客户端小部件实现?

谢谢,

威廉

1 个答案:

答案 0 :(得分:2)

您需要的是FlexibleOptionGroup插件。

以下是一个示例实现:

@Override
protected void init(VaadinRequest request) {
    Container cont = new IndexedContainer();
    cont.addContainerProperty("caption", String.class, "");
    // very long strings in the following setValue() methods 
    cont.getContainerProperty(cont.addItem(), "caption").setValue("I have...");
    cont.getContainerProperty(cont.addItem(), "caption").setValue("So I ma...");

    FlexibleOptionGroup fog = new FlexibleOptionGroup(cont);
    fog.setCaption("FlexibleOptionGroup:");
    fog.setItemCaptionPropertyId("caption");
    fog.setMultiSelect(true); // force using CheckBoxes

    VerticalLayout fogLayout = new VerticalLayout();
    Iterator<FlexibleOptionGroupItemComponent> iter;
    iter = fog.getItemComponentIterator();
    while(iter.hasNext()) {
        // OptionGroupItem part (CheckBox or RadioButton)
        FlexibleOptionGroupItemComponent fogItemComponent = iter.next();
        // CustomComponent part
        Label caption = new Label(fogItemComponent.getCaption());
        caption.setWidth(400, Unit.PIXELS);
        fogLayout.addComponent(new HorizontalLayout(fogItemComponent, caption));
    }
    setContent(fogLayout);
}

上面的代码产生:

enter image description here