如何在紧凑的 Vaadin 14 / Flow Grid 中添加按钮
How to add a button in a compact Vaadin 14 / Flow Grid
使用 Vaadin 14 / Flow Grid 的内联 java 编辑示例位于:https://vaadin.com/docs/latest/ds/components/grid/#inline-editing-java-only(忽略保存和取消部分)如何为紧凑网格添加编辑按钮。所有其他单元格的高度似乎为 30px,但 addComponentColumn() 的高度似乎为 46px。有 setWidth()
方法但没有 setHeight()
。我的代码是:
Column<T> editColumn = addComponentColumn(t -> {
Button editButton = new Button("Edit");
editButton.addThemeVariants(ButtonVariant.LUMO_SMALL);
editButton.addClickListener(click -> {
if(getEditor().isOpen())
getEditor().cancel();
getEditor().editItem(t);
});
return editButton;
})
例如,要更改宽度,我可以执行 editColumn.setWidth("150px")
,但我似乎无法调整高度,因此如果我使用 grid.addThemeVariants(GridVariant.LUMO_COMPACT)
,它将以紧凑的方式呈现行。无论我做什么,行似乎都以正常高度呈现。
更新 - 只是添加它似乎是具有额外填充的 vaadin-grid-cell-content。使用较小的按钮会有所帮助,但带有按钮的列的填充仍然过多。我不确定如何使用 edit/save 按钮调整列。
您可以调整 Button
的高度以获得您想要的高度。例如:
editButton.getStyle()
.set("margin", "0")
.set("--lumo-button-size", "20px")
.set("--lumo-font-size-s", "12px");
您可以查看此示例以在网格单元格中呈现几乎没有填充的样式:https://cookbook.vaadin.com/grid-dense-theme
要应用它,您需要添加
@CssImport(themeFor = "vaadin-grid", value = "recipe/densegrid/densegrid.css")
并使用这个 css:
:host([theme~="dense"]) [part~="cell"] {
min-height: var(--lumo-size-xxs);
}
:host([theme~="dense"]) {
font-size: var(--lumo-font-size-xs); // use the font size you prefer
}
:host([theme~="dense"]) [part~="cell"] ::slotted(vaadin-grid-cell-content) {
padding: 1px var(--lumo-space-s);
}
:host([theme~="dense"]:not([theme~="no-row-borders"])) [part="row"][first] [part~="cell"]:not([part~="details-cell"]) {
border-top: 0;
min-height: calc(var(--lumo-size-xxs) - var(--_lumo-grid-border-width));
}
默认情况下,Vaadin Grid 即使在紧凑模式下也会在单元格中填充一些内容。
如果您想删除一个单元格的填充,您可以在列上添加一个类名生成器:
grid.addComponentColumn(t -> new Button(t)).setClassNameGenerator(e -> "no-padding-cell");
并删除填充 css:
[part~="cell"].no-padding-cell ::slotted(vaadin-grid-cell-content) {
padding: 0px;
}
将 tertiary-inline
主题变体应用于按钮会删除其所有垂直填充,因此这可能会有所帮助。
使用 Vaadin 14 / Flow Grid 的内联 java 编辑示例位于:https://vaadin.com/docs/latest/ds/components/grid/#inline-editing-java-only(忽略保存和取消部分)如何为紧凑网格添加编辑按钮。所有其他单元格的高度似乎为 30px,但 addComponentColumn() 的高度似乎为 46px。有 setWidth()
方法但没有 setHeight()
。我的代码是:
Column<T> editColumn = addComponentColumn(t -> {
Button editButton = new Button("Edit");
editButton.addThemeVariants(ButtonVariant.LUMO_SMALL);
editButton.addClickListener(click -> {
if(getEditor().isOpen())
getEditor().cancel();
getEditor().editItem(t);
});
return editButton;
})
例如,要更改宽度,我可以执行 editColumn.setWidth("150px")
,但我似乎无法调整高度,因此如果我使用 grid.addThemeVariants(GridVariant.LUMO_COMPACT)
,它将以紧凑的方式呈现行。无论我做什么,行似乎都以正常高度呈现。
更新 - 只是添加它似乎是具有额外填充的 vaadin-grid-cell-content。使用较小的按钮会有所帮助,但带有按钮的列的填充仍然过多。我不确定如何使用 edit/save 按钮调整列。
您可以调整 Button
的高度以获得您想要的高度。例如:
editButton.getStyle()
.set("margin", "0")
.set("--lumo-button-size", "20px")
.set("--lumo-font-size-s", "12px");
您可以查看此示例以在网格单元格中呈现几乎没有填充的样式:https://cookbook.vaadin.com/grid-dense-theme
要应用它,您需要添加
@CssImport(themeFor = "vaadin-grid", value = "recipe/densegrid/densegrid.css")
并使用这个 css:
:host([theme~="dense"]) [part~="cell"] {
min-height: var(--lumo-size-xxs);
}
:host([theme~="dense"]) {
font-size: var(--lumo-font-size-xs); // use the font size you prefer
}
:host([theme~="dense"]) [part~="cell"] ::slotted(vaadin-grid-cell-content) {
padding: 1px var(--lumo-space-s);
}
:host([theme~="dense"]:not([theme~="no-row-borders"])) [part="row"][first] [part~="cell"]:not([part~="details-cell"]) {
border-top: 0;
min-height: calc(var(--lumo-size-xxs) - var(--_lumo-grid-border-width));
}
默认情况下,Vaadin Grid 即使在紧凑模式下也会在单元格中填充一些内容。
如果您想删除一个单元格的填充,您可以在列上添加一个类名生成器:
grid.addComponentColumn(t -> new Button(t)).setClassNameGenerator(e -> "no-padding-cell");
并删除填充 css:
[part~="cell"].no-padding-cell ::slotted(vaadin-grid-cell-content) {
padding: 0px;
}
将 tertiary-inline
主题变体应用于按钮会删除其所有垂直填充,因此这可能会有所帮助。