のタイトルバーの高さを調べるにはどうすればよいJInternalFrame
ですか? OS と L&F に依存しない方法でこれを行うことが望ましいでしょう。
このSO questionを見たことがありますが、これは同様の質問をしているようですが、JDialog
. ただし、答えはContainer
メソッドの使用を示唆しているようgetInsets()
で、javadocには次のように記載されています。
コンテナーの境界線のサイズを示す、このコンテナーのインセットを決定します。
たとえば、Frame オブジェクトには、フレームのタイトル バーの高さに対応する上部インセットがあります。
残念ながら、ではJInternalFrame
なくです。そのため、これは境界線のサイズのみを提供します。Frame
JComponent
前の SO の質問で、ユースケースは何かと尋ねられたので、私の説明をさせてください。JInternalFrame
親フレーム内のマウスクリックの右下に現在表示されているスペースよりも大きくないことを含め、マウスクリックの時点でポップアップし、いくつかの最大/最小基準に合わせてサイズを変更したいです。
次の SSCCE を検討してください。
/**
* @author amaidment
*/
public class JInternalFrameToy {
public static void main(String[] args) {
// create top-level frame
final JFrame frame = new JFrame("JInternalFrame Toy");
frame.setPreferredSize(new Dimension(500, 500));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// create desktop pane
final JDesktopPane pane = new JDesktopPane();
// put button on the base of the desktop pane
JButton button = new JButton("Create Internal Frame");
button.setSize(new Dimension(100,100));
button.setVisible(true);
button.setLocation(0, 0);
button.setSelected(true);
pane.add(button);
frame.setContentPane(pane);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// create internal frame
JInternalFrame internal = new JInternalFrame("Internal Frame",
true, true, false, false);
JLabel label = new JLabel("Hello world!");
// set size of internal frame
Dimension parentSize = pane.getParent().getSize();
Insets insets = internal.getInsets();
Point point = pane.getMousePosition();
int width = parentSize.width - (insets.left+insets.right) - point.x;
int height = parentSize.height - (insets.top+insets.bottom) - point.y;
label.setPreferredSize(new Dimension(width, height));
internal.setContentPane(label);
internal.setLocation(point);
internal.pack();
internal.setVisible(true);
pane.add(internal);
internal.toFront();
}
});
frame.pack();
frame.setVisible(true);
}
}
これを実行するとわかるように、内部ポップアップは高さではなく幅に合わせてサイズ変更されます。つまり、高さがフレーム サイズよりも...JInternalFrame
のタイトル バーの高さを超えています。JInternalFrame
そのため、この高さを調べて、のサイズを適切に設定できるようにしたいと考えています。