natso
natso

Reputation: 97

Vaadin - Make added item selectable (and editable)

I would like to make my newly added table item (aka row) selectable as soon as it is added by clicking the add-button. My main purpose is to make it both selectable and editable (but only that row, now the whole table).

Here is the table code:

            public Table createTable(BeanContainer<Long, PS_SECTION> beans) {       
            table.setImmediate(true);
            table.setContainerDataSource(beans);
            table.setColumnHeader("PS_SECTION", "ID");
            table.setColumnHeader("NAME", "SECTION");
            table.setColumnHeader("VORDER","ORDER");

            table.addGeneratedColumn("ACTIVE", new Table.ColumnGenerator() {

                @Override
                public Object generateCell(final Table source, final Object itemId,
                        Object columnId) {              

            table.setTableFieldFactory(new DefaultFieldFactory() {

                @Override
                public Field<?> createField(Container container, final Object itemId, Object propertyId, Component uiContext) {

                        if (!itemId.equals(table.getValue())) {
                               return null;
                        }
                               Field<?> field = super.createField(container, itemId, propertyId, uiContext);
                               field.setBuffered(true);

                    return field;
                }
            });


            table.addValueChangeListener(new Property.ValueChangeListener() {           
                @Override
                public void valueChange(Property.ValueChangeEvent event) {              
                        if (table.getValue() != null) {                     
                            editButton.setVisible(true);
                        } 
                        else {
                            editButton.setVisible(false);
                        }           
                }
            });

            table.addItemClickListener(new ItemClickEvent.ItemClickListener() {
                  @Override
                  public void itemClick(ItemClickEvent itemClickEvent) {
                        if (itemClickEvent.isDoubleClick() && !table.isEditable()) {
                          table.setValue(itemClickEvent.getItemId());
                          configureEditable(true);  
                        // THE FUNCTION THAT MAKES THE SELECTED ROW EDITABLE
                          editButton.setVisible(false);
                          addButton.setVisible(false);
                        }               
                  }
                });


      // ....SOME MORE TABLE ATTRIBUTES HERE....

            return table;
        }

The code above works fine for the selected rows, but how can I make the newly added row directly selected and editable??

addButton.addClickListener(new ClickListener() {            
        @Override
            public void buttonClick(ClickEvent event) {                                     
                addList();  //HERE THE ROW (AND THE BEAN) IS ADDED                  

            /**
             * What to put here?
             *
             */
                configureEditable(true);

            }
    });

Upvotes: 0

Views: 101

Answers (1)

Vikrant Thakur
Vikrant Thakur

Reputation: 725

Object itemId = createNewBean(); //create a new bean, that returns a unique id that can be set as new item id.

table.addItem(itemId); //add this newly created item to the table
//set the column values here for this particular item
table.getItem(itemId).getProperty("column_name").setValue("column_value");
//similarly set values of other columns for this particular item

table.setValue(itemId); //this selects the just added row

I hope it helps.

Upvotes: 1

Related Questions