弃用javacomponent和javaframe
175次浏览(过去30天)
显示旧的注释
从R2019b开始,我们被警告
javacomponent
而且
javaframe
属性将被删除。
我想打开这个帖子,以便在过渡期间替换的技巧和技巧。
比如我用的
javacomponent
将windows资源管理器上的文件/文件夹拖到GUI中,不知道我怎么能做到这一点,当它将被删除。
8的评论
马丁·莱希
2019年11月2日
我不是HTML和JavaScript方面的专家,但是如果我在浏览器窗口的某个地方(在您的放置区域之外)放置一个文件,整个浏览器窗口将被我的内容所取代(只在浏览器中工作,而不是在Matlab图中)。因此我认为这个拖放支持在Matlab UI图中是禁用的。金宝app
答案(4)
实验后奥特曼
2019年9月16日
我很抱歉地说,我不知道有什么简单的方法可以从java丰富的GUI过渡到uiffigures。所有主要的UI组件都是可用的(然后更多),但是Java中可能的许多自定义组件都没有(例如,边框,渲染器,编辑器等),更不用说为鼠标/键盘/动作事件提供的30多个Swing回调,这些事件使Java gui“活起来”。
此外,它们之间有太多根本的差异,[恕我直言]会阻碍任何自动转换尝试。例如,ufigure[still]没有工具栏、工具条、可定制图标或非像素单位(特别是标准化的)。
此外,许多现有GUI所依赖的非常棒的GUILT (GUI布局工具箱)仍然没有一个ui变体(新的网格布局/容器填补了大部分需求,但是一个一对一的GUILT变体将消除大量必要的返工)。
新
uihtml
而且
uistyle
函数乍一看很好,但实际上只能提供有限的解决方案。我们[仍然]没有文档化的方法来使用我们自己的CSS和JavaScript代码定制现有的ui组件,也没有能力应用项目/图形范围的CSS模板和JS函数。我当然可以理解MathWorks不愿意将其新UI框架应用于CSS和JS等特定技术,但最终的结果是用户自定义UI的能力受到严重限制。
底线是(至少在目前)看起来用户需要手动重新开发他们的ufiguregui。即使使用这种手动重新开发,与传统的基于java的ui相比,我们在新的uifigfigure的定制方面也受到了严重的限制。希望随着时间的推移,这些限制将被解决,让我们只获得ui数字相对于遗留数字的好处(这些也有很多,不要误解我的意思)。
没有人真的应该对此感到不安:我们都知道在Matlab GUI中使用未记录的Java是有风险的,而且不会永远持续下去。它良好地运行了近20年(未来可能还会持续几年)。这比大多数技术的生命周期都要长——DOS程序在必须为Windows重新开发、然后再为web重新开发、然后再为移动设备重新开发之前,它们的生命周期有多长?事实上,在我们需要重新开发gui以适应未来的新技术之前,Matlab的Java UI生命周期可能会比UI图形的未来生命周期更长。
推测未来,我希望MathWorks能够逐步转变,即,首先删除GUIDE,但保持Java GUI运行,然后(在后续版本中)使ufigure成为默认图形类型,但保持遗留图形运行,然后(在后续版本中)删除所有Matlab中的Java依赖,但仍然允许遗留的基于Java的GUI使用内置JVM或(当他们停止提供Java时)用户安装的JVM运行。随着时间的推移,这种渐进的步骤将使从Java到基于web的ui的过渡更加顺利,并将允许用户有足够的时间(重新)开发ui而没有时间压力。MathWorks的商业利益将是用户将继续升级他们的Matlab版本,避免了R2014b的崩溃,许多用户停止升级并坚持使用14a,因为新的HG2破坏了(或冻结了)他们的程序。话虽如此,MathWorks有许多我不知道的业务和研发考虑因素,所以他们可能决定不遵循我建议的渐进过渡路径:我们可能会发现R2020a会阻止所有遗留的Java GUI——我希望不会,但我真的不知道。
马丁·莱希
2019年11月6日
设置用户图形的图标
我的同事Andreas Justin已经找到了一个解决方案,以获得一个ui图的web窗口(见所附的函数)。这个解决方案不会抛出警告
警告:JavaFrame图形属性将在未来的版本中删除。
作为用法
mlapptools.getWebWindow (figWeb)
做(见
mlapptools
).
这个webwindows有Icon属性,可以通过设置新图标的路径来更改(在Windows中必须是*.ico文件)。
返回% Web based Matlab figure (uifigfigure) -> webwindow
figWeb = ufigfigure
ww = getWebWindowOfUiFigure(figWeb);
%设置一个新的图标;在Windows系统上,它必须是一个。ico文件
ww。图标= fullfile(matlabroot,“\ matlab工具箱\ \将来发布\ web \ \ uicontainer.ico形象”)
函数获取用户界面的web窗口:
函数webWindow = getWebWindowOfUiFigure(fig)
%返回给定图形句柄的底层web窗口,否则返回空
% webwindow数组
%
% %的例子
% {
%标准Java基于Matlab图->没有web窗口返回
图
ww = getWebWindowOfUiFigure(fig);
断言(isempty (ww))
返回% Web based Matlab figure (uifigfigure) -> webwindow
figWeb = ufigfigure
ww = getWebWindowOfUiFigure(figWeb);
Assert (number (ww) == 1)
%更改图形图标
ww。Icon %返回图标的当前路径
%设置一个新的图标;在Windows系统上,它必须是一个。ico文件
ww。Icon = fullfile(matlabroot, '\toolbox\matlab\icons\file_open.png')
ww。Icon = fullfile(matlabroot, '\toolbox\matlab\icons\webicon.gif')
% " C: \ MATLAB编译器\ R2019b \工具箱\ \ Resources \ default_icon.ico”
ww。Icon = fullfile(matlabroot, '\toolbox\matlab\toolstrip\web\image\uicontainer.ico')
%}
figNameOrig = fig.Name;%原始图形名称
figNameTemp = [fig.Name, tempname(“美元”));创建一个唯一的临时图形名称(如果存在多个相同名称的图形)
fig.Name = figNameTemp;%如果存在多个相同名称的图形,则重命名图形
drawnow
ww = matlab.internal.webwindowmanager.instance.findAllWebwindows();
webWindow = matlab.internal.webwindow.empty();
为Ii = 1:数字(ww)
如果比较字符串(ww (ii)。标题、figNameTemp)
webWindow = ww(ii);
打破;
结束
结束
fig.Name = figNameOrig;恢复原始图形名称
结束