java matlab swing

java - ¿Cómo obtener los límites del cuadro del eje en un JFrame?



matlab swing (1)

Obtuve la respuesta a mi pregunta anterior . Sin embargo, para obtener estas coordenadas (tamaño y posición de la caja del eje en el caso de axis equal ) necesitamos hacer algunos cálculos relativamente engorrosos. Sin embargo, dado que los gráficos de MATLAB se basan en Java, podemos obtener acceso a las propiedades de Java. He encontrado que si usamos esto en MATLAB:

jFrame = get(gcf,''JavaFrame''); BoxHeight = jFrame.getAxisComponent.getHeight; BoxWidth = jFrame.getAxisComponent.getWidth;

podemos obtener un ancho y alto de ventanas de figuras (quizás esto se puede asociar con los componentes del eje). Pero se diferencian del valor de get(gcf, ''Position'') o get(gca, ''Position'') en el caso de las unidades de píxeles. No soy un experto en Java (también intenté sin éxito encontrar estas propiedades usando el findjobj de Altman).

Por lo tanto, tengo dos preguntas:

  1. ¿Por qué el alto y el ancho de la ventana de figura (quizás esta es la caja del eje) derivada de las propiedades de MATLAB y Java no son las mismas (al menos, son números enteros en Java y números de coma flotante en MATLAB)?

Por ejemplo:

hf=figure(''units'',''pixels''); ha=gca(hf); set(ha,''units'',''pixels''); get(hf,''position'') get(ha,''position'')

ans =

488 342 560 420 73.8000 47.2000 434.0000 342.3000`

mientras que BoxHeight=525 , BoxWidth=700 y el desplazamiento siempre es cero ( alignmentX=0.0 y alignmentY=0.0 ).

  1. ¿Cómo obtener el tamaño exacto y la posición de los ejes de la ventana trazados en MATLAB usando Java ?

En MATLAB, tanto una figure como un axes tienen una propiedad llamada Position , pero no es lo mismo:

get(hf,''position'') le dará la posición de la ventana de figura en la pantalla .
get(ha,''position'') devolverá la posición de los ejes dentro de la ventana de la figura .

Por lo tanto, la salida del código

hf=figure(''units'',''pixels''); ha=gca(hf); set(ha,''units'',''pixels''); hfPos = get(hf,''position'') haPos = get(ha,''position'')

ans =

hfPos = 520 378 560 420 haPos = 73.8000 47.2000 434.0000 342.3000

tiene que ser interpretado así:

Sin embargo, no tengo idea de por qué get(ha,''position'') devuelve números de coma flotante.

En mi sistema (Win7 Pro, MATLAB R2016a, Java 1.7.0_60-b19), el siguiente código emite una advertencia:

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.

Por lo tanto, no confiaría en su uso. En cambio, usaría la información anterior para obtener el tamaño y la posición de los ejes trazados en MATLAB.