标签: matlab-java

如何以编程方式在MATLAB编辑器中执行"collapse-all-folds"?

我一直在努力解决这个问题的时间比我想承认的要长一些.

我正在尝试以编程方式执行Action当用户单击View> Collapse All按钮或在编辑器窗口中右键单击然后Code Folding>时发生的相同操作Fold All.

到目前为止我发现了什么?

  • String对应于Action可在发现enum com.mathworks.mde.editor.ActionID并为:'collapse-all-folds'.
  • Action激活时,似乎执行以下方法:( org.netbeans.api.editor.fold.FoldUtilities.collapseAll(...)因此netbeans标记).
  • 此代码可以让我的情况下EditorAction,ActionManager,MatlabEditor:

jEd = com.mathworks.mlservices.MLEditorServices.getEditorApplication.getActiveEditor;
jAm = com.mathworks.mde.editor.ActionManager(jEd);
jAc = com.mathworks.mde.editor.EditorAction('collapse-all-folds');
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不能找到一种方法,实际上是激活Action.

任何想法/替代品?


EDIT1:在"书"中挖了一下之后,我觉得我比以前更接近(但仍然不是那里).从书中引用:

Java GUI组件通常使用a ActionMap来存储Actions由侦听器在鼠标,键盘,属性或容器事件上调用的runnable .与对象方法不同Actions,MATLAB不能直接调用.

然后解释了一个解决方法,其中大致涉及:获取某种Action对象; 使用as作为参数创建ActionEvent和调用Action' ,如下所示:actionPerformedActionEvent

import java.awt.event.*;
jEd …
Run Code Online (Sandbox Code Playgroud)

java matlab netbeans matlab-java

8
推荐指数
1
解决办法
849
查看次数

文本"范围"属性不包含正确的大小

我想在GUI中放置一些文本,我想知道uicontrol类型的确切大小'text'!

我发现有几个线程解释说这可以使用包含相同文本'Extent''text'对象的属性来完成,参见示例:

function form = tempfunc(txt,font,fontsize)
    if nargin <3
        fontsize = 10;
    end
    if nargin < 2
        font = 'courier';
    end
    f = figure('Visible','off','Units','pixels');
    u = uicontrol(f,'Style','text','Units','pixels','String',txt,'FontName',font,'FontSize',fontsize);
    textsize = get(u,'Extent');
    textsize = textsize(3:4);
    close(f);

    form = figure('Units','pixels');
    uicontrol(form,'Style','text','Units','pixels','String',txt,'FontName',font,'FontSize',fontsize,'Position',[5,5,textsize]);
end
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,这不起作用.当我运行上面的内容时,tempfunc(repmat('A',14));我得到下面的图窗口:

在此输入图像描述

从图像中可以看出,textsize变量中提取的文本的高度太小了!

请注意,这是我在运行Matlab R2014a的Windows计算机上运行程序时得到的结果.我后来在运行Matlab R2013b的Linux机器上运行完全相同的代码,在那台机器上我得到了我想要的结果.

我正在制作的GUI应该(希望)能够在任何计算机上运行,​​但是现在我真的不知道如何继续制作适用于任何机器的版本,所以请帮助我!

编辑: 我试图在运行Matlab R2011b(而不是我的R2014a)的另一台Windows 7机器(这次是Ultimate版本而不是我的企业版)上运行相同的代码,它仍然产生错误的文本框高度 - 但这一次文字框太高 - 见图片:

在此输入图像描述

编辑2: 我终于安装了R2014b,但遗憾的是它没有帮助!我看到了类似的图片:

在此输入图像描述

我还试图看看我的屏幕分辨率的不同选择是否有所不同 - 他们没有.

EDIT3:

我注意到不同的字体在高度上产生不同的错误,例如默认字体(MS Sans Serif)产生的文本框太高(并且随着更多行的添加,这个高度错误也会增加) - 在Linux上然而我得到了我尝试的所有字体的正确结果.

但我真正感兴趣的是使用快递字体的情况,因为我需要一个等宽字体用于我的目的.

windows matlab user-interface matlab-figure matlab-java

6
推荐指数
1
解决办法
608
查看次数

在Matlab中从命令行运行特定的单元格部分?

我在脚本中手动遍历Matlab中的各个单元(我们称它为foo.m):

%%
%Code for cell 1

%%
%Code for cell 2
Run Code Online (Sandbox Code Playgroud)

从Matlab的命令行中,我希望能够在单元2中有选择地运行代码。文档中仅包含有关如何进行交互操作的说明(例如,将光标放在适当的单元中,然后等等)。我想要命令行的内容,所以可以执行foo.runCell(1)之类的操作来运行上面单元格1中的代码。

如果没有办法,我将把这些单元分解成单独的脚本/函数。这不太方便,因为我处于“快速磨削原型”编码模式下,因此现在将所有内容都存储在一个文件中。

matlab matlab-java

5
推荐指数
1
解决办法
3473
查看次数

Matlab中的GZIP用于大文件

我有一个函数解包一个Z使用zlib库打包的字节数组(从这里改编).

  • 打包数据大小为4.11 GB,解压缩数据为6.65GB.我有32GB的内存,所以这远远低于限制.
  • 我尝试将java堆大小增加到15.96GB,但这没有帮助.
  • MATLAB_JAVA环境变量指向jre1.8.0_144.

我得到了神秘的错误

'MATLAB array exceeds an internal Java limit.' 
Run Code Online (Sandbox Code Playgroud)

在第2 此代码的行:

import com.mathworks.mlwidgets.io.InterruptibleStreamCopier
a=java.io.ByteArrayInputStream(Z);
b=java.util.zip.GZIPInputStream(a);
isc = InterruptibleStreamCopier.getInterruptibleStreamCopier;
c = java.io.ByteArrayOutputStream;
isc.copyStream(b,c);
M=typecast(c.toByteArray,'uint8');
Run Code Online (Sandbox Code Playgroud)

试图实施Mark Adler的建议:

Z=reshape(Z,[],8);
import com.mathworks.mlwidgets.io.InterruptibleStreamCopier
a=java.io.ByteArrayInputStream(Z(:,1));
b=java.util.zip.GZIPInputStream(a);
for ct = 2:8,b.read(Z(:,ct));end
isc = InterruptibleStreamCopier.getInterruptibleStreamCopier;
c = java.io.ByteArrayOutputStream;
isc.copyStream(b,c);
Run Code Online (Sandbox Code Playgroud)

但在此isc.copystream我得到这个错误:

Java exception occurred:
java.io.EOFException: Unexpected end of ZLIB input stream

    at java.util.zip.InflaterInputStream.fill(Unknown Source)

    at java.util.zip.InflaterInputStream.read(Unknown Source)

    at java.util.zip.GZIPInputStream.read(Unknown Source)

    at java.io.FilterInputStream.read(Unknown Source)

    at com.mathworks.mlwidgets.io.InterruptibleStreamCopier.copyStream(InterruptibleStreamCopier.java:72)

    at com.mathworks.mlwidgets.io.InterruptibleStreamCopier.copyStream(InterruptibleStreamCopier.java:51)
Run Code Online (Sandbox Code Playgroud)

直接从文件 …

java matlab gzip zlib matlab-java

2
推荐指数
1
解决办法
450
查看次数