【问题标题】:Window Size is smaller than it should be窗口大小小于应有的大小
【发布时间】:2013-04-13 10:47:41
【问题描述】:

好的,我已经有了这个带有屏幕的 JFrame。我已将大小设置为 800 x 800。但是创建的窗口比这小。这不是任务栏的问题,因为它不是全尺寸的。

package sharph;

import java.awt.Dimension;
import javax.swing.JFrame;

public class Main extends JFrame {

    public static String Title = "Game 1";

    public static Dimension screenSize = new Dimension(800,800);

    public static void main(String[] args) {        
        JFrame frame = new JFrame();

        frame.setTitle(Title);
        frame.setSize(screenSize);
        frame.setLocationRelativeTo(null);
        frame.setResizable(true);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

        Screen screen = new Screen();
        screen.setSize(screenSize);

        frame.add(screen);
        frame.setVisible(true);
    }
}

在屏幕类中,paint 方法在边框应该在的位置周围绘制一个框:

//Draw border
g.setColor(Color.RED);
g.drawRect(1, 1, 799, 799);

我运行的时候,窗口比盒子小,底部和右侧都被切掉了。

注意我手动调整大小以显示边框差异的第二张图片。

我意识到我在每边都画出了小 1 个像素的框,但差别远大于 2 个像素。

【问题讨论】:

  • 800*800 是窗口装饰(框架和标题栏)的大小,而不是内部空间的大小。
  • 我不确定,但试试frame.pack()

标签: java swing jframe


【解决方案1】:

发生这种情况是因为内容需要被压缩到减去边框后的框架大小。

结帐this questionthis question以获得更详细的解释

布局管理器还覆盖了您在Screen 组件上设置的大小属性。无论哪种情况,您都应该覆盖Screen 类的getPreferredSize 方法

另外,你不应该依赖幻数或关于组件实际大小的假设,而应该使用 getWidthgetHeight 代替(我知道,这只是为了演示目的)

【讨论】:

  • 非常感谢!是的,我会改变这些。
【解决方案2】:

而不是“screen.setSize(screenSize);”键入“screen.setPreferredSize(screenSize);”然后在你输入“frame.setVisible(true);”之后输入“frame.pack()”。您也可以删除“frame.setSize(screenSize);”如果你愿意的话。

【讨论】:

  • 通常情况下,您应该在使框架可见之前对其进行打包,否则会导致重绘问题
  • 啊,谢谢。我从来没有遇到过任何问题,但我想其他人可以。
猜你喜欢
  • 2016-02-16
  • 2020-04-27
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
相关资源
最近更新 更多