【问题标题】:Matlab Edit Text Boxes - Show Hint?Matlab 编辑文本框 - 显示提示?
【发布时间】:2012-05-05 21:28:20
【问题描述】:

使用 Matlab GUI 时,有没有办法在编辑文本框中放置“提示”?也就是说,一旦用户开始输入,文本就会消失?我在 Android 中使用过类似的功能,但我对其他 GUI 不太熟悉,所以我不确定这个功能的普及程度。

【问题讨论】:

    标签: matlab user-interface


    【解决方案1】:

    这在 Matlab 中是可能的,但您必须定义一个自定义 MouseClickCallback,它只能由 Yair Altman 使用 findjobj 访问(使用链接从 Matlab File Exchange 下载它并将其保存在您的 Matlab 路径中的某个位置)。

    因为我喜欢这个想法,所以我编写了一个函数来方便地处理这一切。它会创建一个灰显的斜体帮助文本,一旦您单击编辑框就会消失。

    function setInitialHelp(hEditbox,helpText)
    %SETINITIALHELP adds a help text to edit boxes that disappears when the box is clicked
    %
    % SYNOPSIS: setInitialHelp(hEditbox,helpText)
    %
    % INPUT hEditbox: handle to edit box. The parent figure cannot be docked, the edit box cannot be part of a panel.
    %       helpText: string that should initially appear as help. Optional. If empty, current string is considered the help.
    %
    % SEE ALSO uicontrol, findjobj
    %
    % EXAMPLE   
    %           fh = figure;
    %           % define uicontrol. Set foregroundColor, fontAngle, before 
    %           % calling setInitialHelp
    %           hEditbox = uicontrol('style','edit','parent',fh,...
    %             'units','normalized','position',[0.3 0.45 0.4 0.15],...
    %             'foregroundColor','r');
    %           setInitialHelp(hEditbox,'click here to edit')
    %
    
    % check input
    if nargin < 1 || ~ishandle(hEditbox) || ~strcmp(get(hEditbox,'style'),'edit')
        error('please supply a valid edit box handle to setInitialHelp')
    end
    
    if nargin < 2 || isempty(helpText)
        helpText = get(hEditbox,'string');
    end
    
    % try to get java handle
    jEditbox = findjobj(hEditbox,'nomenu');
    if isempty(jEditbox)
        error('unable to find java handle. Figure may be docked or edit box may part of panel')
    end
    
    % get current settings for everything we'll change
    color = get(hEditbox,'foregroundColor');
    fontAngle = get(hEditbox,'fontangle');
    
    % define new settings (can be made optional input in the future)
    newColor = [0.5 0.5 0.5];
    newAngle = 'italic';
    
    % set the help text in the new style
    set(hEditbox,'string',helpText,'foregroundColor',newColor,'fontAngle',newAngle)
    
    % add the mouse-click callback
    set(jEditbox,'MouseClickedCallback',@(u,v)clearBox());
    
    % define the callback "clearBox" as nested function for convenience
        function clearBox
            %CLEARBOX clears the current edit box if it contains help text
    
            currentText = get(hEditbox,'string');
            currentColor = get(hEditbox,'foregroundColor');
    
            if strcmp(currentText,helpText) && all(currentColor == newColor)
                % delete text, reset color/angle
                set(hEditbox,'string','','foregroundColor',color,'fontAngle',fontAngle)
            else
                % this is not help text anymore - don't do anything
            end
    
        end % nested function
    
    end % main fcn
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 2018-04-24
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      相关资源
      最近更新 更多