我想在GUI中有一个文本框和一个按钮。按下按钮时,将出现一个历史记录窗口,如果用户选择了上一个条目,则他们在编辑框中突出显示的文本将被覆盖。
它应该像复制粘贴一样工作,历史记录窗口中选择的任何内容都应粘贴在所选内容上,或者在光标所在的任何地方都应添加新文本。
Matlab有什么方法可以做到这一点吗?是否可以访问编辑框中突出显示的内容?
答案 0 :(得分:1)
使用vanilla Matlab这是不可能的。似乎Mathworks正在扩展他们使用GUI支持的内容(survey 1,survey 2),但到目前为止他们还不允许这样做。
一种可能的解决方法是使用findjobj.m, by Yair Altman。他讨论了编辑框in this post
您可以在文本框中找到findjobj.m,找到所需的1或2行代码,这样您就不必携带所有3,400行代码。
然后您真正需要做的就是获取所选索引并从那里开始工作。
javaHandle = findjobj(editBoxHandle);
startSelect = get(javaHandle,'SelectionStart');
endSelect = get(javaHandle,'SelectionEnd');
获得所选文本的索引后,用新文本替换该文本几乎变得微不足道。
text = editBoxHandle.String;
editBoxHandle.String = [text(1:startSelect) newText text(endSelect:end)];
有一点需要注意,当用户点击按钮时,文本框将失去焦点,并且将不再清楚选择了哪个文本。您可以通过将焦点返回到文本框并重新选择按钮的回调中选择的内容来解决此问题。
uicontrol(editBoxHandle); %Give focus to the edit box, selecting the entire text
javaHandle.select(startSelect,endSelect); %select/highlight the correct stuff
这将突出显示将替换为用户选择的文本