【问题标题】:Java JFrame setSize doesn`t work properlyJava JFrame setSize 不能正常工作
【发布时间】:2016-03-24 14:35:43
【问题描述】:

我正在制作一个大小为 500x500 像素的 JFrame。 我制作了一个蓝色背景,并在右下角从 (490,490) 到 (500,500) 添加了一个红色方块。

图片:

我没有看到屏幕上的红色方块。 我将框架从不可调整大小切换到可调整大小,如果我让窗口变大,红点就在那里。 框架大小是否与应用程序的窗口大小相同? 如何使应用程序的窗口正好是 500x500?

【问题讨论】:

  • 请贴一些代码
  • 500x500的帧大小是包括窗口边框在内的整个帧的大小。在这种情况下,您的内容窗格(蓝色的)会变小。
  • 一般不设置JFrame的大小。您不知道 Windows、Linux 或 OSX 上的标题栏有多高。您可以设置绘图面板的大小。如果您需要一个 500 x 500 的绘图区域,您可以创建一个 500 x 500 的绘图区域。

标签: java swing jframe


【解决方案1】:

您的内容窗格应覆盖 getPreferredSize() 方法,返回一个宽度和高度为 500 像素的 Dimension 对象:

public class MyContentPane extends JPanel {
    private Dimension dimension;

    public MyContentPane() {
        this.dimension = new Dimension(500, 500);
    }

    @Override
    public Dimension getPreferredSize() {
        return this.dimension;
    }
}

// How to use your new class
SwingUtils.invokeLater(() -> {
    JFrame frame = new JFrame("Title");
    frame.setContentPane(new MyContentPane());
    frame.pack();
    frame.setVisible(true);
});

JFrame 的大小将由 Swing 通过考虑其中组件的首选大小来计算。

【讨论】:

    【解决方案2】:

    框架是整个窗口的大小,包括操作系统所需的标题栏。在JFrame 中的JPanel 中绘制事物时,如果JPanel 开始于标题栏下方,则 (0, 0) 坐标位于左上角。听起来您的标题栏高于 10 像素,因此 490 作为 y 组件实际上不在窗口内,因为 JPanel 的可见高度是 windowHeight - titleBarHeight

    【讨论】:

    • 如何获取titleBarHeight和leftBarWidth?
    • @RazvanTurtu 如果你只想获得你在上面绘制的面板的大小,你可以执行 frame.getContentPane().getHeight() 或 getWidth()。
    • 非常感谢,这对我帮助很大!
    • 如果有任何问题或答案对您有帮助,请点击向上箭头,如果您是提问者,请将其作为您问题的答案。
    【解决方案3】:

    应用户以下

    @Override
    PreferedSize()
    

    记住preferedSize方法是超类JFrame的方法。

    【讨论】:

    • 那应该getPreferredSize ;)
    【解决方案4】:

    这可能对你有用吗?

            JPanel aa = new JPanel(new GridBagLayout());
            aa.setMaximumSize(new Dimension(500,500));
            aa.setMinimumSize(new Dimension(490,490));
            aa.setBorder(BorderFactory.createLineBorder(Color.black));
    

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 1970-01-01
      • 2020-05-04
      • 2016-03-15
      • 1970-01-01
      • 2015-11-12
      • 2012-03-21
      • 1970-01-01
      • 2012-01-08
      相关资源
      最近更新 更多