如何获取活动对象 MATLAB GUI 的句柄

2024-05-06

我正在尝试使用 MATLAB GUI 创建日历。 我有两个Edit Text对象 -edittext1 and edittext2.

我想做这个: 我把光标放在edittext1然后在日历中选择日期,它会进入文本字段edittext1。 同样对于edittext2:如果我将光标放入edittext2并选择放入的日期edittext2编辑文本。

我知道我可以通过这种方式使用日历回调。

问题:

如何将回调函数处理程序放入活动编辑文本对象? 如何获取光标现在所在的对象的句柄?


有关focus问题,没有active单击 java 日历上的日期时的文本框,因为active此时的组件isjava 日历。

了解哪个文本框处于活动状态last,您只需要跟踪它即可。一种方法是向编辑框添加回调,这将更新变量(存储在appdata) 与最新活动文本框的句柄。

有了这个,日历的回调将只检索日期,然后将其放入最后登录文本框。

注:ButtonDownFcn文本框的事件只会在左侧触发and如果文本框右键单击'enable'财产是'off' or 'inactive'。 (如果是'on',则仅检测到右键单击)。这就是为什么我将文本框声明为inactive。这并不妨碍您以编程方式更新文本,所以我认为这不是问题。


代码为testcalendar.m:

function testcalendar
handles.f = figure;

commonEditProperties = {'Style', 'edit', 'String', '', ...
    'Units', 'Normalized', ...
    'Enable','inactive' , ...
    'callback',@EditBoxFcn , ...
    'ButtonDownFcn',@EditBoxFcn } ;

handles.ledit = uicontrol( commonEditProperties{:}, 'Position', [0.1 0.1 0.3 0.1], 'Tag','ledit'  );
handles.redit = uicontrol( commonEditProperties{:}, 'Position', [0.5 0.1 0.3 0.1], 'Tag','redit' );

% preallocate a variable to hold the active text box handle
setappdata(handles.f,'activeTextBox',[]) ;

com.mathworks.mwswing.MJUtilities.initJIDE;
% Put calendar to my figure
handles.jPanel = com.jidesoft.combobox.DateChooserPanel;
[handles.hPanel,handles.hContainer] = javacomponent(handles.jPanel,[100,100,200,200], handles.f);

juiFunHandle = handle(handles.jPanel, 'CallbackProperties');
set(juiFunHandle, 'MousePressedCallback', ...
   @(src, evnt)CellSelectionCallback(src, evnt, handles));
set(juiFunHandle, 'KeyPressedCallback', ...
   @(src, evnt)CellSelectionCallback(src, evnt, handles));

% store gui handles in application data
guidata(handles.f , handles)
end

function EditBoxFcn(hobj,~)
    handles = guidata(hobj) ;
    ActiveTextBox = get(hobj,'Tag') ;
    setappdata( handles.f , 'activeTextBox', handles.(ActiveTextBox) ) ;
end

function CellSelectionCallback(~, ~, handles)

    % retrieve the handle of the active text box
    ActiveTextBox = getappdata(handles.f,'activeTextBox') ;

    % assign a default active text box if none was selected before
    if isempty(ActiveTextBox) ; ActiveTextBox = handles.ledit ; end

    numRetry = 10 ;
    for k=1:numRetry
        pause(0.1)
        dateString = char( javaMethodEDT('getSelectedDate', handles.jPanel) ) ;
        if ~isempty(dateString) ; break ; end
    end

    set(ActiveTextBox , 'String' , dateString ) ;
end

看看它的实际效果:


Edit

没有纯粹的 Matlab 方法可以让您的 Matlab 编辑框完全可编辑an对任何鼠标按钮的单击做出反应(触发事件)。
您可以通过使用底层 java 对象的文本框来获得此功能。这个 java 对象公开了很多事件,您可以选择您需要的事件。

要点:
想要获取底层java对象的句柄,需要使用万能的findjobj效用由亚尔奥特曼。您可以从此处的文件交换下载最新版本:findjobj https://uk.mathworks.com/matlabcentral/fileexchange/14317-findjobj-find-java-handles-of-matlab-graphic-objects

将其保存在 Matlab 路径中后,只需将上面示例中定义编辑框的第一行代码替换为:

commonEditProperties = {'Style', 'edit', 'String', '', 'Units', 'Normalized', 'Enable','on' } ;

handles.ledit = uicontrol( commonEditProperties{:}, 'Position', [0.1 0.1 0.3 0.1] );
handles.redit = uicontrol( commonEditProperties{:}, 'Position', [0.5 0.1 0.3 0.1] );
% preallocate a variable to hold the active text box handle
setappdata(handles.f,'activeTextBox',[]) ;

% Find the java underlying object for the text boxes
ledit = findjobj(handles.ledit) ;
redit = findjobj(handles.redit) ;
% assign a callback to the java object (which CAN detect single click)
set(ledit,'MouseClickedCallback',@(h,e) setappdata( handles.f , 'activeTextBox', handles.ledit ) ) ;
set(redit,'MouseClickedCallback',@(h,e) setappdata( handles.f , 'activeTextBox', handles.redit ) ) ;

并且可以完全注释或删除子功能EditBoxFcn因为回调操作是直接完成的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取活动对象 MATLAB GUI 的句柄 的相关文章

  • Matlab:如何更改矩阵的存储方式?从 1x1x3 到 1x3?

    我目前有 val 1 0 7216 val 2 0 7216 val 3 0 7216 但我想要 0 7216 0 716 0 721 我可以做什么样的操作来做到这一点 The reshape函数将在这里解决问题 Arrange the e
  • 通过 inflate 将 XML 属性从合并布局转换为relativelayout

    根据这个 CommonsWare 示例 我设法将我的relativelayout子类与具有合并根的xml布局中描述的布局合并 我唯一担心的是我无法在 xml 中描述我的relativelayout参数 我的 xml 布局
  • PyQt/PySide 中有默认图标吗?

    我正在阅读 PySide 上的教程 我在想 我是否需要为每件事找到自己的图标 或者是否有某种方法可以使用一些内置图标 这样 如果我希望我的小 GUI 在另一个桌面环境上运行 我就不需要找到一套全新的图标 您需要的是 Pyside QIcon
  • 找不到布局变小的原因

    这是我的代码 几乎按预期工作 在讨论问题之前 请先查看代码 请原谅我的代码很长 但这可以像 java 类一样粘贴 我使用 NETBEANS JForm 设计器来获取 GUI package test import java awt even
  • PySide / Python GUI 冻结

    我目前正在为 rvplayer 编写一个 GUI 它将使艺术家能够自动渲染带有板岩和老化信息的样片 GUI 使用 PySide 编写并使用 Python 2 7 编写脚本 我的问题是 在调用我的流程并更新我的QProgressBar使用 s
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • 使用 pygtk3 将 GUI 窗口添加到 python opencv2 程序

    我已经使用Python和Opencv2完成了一个程序 现在 我想向我的程序添加一个 GUI 窗口 我对 PyGtk3 有一些经验 因此 我修改了代码以采用 PyGtk3 但是 我遇到了错误 因此 我尝试了一个简单的程序来找出实际的错误 我的
  • Perl Tk 模块有哪些缺点?

    与在 Perl 中创建 GUI 的其他解决方案相比 Tk 模块有哪些缺点 我最近浏览了 Perl 的各种 gui 模块 这是我的总结 免责声明 最终我发现现有模块都不能满足我的需求 所以我开始编写自己的 gui 工具包 Tk 工作起来很不错
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 了解 fminunc 参数和匿名函数、函数处理程序

    请多多包涵 问题在最后 我试图找出 fminunc 调用方式的差异 这个问题源于 Andrew Ng 在他的 Coursera 机器学习课程中的第 3 周材料 我正在回答这个问题 Matlab Andrew Ng 机器学习课程中 t cos
  • 从开始/结束索引列表创建向量化数组

    我有一个两列矩阵M包含一堆间隔的开始 结束索引 startInd EndInd 1 3 6 10 12 12 15 16 如何生成所有区间索引的向量 v 1 2 3 6 7 8 9 10 12 15 16 我正在使用循环执行上述操作 但我想
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用
  • 在 React 中切换 css 类

    如何使用布尔值切换 React 中元素上 css 类的存在 在 Angular 2 中我可以这样做 class red isRed 如何在 React 中做熟悉的事情 在 React 中 元素使用如下语法获取它们的类 div div 但请注
  • ROC曲线和libsvm

    给定一条 ROC 曲线plotroc m see here http www csie ntu edu tw cjlin libsvmtools roc curve for binary svm 理论问题 如何选择要使用的最佳阈值 编程问题
  • 对数据进行分布拟合 - MATLAB

    我正在尝试对从显微镜图像中收集的一些数据进行分布 我们知道 152 左右的峰值是由于泊松过程造成的 我想将分布拟合到图像中心的大密度 同时忽略高强度数据 我知道如何将正态分布拟合到数据 红色曲线 但它不能很好地捕获右侧的重尾 尽管泊松分布应
  • Matlab Builder JA - 将 Matlab 编译成 Java jar - 免费版本?

    请记住 我对 Matlab 一无所知 Matlab Builder JA 允许开发人员构建 Matlab 应用程序并将其导出到 Java jar 中 太棒了 我只需要生成一个 jar 然后就可以从其他 java 代码中使用它 有谁知道单罐包
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 如何更改 SwiftUI 列表中分隔符的颜色?

    我在 SwiftUI 中创建了一个列表 我想更改颜色或删除分隔符 因为在 UIKit 中 我们可以轻松更改 TableView 中分隔符的颜色 下面是 SwiftUI 中列表的代码和 UI 图片 State private var user

随机推荐