2010-11-24 13 views
2

私はJLayeredPaneを持ち、JLayeredPaneの内部はJInternalFrameです。私が必要とするのは、JInternalFrameのコンテンツペインの境界(x位置、y位置、幅、高さ)です。境界は、JLayeredPaneに関連している必要があります。私の問題は、境界線、タイトルバー、私はJInternalFrameの他の何かが私の計算を乱しているか分からない。それは数ピクセルオフです。Javaでのコンポーネントの座標の取得

ここで私はそれをどのように計算しようとしています。このコードはJInternalFrameにあります。

 

Rectangle area = new Rectangle(
       getX() + 2, //The x coordinate of the JInternalFrame + 2 for the border 
       getY() + ((javax.swing.plaf.basic.BasicInternalFrameUI) getUI()).getNorthPane().getHeight(), //The Y position of the JinternalFrame + theheight of the title bar of the JInternalFrame 
       getContentPane().getWidth() - 2, //The width of the Jinternals content pane - the border of the frame 
       getContentPane().getHeight() //the height of the JinternalFrames content pane 
       ); 
 

内部フレームのコンテンツペインの位置を取得する必要があります。 alt text

答えて

6

何かに関する座標は?スクリーン?窓?

getLocation()を呼び出すと、ウィンドウ階層内のコンポーネントの親を基準にした座標が与えられます。

SwingUtilitiesには座標を参照フレームの1つのフレームから別のフレームに変換するいくつかの方法があります。したがって、タイトルバーとフレームを補うには、次のようにします。

JInternalFrame iframe = ... 
Container c = iframe.getContentPane(); 
Rectangle r = c.getBounds(); 
r = SwingUtilities.convertRectangle(c.getParent(), r, iframe.getParent()); 
+0

非常にクールです。私はこれを行う簡単な方法があることを知っていた。これは完全に機能しました。 – user489041

2

JInternalFrameのgetBounds()メソッドは、必要な座標のRectangleを返します。次のようにしてください:

{ 
     ... 
     JInternalFrame iframe = ...; 
     Rectangle r = new Rectangle(iframe.getBounds()); 
} 

この方法では、境界を手動で計算する必要はありません。

+0

この問題は、これが私に内部フレームのタイトルバーと境界線を含む境界を与えることになります。私はコンテンツペインの境界だけが必要です。しかし、私はx座標とy座標がJLayeredPaneのコンテンツペインの位置に必要です。 – user489041

関連する問題