Clear Filters
Clear Filters

enable context menu for specific cell or item in uitable or uilistbox in matlab

16 views (last 30 days)
This is a cross posting from:
Had no luck there so far.
Basically, I'd like to know how to get a context menu to fire on a specific item in a uitable or uilistbox. There seems to be no way to do this without first click on an entry, and then right clicking at the exact same location and assuming that the user hasn't moved their mouse. Even this double clicking approach (left, then right) would be super awkward.

Accepted Answer

Jim Hokanson
Jim Hokanson on 25 Mar 2022
Here's a solution with left click. Couldn't get right to work. More info at linked StackOverflow page above. Code copied here:
classdef wtf < handle
h %struct, this was an appdesigner handle
cm %context menu
function obj = wtf()
h = struct;
h.UIFigure = uifigure();
h.UITable = uitable(h.UIFigure);
obj.h = h;
obj.h.UITable.SelectionChangedFcn = @obj.tableCall;
%Some data ...
s = struct;
s.a = (1:4)';
s.b = (5:8)';
obj.h.UITable.Data = struct2table(s);
%Our context menu
cm = uicontextmenu(obj.h.UIFigure);
m = uimenu(cm,'Text','Menu1'); = cm;
%WTF ... without this we don't get a valid CurrentPoint
obj.h.UIFigure.WindowButtonMotionFcn = @obj.mouseMove;
function tableCall(obj,x,y)
cp = get (obj.h.UIFigure, 'CurrentPoint');
selected_cell = y.Selection;
%Now we can run something on the context menu
%that targets the selected cell
function mouseMove(obj,x,y)
%we could store a point here

More Answers (1)

Jasmine Poppick
Jasmine Poppick on 20 Sep 2023
Starting in R2023b, you can use the InteractionInformation property of the ContextMenuOpeningFcn callback event data to query the table cell or listbox item that was right-clicked to open the context menu, and then show or hide the context menu based on whether you want the menu items to appear.
Here is an example in the documentation that shows how to selectively show a context menu on certain parts of a table.


Find more on Migrate GUIDE Apps 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!