我们正在开发一些Form,但在Vaadin Forms中使用CustomLayout。我们在HTML中使用了Label of Field并希望禁止TextField Caption。还想在文本字段的左侧创建必需的属性。
图形设计师和开发人员之间存在任务分离,因此自定义布局对我们来说很方便,所以我们现在不能使用任何其他布局。
目前我的测试屏幕如下,[仅在表格中添加了两个字段用于自定义布局] 正如您所看到的那样,“hello”标题是Text Box的顶部,我想完全删除它。这个标题仅用于说明目的,否则我将其设为空,但表中仍有空格。另外,我想让所需的指标与文本框对齐。
我做了一个Form Field工厂并尝试了很多选择,但没有运气。
如果需要进行任何特定的CSS更改,请清楚告诉我如何添加它,因为我是CSS新手。基于之前对论坛的讨论,我在TextField中添加了以下样式而没有任何成功,
myLabel.setStyleName("inline");
并使用CSS:
.inline, .inline div { display: inline; }
[我的情况是我将它添加到TextField对象}
答案 0 :(得分:3)
“还想在文本字段的左侧创建必需的属性”如果你想要make field,你应该为它设置属性.setRequired(true);
如果您想手动处理表单中的所有元素位置,您应该执行以下操作:
public class YourFormextends Form{
private YourForm() {
setImmediate(true);
setValidationVisible(false);
setValidationVisibleOnCommit(false);
setValidationVisible(false);
setValidationVisibleOnCommit(false);
setWriteThrough(false);
VerticalLayout formLayout = createFormLayout();
setLayout(formLayout);
setFormFieldFactory(yourFormFieldFactory());
}
public static VerticalLayout createFormLayout() {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
final VerticalLayout formErrorLayout = new VerticalLayout();
final VerticalLayout formFieldLayout = formFieldLayout();
layout.addComponent(formErrorLayout, CREATE_FORM_ERROR_LAYOUT_INDEX);
layout.addComponent(formFieldLayout, CREATE_FORM_FIELD_LAYOUT_INDEX);
return layout;
}
private static VerticalLayout formFieldLayout() {
VerticalLayout rootLayout = new VerticalLayout();
rootLayout.setSpacing(true);
rootLayout.setMargin(false, false, true, false);
GridLayout layout = new GridLayout();
layout.setRows(1);
layout.setColumns(3);
rootLayout.addComponent(layout);
return rootLayout;
}
private FormFieldFactory activityFormFieldFactory() {
FormFieldFactory factory = new FormFieldFactory() {
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
@Override
public Field createField(Item item, Object propertyId, Component uiContext) {
String fieldName = (String) propertyId;
if (fieldName.equals(FIELD_NAME_HELLO)) {
if (EDIT_MODE) {
TextField textField = new TextField(FIELD_NAME_HELLO);
textField.setRequired(true);
return textField;
}
}
}
}
@Override
protected void attachField(Object propertyId, Field field) {
String fieldName = (String) propertyId;
VerticalLayout formFieldLayout = getFormFieldLayout();
if (fieldName.equals(FIELD_NAME_HELLO)) {
GridLayout layout = (GridLayout) formFieldLayout.getComponent(0);
layout.addComponent(fieldCaption, 0, 0);
layout.addComponent(field, 1, 0);
layout.addComponent(fieldDescription, 2, 0);
}
}
}
}