2

我在 vaadin 中创建了一个多选表,但是当我单击它选择所有行时,我不能只选择该表中的一个单元格。

有没有办法只选择一行的一个单元格?

4

2 回答 2

2

问题的标题并不反映里面的实际问题

有没有办法只选择一行的一个单元格?

不,Vaadin 表的全部意义在于以表格形式反映数据。将表设置为可选可跟踪表中所选行的 itemId

可以通过在表格中使用 a来模拟ColumnGenerator选择单元格,并向生成的组件添加侦听器。然而,移除监听器可能会很棘手。

或者,您可能希望简单地在 a 中生成组件GridLayout并自己跟踪选定的单元格。

最终,这里的方法实际上完全取决于您要实现的目标。

于 2012-07-23T11:37:11.343 回答
1

这取决于您要完成的工作。(您的问题标题和您的问题详细信息解决了两个不同的问题。)如果您想知道是否可以定位特定单元格并为其添加点击侦听器,那么可以,您当然可以:

//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);

检查文档可能会有所帮助。

于 2013-07-11T17:50:14.097 回答