How to get clicked row number in table in Vaadin?

vaadin

Solution

You can get your row id by either adding a `ValueChangeListener` or a `ItemClickListener`. Note: The ItemClickListener doesn't respond to keyboard arrow up or arrow down, only ValueChangeListener does.

With the EventObject you get access to the item id.

Table table = new Table();
table.setImmediate(true);
table.setSelectable(true);
table.addListener(new ValueChangeListener() { // With ValueChangeListener respons to keyboard input as well

    public void valueChange(ValueChangeEvent event) {
        getMainWindow().showNotification("ValueChange: ItemId: " + event.getProperty().getValue());
    }
});
table.addListener(new ItemClickListener() { // With ItemClickListener

    public void itemClick(ItemClickEvent event) {
        getMainWindow().showNotification("ItemClick: ItemId" + event.getItemId());
    }
});

In Vaadin7 method names has changed to:

table.addValueChangeListener();
table.addItemClickListener();

Problem

I need to get which row number user clicked to handle my database operations. ``` try { for (int i = 1; i < dbManager.getLastTopicId() + 1; i++) { Integer itemId = new Integer(i); String topicTitle = dbManager.getTitle(Integer.toString(i)); String topicText = dbManager.getText(Integer.toString(i)); String topicAuthor = dbManager.getAuthor(Integer.toString(i)); topicList.addItem(new Object[] {topicTitle, topicText, topicAuthor}, itemId); } } catch (UnsupportedOperationException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } ``` Here I load data to topicList table. I also use `topicList.addValueChangeListener(new Property.ValueChangeListener() { public void valueChange(ValueChangeEvent event)` To handle users click. But I need to get from that Listener, which row number did user clicked. I have tried `topicList.getValue()` and stuff but non of them returns me row number. Thanks

Original source

Related problems