How to add additional rows to uitable?

I have (X,Y) vextor pairs for storing spectral data. If someone wants to correct the vectors I make an uitable user input, where users can correct, replace etc. the data they have (uitable has two columns). Is there any easy way to add new rows (or columns??) to the existing uitable if the user wants to add some extra data not just correct the existing data?
I think it should be possible because in the variable window you can easily change the size of a variable just using the matrix where the variable is written, simply put a number to any matrix element. The variable size will immediately change and the missing values would be filled by zero. I would like to have something similar.

 Accepted Answer

Mario Malic
Mario Malic on 8 Mar 2021
Edited: Mario Malic on 8 Mar 2021
Hey,
1st option:
KeyPressFcn callback, see UITable callbacks. Create a CellSelectedFcn callback first that saves selected cell in a property so you can access it from anywhere. Then with KeyPressFcn detect if button 'insert' is pressed, if yes, insert a row into the Data property of uitable.
If you want only to add the row only at the end of the table, then KeyPressFcn will be sufficient,
2nd option:
I have made a demo app for this purpose here. If you add the vector with any values to the component, it will expand
app.UITable.Data(end+1) = zeros(1, width(app.UITable.Data));

7 Comments

Yes, I found out this workaround myself, but I think it is not at all elegant. It includes two more buttons etc.
If there would be a keyboard callback (which I could not found) that would be a really nice solution. Why there is no such a callback? Then you might use "insert", "delete", "down arrow" etc keyboard keys instead of adding more and more button objects to the window where uitable is sitting. In 'Variables window' it is solved, so there should be a hidden solution somewhere in the 'deep MATLAB'.
So I can accept your answer as a workaround but I do not like it -:)
Mario Malic
Mario Malic on 8 Mar 2021
Edited: Mario Malic on 8 Mar 2021
What about KeyPressFcn, see UITable callbacks. Create a CellSelectedFcn callback first that saves selected cell in a property so you can access it from anywhere. Then with KeyPressFcn detect if button 'insert' is pressed, if yes, insert a row into the Data property of uitable.
Edit: if you want only to add the row only at the end of the table, then KeyPressFcn will be sufficient,
In my help there is no KeyPressFcn property. I have 2019b. Do you know when it was introduced? The reference you have given says it is valid for 2020b, but I do not see when it was introduced.
Mario Malic
Mario Malic on 8 Mar 2021
Edited: Mario Malic on 8 Mar 2021
I can't see when are callbacks added, as this information is not added in Release Notes
You can assign a KeyPressFcn to uifigure. If you only have one uitable that you want to add the rows into, you're can pass its handle to the function, if you have few, then you can use CurrentObject property of uifigure to determine on which table you want to add the rows.
I have checked the handle of my uitable, and really there is a KeyPressFcn property (of course empty) which I was missing for long time and believing in help I did not check. Crazy me!!!! I will always check the handles in the future!
Anyway, thank you for your suggestion!!!! Please repeat your suggestion as an answer and I will accept it!
Great! You're welcome.
I have edited this answer.

Sign in to comment.

More Answers (0)

Categories

Find more on App Building in Help Center and File Exchange

Products

Release

R2019b

Asked:

on 8 Mar 2021

Commented:

on 8 Mar 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!