Johan
Johan

Reputation: 76567

How to respond to click on a table row in vaadin

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?

Upvotes: 9

Views: 21138

Answers (6)

Steven Spungin
Steven Spungin

Reputation: 29109

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.

Upvotes: 0

ogzd
ogzd

Reputation: 5692

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.

Upvotes: 5

Bruno Eberhard
Bruno Eberhard

Reputation: 1704

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.

Upvotes: 1

Ishan Thilina Somasiri
Ishan Thilina Somasiri

Reputation: 1244

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());
    }
});

Upvotes: 16

herman
herman

Reputation: 12305

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.

Upvotes: 0

Charles Anthony
Charles Anthony

Reputation: 3155

You want to add a ValueChangeListener

Upvotes: 1

Related Questions