首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JFrame:获得无边框的尺寸?

JFrame:获得无边框的尺寸?
EN

Stack Overflow用户
提问于 2011-02-24 05:21:32
回答 3查看 46.6K关注 0票数 27

在Java语言中,有没有可能获得没有标题和其他边框的JFrame的宽度和高度?

frame.getWidth()和frame.getHeight()1似乎返回了包括边框在内的宽度。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2012-09-05 04:01:36

代码语言:javascript
运行
复制
frame.pack();
System.out.println("frame width : "+getWidth());
System.out.println("frame height: "+getHeight());
System.out.println("content pane width : "+getContentPane().getWidth());
System.out.println("content pane height: "+getContentPane().getHeight());
System.out.println("width  of left + right  borders: "+(getWidth()-getContentPane ().getWidth()));
System.out.println("height of top  + bottom borders: "+(getHeight()-getContentPane().getHeight()));
票数 7
EN

Stack Overflow用户

发布于 2014-04-21 21:05:50

这个很好用

代码语言:javascript
运行
复制
frame.getContentPane().getSize();

但如果你还没有添加内容,就不会。在我的例子中,我想在添加内容之前计算JFrame的内部维度,这样我就可以相应地划分内容。这是我想出来的。

代码语言:javascript
运行
复制
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

pack(); // Need this, otherwise insets() show as 0.  
int scrW = (int)screenSize.getWidth();
int scrH = (int)screenSize.getHeight();
  int innerW = scrW - getInsets().left - getInsets().right;
  int innerH = scrH - getInsets().top - getInsets().bottom;

  // Need to setSize(), otherwise pack() will collapse the empty JFrame
  setSize(scrW, scrH);
票数 4
EN

Stack Overflow用户

发布于 2018-08-17 20:10:28

下面是一个可以在JFrame和AWT的Frame (恰好是JFrame的超类型)上工作的代码片段:

代码语言:javascript
运行
复制
public static Dimension getInnerSize(Frame frame) {
    Dimension size = frame.getSize();
    Insets insets = frame.getInsets();
    if (insets != null) {
        size.height -= insets.top + insets.bottom;
        size.width -= insets.left + insets.right;
    }
    return size;
}

注意:插图只有在框架显示后才有效。

以下是解决此问题的另一个代码片段:

代码语言:javascript
运行
复制
private static Insets defaultInsets;
public static Insets getInsetsWithDefault(Frame frame) {
    // insets only correct after pack() and setVisible(true) has been
    // called, so we use some fallback strategies
    Insets insets = frame.getInsets();
    if (insets.top == 0) {
        insets = defaultInsets;
        if (insets == null) {
            insets = new Insets(26, 3, 3, 3);
            // usual values for windows as our last resort
            // but only as long as we never saw any real insets
        }
    } else if (defaultInsets == null) {
        defaultInsets = (Insets) insets.clone();
    }
    return insets;
}

这段代码需要用一个可见的框架调用一次。之后,即使对于不可见的帧(由于defaultInsets的缓存),它也可以正确地预测插入,假设它们总是相同的。

当然,只有当所有窗口都有相同的窗口装饰时,这才能起作用。但据我所知,不同的窗口可能存在不同的情况。

这也可能是有用的:

代码语言:javascript
运行
复制
frame.addWindowListener(new WindowAdapter() {

    @Override
    public void windowOpened(WindowEvent e) {
        MyUtilClass.getInsetsWithDefault(frame); // init the defaultInsets
    }

});

一旦窗口可见,它将调用getInsetsWithDefault()方法并初始化正确的defaultInsets

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5097301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档