uitable autofill without cursor jumping to cell (1,1)

3 views (last 30 days)
Hi
I've made a gui where I have a uitable that should take the users input an paste it into another cell, for example:
What is in cell(1,2) should be pasted into cell(2,1), and cell(2,2) pasted into cell(3,1) and so on.
I've used this answer to write my code.
function uitable1_CellEditCallback(hObject, eventdata, handles)
table = get(handles.uitable1,'data');
Depth_data = table(:,2);
for h = 1:size(table,1)-1
table(h+1,1) = Depth_data(h);
end
set(handles.uitable1,'data',table);
It does what it is supposed to do, but this is where I have an irritating error, when I enter values the cursor or tab jumps to cell(1,1), so I cant just press enter and it jumps to the next cell, how do I fix this? Is there a way to store where the cursor is and then make it jump back to that cell or the next instead of jumping to cell(1,1) all the time?
  2 Comments
Jan
Jan on 15 May 2018
Edited: Jan on 15 May 2018
I do not understand the logic behind: (1,2) -> (2,1), (2,2) -> (3,1). What exactly does "and so on" mean?
A shorter and simpler code without a loop:
s = size(table,1);
table(2:s, 1) = table(1:s-1, 2);
Mikkel Ibsen
Mikkel Ibsen on 15 May 2018
What I'm trying to build is a program that uses layer depths. So the user only enters the end depth of the layers, where the program den automaticity shows the user that the previous layers end depth, is also the same as the new layers starting depth.
When I say and so on, is because the matrix could have 1 to 100 rows, where it should do the same thing, cell(1,2) = cell(2,1) ; cell(2,2) = cell(3,1) ; cell(3,2) = cell(4,1)... and so on..
I just want a code where when you enter a number in cell(1,2) the number also shows in cell(2,1) and where the cursor then doesnt jump to cell(1,1) because you "refreshed" the table.

Sign in to comment.

Accepted Answer

Jan
Jan on 15 May 2018
Edited: Jan on 18 May 2018
[EDITED] Code suggested in this thread:
jUIScrollPane = findjobj(handles.uitableHandle);
jUITable = jUIScrollPane.getViewport.getView;
jUITable.changeSelection(row-1, col-1, false, false);
  5 Comments
Jan
Jan on 18 May 2018
Is it worth to discuss, if there should be a way, when there is none? Selecting a cell programmatically works using the underlying Java methods and there is no officially supported method to do this in plain Matlab. I think, this code is easy enough to be used - see [EDITED] in my answer.
Be careful with the technical terms:
In the handle (eventdata) i have the "cell"
EventData is a struct. Although handles is a struct also, EventData is not a handle in any way.
Mikkel Ibsen
Mikkel Ibsen on 18 May 2018
Hi Jan
You were right, I made it work using your commands, and now I can even make different codes to force the "cursor" to jump to the next cell automatically. Thx

Sign in to comment.

More Answers (0)

Categories

Find more on Interactive Control and Callbacks in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!