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

1 visualización (últimos 30 días)
Mikkel Ibsen
Mikkel Ibsen el 15 de Mayo de 2018
Comentada: Mikkel Ibsen el 18 de Mayo de 2018
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 comentarios
Jan
Jan el 15 de Mayo de 2018
Editada: Jan el 15 de Mayo de 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 el 15 de Mayo de 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.

Iniciar sesión para comentar.

Respuesta aceptada

Jan
Jan el 15 de Mayo de 2018
Editada: Jan el 18 de Mayo de 2018
[EDITED] Code suggested in this thread:
jUIScrollPane = findjobj(handles.uitableHandle);
jUITable = jUIScrollPane.getViewport.getView;
jUITable.changeSelection(row-1, col-1, false, false);
  5 comentarios
Jan
Jan el 18 de Mayo de 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 el 18 de Mayo de 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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Environment and Settings en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by