如何获取JFrame中轴框的边界?

Ale*_*vin 11 java matlab swing

我在上一个问题上得到了答案.但是,为了获得这些坐标(轴箱的大小和位置axis equal),我们需要做一些相对繁琐的计算.但是,由于MATLAB图形基于Java,我们可以访问Java属性.我发现如果我们在MATLAB中使用它:

jFrame = get(gcf,'JavaFrame');
BoxHeight = jFrame.getAxisComponent.getHeight;
BoxWidth = jFrame.getAxisComponent.getWidth;
Run Code Online (Sandbox Code Playgroud)

我们可以获得图形窗口的宽度和高度(也许这可以与轴的组件相关联).但它们与像素单元的值不同get(gcf, 'Position')get(gca, 'Position')在像素单元的情况下不同.我不是Java的专家(我也试图使用Altman找到这些属性,但未成功findjobj).

因此,我有两个问题:

  1. 为什么数字窗口(也许这就是轴盒)从MATLAB和Java的特性衍生的高度和宽度是不一样的(至少,他们在Java整数和浮点数在MATLAB)?

例如:

hf=figure('units','pixels'); ha=gca(hf);
set(ha,'units','pixels');
get(hf,'position')
get(ha,'position')
Run Code Online (Sandbox Code Playgroud)

ans =

488   342   560   420
73.8000   47.2000  434.0000  342.3000`
Run Code Online (Sandbox Code Playgroud)

然而BoxHeight=525,BoxWidth=700转变始终为零(alignmentX=0.0alignmentY=0.0).

  1. 如何使用Java在MATLAB中绘制窗口轴的确切大小和位置?

Mar*_*n S 1

在 MATLAB 中, afigure和 anaxes都有一个名为 的属性Position,但它不是同一件事:

get(hf,'position')将为您提供图形窗口在屏幕上的位置
get(ha,'position')将返回图形窗口中轴的位置

因此,代码的输出

hf=figure('units','pixels');
ha=gca(hf);
set(ha,'units','pixels');
hfPos = get(hf,'position')
haPos = get(ha,'position')
Run Code Online (Sandbox Code Playgroud)

答案=

hfPos = 520   378   560   420
haPos = 73.8000   47.2000  434.0000  342.3000
Run Code Online (Sandbox Code Playgroud)

必须这样解释: 这

但是,我不知道为什么get(ha,'position')返回浮点数。

在我的系统(Win7 Pro、MATLAB R2016a、Java 1.7.0_60-b19)上,以下代码发出警告:

get(gcf,'JavaFrame');
Warning: figure JavaFrame property will be obsoleted in a future release. For more information see the JavaFrame resource on the MathWorks web site. 
Run Code Online (Sandbox Code Playgroud)

因此我不会依赖使用它。相反,我将使用上述信息来获取 MATLAB 中绘制的轴的大小和位置。