我在 vaadin 中创建了一个多选表,但是当我单击它选择所有行时,我不能只选择该表中的一个单元格。
有没有办法只选择一行的一个单元格?
问题的标题并不反映里面的实际问题
有没有办法只选择一行的一个单元格?
不,Vaadin 表的全部意义在于以表格形式反映数据行。将表设置为可选可跟踪表中所选行的 itemId
您可以通过在表格中使用 a来模拟ColumnGenerator
选择单元格,并向生成的组件添加侦听器。然而,移除监听器可能会很棘手。
或者,您可能希望简单地在 a 中生成组件GridLayout
并自己跟踪选定的单元格。
最终,这里的方法实际上完全取决于您要实现的目标。
这取决于您要完成的工作。(您的问题标题和您的问题详细信息解决了两个不同的问题。)如果您想知道是否可以定位特定单元格并为其添加点击侦听器,那么可以,您当然可以:
//initial layout setup
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);
//Create a table and add a style to allow setting the row height in theme.
final Table table = new Table();
table.addStyleName("components-inside");
//Define the names and data types of columns.
//The "default value" parameter is meaningless here.
table.addContainerProperty("Sum", Label.class, null);
table.addContainerProperty("Is Transferred", CheckBox.class, null);
table.addContainerProperty("Comments", TextField.class, null);
table.addContainerProperty("Details", Button.class, null);
//Add a few items in the table.
for (int i=0; i<100; i++) {
// Create the fields for the current table row
Label sumField = new Label(String.format(
"Sum is <b>$%04.2f</b><br/><i>(VAT incl.)</i>",
new Object[] {new Double(Math.random()*1000)}),
Label.CONTENT_XHTML);
CheckBox transferredField = new CheckBox("is transferred");
//Multiline text field. This required modifying the
//height of the table row.
TextField commentsField = new TextField();
//commentsField.setRows(3);
//The Table item identifier for the row.
Integer itemId = new Integer(i);
//Create a button and handle its click. A Button does not
//know the item it is contained in, so we have to store the
//item ID as user-defined data.
Button detailsField = new Button("show details");
detailsField.setData(itemId);
detailsField.addListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
// Get the item identifier from the user-defined data.
Integer iid = (Integer)event.getButton().getData();
Notification.show("Link " +
iid.intValue() + " clicked.");
}
});
detailsField.addStyleName("link");
//Create the table row.
table.addItem(new Object[] {sumField, transferredField,
commentsField, detailsField},
itemId);
}
//Show just three rows because they are so high.
table.setPageLength(3);
layout.addComponent(table);
检查文档可能会有所帮助。