如何找出 a 的标题栏的高度JInternalFrame
?最好以独立于操作系统和 L&F 的方式执行此操作。
我见过这个SO question,它似乎在问一个类似的问题,但对于JDialog
. 但是,答案似乎建议使用Container
方法getInsets()
,javadoc指出:
确定此容器的 insets,指示容器边框的大小。
例如,一个 Frame 对象的顶部插图对应于框架标题栏的高度。
不幸的是,JInternalFrame
不是一个Frame
,而是一个JComponent
。因此,这仅提供边框的大小。
在上一个 SO 问题中,有人问用例是什么......所以让我解释一下我的。我想创建JInternalFrame
s,在鼠标点击时弹出,并调整到一些最大/最小标准,包括它不大于父框架内鼠标点击右下角的当前可见空间。
考虑以下 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
适当地设置大小。