How to respond to click on a table row in vaadin
Asked Answered
B

6

9

I've got the following code:

public Button getBtnSubmit(com.vaadin.ui.Button.ClickListener l) {
    if (null != l) {
        btnSubmit.addListener(l);
    }
    return btnSubmit;
}

public Table getTableCompany(HeaderClickListener hl) {
    if (null != hl) {
        tableCompany.addListener(hl);
    }
    return tableCompany;
}

I would like to add a listener that fires when I select a (different) row in the table.
This so that I can refresh some other controls with the table data, which listener should I use?

Broadway answered 3/2, 2013 at 17:28 Comment(0)
S
16

addListener is deprecated now. Use the following instead.

table.addItemClickListener(new ItemClickEvent.ItemClickListener() {
    @Override
    public void itemClick(ItemClickEvent itemClickEvent) {
        System.out.println(itemClickEvent.getItemId().toString());
    }
});
Sombrous answered 21/11, 2013 at 17:13 Comment(0)
G
5

I would go for ItemClickListener:

 table.addListener(new ItemClickEvent.ItemClickListener() {

            @Override
            public void itemClick(ItemClickEvent event) {
               //implement your logic here
            }
        });

edit: For Vaadin 7+, use addItemClickListener method instead of addListener.

Gratis answered 4/2, 2013 at 12:48 Comment(4)
If you wish to get the id of the row clicked on then Integer value = (Integer) event.getItem().getItemProperty("id").getValue();Turbinal
what about event.getItemId() ?Gratis
I believe itemId is different from id, I am speaking about a column that is hidden and whose value is used for processing at the backend.Turbinal
This is now deprecated ib Vaadin 7, the answer from Ishan Thilina Somasiri is the correct oneYellowweed
E
1

You want to add a ValueChangeListener

Edette answered 4/2, 2013 at 12:41 Comment(0)
O
1

If you use the ValueChangeListener don't forget to set

  table.setImmediate(true);

This means that the browser will report a change on selection immediately. If you don't set this your listener is not called.

Osteitis answered 5/5, 2014 at 8:15 Comment(0)
E
0

Read https://vaadin.com/book/-/page/components.table.html, section 5.15.1 "Selecting Items in a Table". You want to add a Property.ValueChangeListener.

Expiry answered 1/6, 2013 at 14:55 Comment(0)
T
0

Many of these answers are both correct, and incorrect.

If you need to get the selected items in response to the click, register a ValueChangeListener. Calling getValue() to retrieve the selection from the ItemClickListener might be 1 item behind in a MultiSelect list. For example, the set of items won't include/exclude the item triggering the callback. You will not have a reference to the clicked item however.

If you simply want to respond to a click on an item, and do not need to consider the current selection state, register an ItemClickListener instead. This way you will know what item was actually clicked.

Todo answered 12/8, 2017 at 14:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.