Matlab - отображать задний край длинных строк в списке, наведя указатель мыши на строку - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть список Matlab, в котором некоторые строки очень длинные.Я не хочу делать список слишком широким только из-за этих нескольких длинных строк.Есть ли способ отобразить задний край этих длинных строк в моем списке, просто наведя указатель мыши на эти строки, не используя панель прокрутки?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

См. Ответ Яна с использованием объектов Java.Отлично сработало.

% Prepare the Matlab listbox uicontrol
hFig = figure;
listItems =   {'apple','orange','banana','lemon','cherry','pear','melon'};
hListbox = uicontrol(hFig, 'style','listbox', 'pos',[20,20,60,60],  'string',listItems);

% Get the listbox's underlying Java control
jScrollPane = findjobj(hListbox);

% We got the scrollpane container - get its actual contained listbox control
jListbox = jScrollPane.getViewport.getComponent(0);

% Convert to a callback-able reference handle
jListbox = handle(jListbox, 'CallbackProperties');
% Set the mouse-movement event callback
set(jListbox, 'MouseMovedCallback', {@mouseMovedCallback,hListbox});

% Mouse-movement callback
function mouseMovedCallback(jListbox, jEventData, hListbox)
% Get the currently-hovered list-item
mousePos = java.awt.Point(jEventData.getX, jEventData.getY);
hoverIndex = jListbox.locationToIndex(mousePos) + 1;
listValues = get(hListbox,'string');
hoverValue = listValues{hoverIndex};

% Modify the tooltip based on the hovered item
msgStr = sprintf('<html>item #%d: <b>%s</b></html>', hoverIndex, hoverValue);
set(hListbox, 'Tooltip',msgStr);
end  % mouseMovedCallback

https://www.mathworks.com/matlabcentral/answers/436048-display-trailing-edge-of-a-long-strings-of-a-listbox-by-hovering-the-mouse-over-the-string#answer_352806

0 голосов
/ 17 декабря 2018

Возможно, вы можете установить свойство TooltipString вашего списка.Это то, что отображается при наведении курсора на какой-либо объект.Это не будет хорошим или удобным для пользователя, но лучше, чем ничего.

%Create a listbox
myListbox = uicontrol('Style','listbox');
set(myListbox,'TooltipString','','Callback',@listboxCB);

%Callback function called each time the listbox value is changed
%It should also be called whenever the 'String' property is updated
function listboxCB(obj,evt)
    %Get the value 
    v=get(obj,'Value');
    if isempty(v)
        set(myListbox,'TooltipString','');
        return;
    end
    %Get the string corresponding to that line
    str = get(obj,'String');
    str = str{v(1)};         %Show the first one (if 'multiselect' = 'on')
    set(myListbox,'TooltipString',str);
end

Может быть какой-то умный способ, напрямую взаимодействуя с базовыми объектами Java.

...