lil*_*roo 2 java layout swing layout-manager insets
这是我用来实例化JFrame的代码示例:
public class TestFrame{
public static void main(String[] args){
JFrame frame = new JFrame();
Insets insets = frame.getInsets();
frame.setSize(new Dimension(insets.right + insets.left + 400, insets.bottom + insets.top + 400));
System.out.println(String.format("Top = %d \nBottom = %d \nLeft = %d \n Right
= %d", insets.top, insets.bottom, insets.left, insets.right));
frame.setResizable(false);
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
框架显示正常,但所有插图似乎都等于零.我需要知道顶部标题栏的大小,因为我想要一个大小为400x400的内容窗格.
我在多个平台上进行了测试,同样的事情发生在Windows和Mac上.
我究竟做错了什么 ?
pack()框架.这是最干净,最简单的解决方案,您不必关心边界插入.
如果contentPane恰好是400 x 400,那么创建一个类,为其preferredSize返回该值并将其用作contentPane:
class MyContentPane extends JPanel {
public static final int PREF_W = 400;
public static final int PREF_H = 400;
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H);
}
}
Run Code Online (Sandbox Code Playgroud)
或者更好:
class MyContentPane extends JPanel {
public int prefW;
public int prefH;
public MyContentPane(int prefW, int prefH) {
this.prefW = prefW;
this.prefH = prefH;
}
public Dimension getPreferredSize() {
return new Dimension(prefW, prefH);
}
}
Run Code Online (Sandbox Code Playgroud)
正如其他海报所提到的,你必须pack()在顶层窗口上使用并使用布局管理器.
我自己不喜欢这样做,而是让各种组件的实际首选大小和容器的布局管理器为我做出所有决定.