2011-09-20 7 views
6

JDesktopPaneJInternalFrameの束を追加しています。ユーザーがメニューからさまざまな機能を開くことを選択すると、しかし、デフォルトのように見える左上とは対照的に、デスクトップフレームの中央に内部フレームを開くことを望みます。JDesktopPaneの中央にあるJInternalFrameを開くにはどうすればよいですか?

JInternalFramesを開いたまま中央に表示するか、開いた後に中央に移動するように指定するにはどうすればよいですか?

jDesktopPane.add(jInternalFrame); // jInternalFrame is not centered! 
+1

あなたがして取得し、画面の高さ、およびJInternalFrameのXとYを設定するには、いくつかの計算を行う必要があります。私は何年もそれをしていないので、私はあなたに完全な方法を与えることはできません。申し訳ありません – santiagobasulto

答えて

11

は、ここで私が使用した溶液はdogbaneの助言に基づき、次のとおりです。

Dimension desktopSize = desktopPane.getSize(); 
Dimension jInternalFrameSize = jInternalFrame.getSize(); 
jInternalFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2, 
    (desktopSize.height- jInternalFrameSize.height)/2); 
4

JDesktopPaneJInternalFrameのサイズに基づいて)新しい位置の左上隅をワークアウトしてからJInternalFrame.setLocationを呼び出します。

0

私はWindow.setLocationRelativeTo(Component)メソッドを提案します。このメソッドは、指定されたコンポーネントに対してウィンドウを中央に配置します。 。代わりにJDesktopPaneのに渡すのではそれ以外の場合は、お使いのJInternalFrameがあなたが渡し方成分に応じて中央に表示されますので、あなたは、コンポーネントの親フレームを取得したい場合があります

ここでは、コードサンプルです:

private void showDialog(Dialog dialogToCenter, Component button) { 
    Frame frame = JOptionPane.getFrameForComponent(button); 
    dialogToCenter.setLocationRelativeTo(frame); 
    dialogToCenter.setVisible(true); 
} 
参考のため
+2

私はsetLocationRelativeToはWindowsでのみ使用でき、JInternalFramesでは使用できないと考えています(Windowから継承しません)。たぶん私は何かが不足しているかもしれませんが、JDialogではなくJInternalFrameでこのメソッドを使用できますか? – Steven

+0

申し訳ありません、あなたは正しいです、私は間違ってJInternalFrameは、ウィンドウから拡張されたと思った。 – piepera

関連する問題