是否可以在matlab GUIDE应用程序中选择文本(并且可以复制)但不可编辑?

时间:2016-10-21 16:22:49

标签: matlab matlab-guide

喜欢标题中的问题说。我想要一个文本字段,应该可以像浏览器中的文本一样选择,但不能编辑。

我尝试将Enable属性设置为off和inactive。我也尝试使用文本字段和编辑文本和静态文本框。编辑启用设置为开启的文本框允许我选择它,但不能复制它。我不知道是否存在操作系统特定问题(Ubuntu 16.04),因为matlab似乎想在Linux中使用其他关键快捷方式进行复制粘贴。有趣的是,当我右键单击可选文本时,没有任何反应。

它应该在GUIDE中工作,所以我想在我错过的物业经理中只有一些设置。

1 个答案:

答案 0 :(得分:1)

有一种方法可以实现这一目标,但(i)不是直接在GUIDE中,(ii)甚至不是在纯MATLAB中。此解决方案依赖于MATLAB edit框的未记录的底层java属性。

为了能够访问这些属性,首先需要从文件交换中下载finjobj实用程序。

有了这个,下面的代码在MATLAB R2015a上运行正常,您可能需要调整或调整其他MATLAB版本。

demo_editbox_interception.m的代码:

function h = demo_editbox_interception

% create minimalistic text box
h.fig = figure('Toolbar','none','Menubar','none') ;
h.ht = uicontrol('style','edit','Position',[20 20 300 30],...
    'String','This is a multi-word test string');

% find the handle of the underlying java object
h.jt = findjobj(h.ht) ;
% disable edition of the java text box
h.jt.Editable = 0 ;
% => This leaves you with a text box where you can select all or part of
% the text present, but you cannot modify the text.

%% Now add copy functionality:
% choose which functionality you want from the options below: 
% set(h.ht,'ButtonDownFcn',@copy_full_string)
set(h.ht,'ButtonDownFcn',{@copy_selection,h.jt} )


function str = copy_full_string(hobj,~)
    % this function will copy the ENTIRE content of the edit box into the
    % clipboard. It does NOT rely on the undocumented java properties
    str = get(hobj,'String') ;
    clipboard('copy',str)
    disp(['String: "' str '" copied into the clipboard.'] )


function str = copy_selection(hobj,evt,jt)
    % this function will copy the SELECTED content of the edit box into the
    % clipboard. It DOES rely on the undocumented java properties
    str = jt.SelectedText ;
    clipboard('copy',str)
    disp(['String: "' str '" copied into the clipboard.'] )

你可以看到它有效。用鼠标左键选择文本,然后用右键激活回调(副本):

demo gif