弃用javacomponent和javaframe

175次浏览(过去30天)
布鲁诺陈德良
布鲁诺陈德良 2019年9月12日
评论道: 沃尔特·罗伯森 2021年11月10日
从R2019b开始,我们被警告 javacomponent 而且 javaframe 属性将被删除。
这对我来说是一个坏消息(我猜对Yair和他的精彩节目也是如此) 博客 ).
我想打开这个帖子,以便在过渡期间替换的技巧和技巧。
比如我用的 javacomponent 将windows资源管理器上的文件/文件夹拖到GUI中,不知道我怎么能做到这一点,当它将被删除。
8的评论
马丁·莱希
马丁·莱希 2019年11月2日
使用“ 使用表单输入选择" 从你提到的 HTML Rocks教程 是有效的。
我不是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——我希望不会,但我真的不知道。
5个评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年11月10日
感谢您的更新和分析!

登录评论。


马丁·莱希
马丁·莱希 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;恢复原始图形名称
结束

马克Schoen
马克Schoen 2019年9月30日
编辑:马克Schoen 2019年9月30日
MATLAB一直致力于通过添加一大堆新函数和特性来包含基于swing的框架的功能(包括“javacomponent”和“JavaFrame”)。下面的链接列出了一些最常见的特性,您现在可以作为Java Swing的替代品来访问:
如果您有其他的“javacomponent”或“JavaFrame”使用场景没有包含在上面链接的表格中,请完成页面顶部(橙色框)附近的调查,以帮助我们更好地了解您的需求。调查只需1-2分钟即可完成。
4评论
杰西·霍普金斯
杰西·霍普金斯 2021年9月9日
我很高兴地了解到,应用程序设计器编辑框确实有一个有效的回调为每个键击可靠的字符串值:ValueChangingFcn。万岁!

登录评论。


Xiangrui李
Xiangrui李 2020年10月3日
编辑:Xiangrui李 2020年10月13日
一些缺失的功能被逐渐添加。经过R2020b的测试,我可以确认如下:
  1. 图形图标实现:hFig。图标= 'fullFilename.png'
  2. uicontextmenu在那里,但我还没有使用它
  3. Print()不能用于fiie和剪贴板导出,但exportgraphics和copygraphics可以
  4. Uitable允许按代码选择单元格/行,以及单行选择,尽管没有文档
  5. 文件/文件夹DnD可以通过一些技巧来完成
我只是发布了一个简单的代码来做 文件拖放到ufige。 欢迎提出意见和建议。

标签

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!