4

好的,所以我得到了这个带有屏幕的 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);
    }
}

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

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

当我运行它时,窗口比盒子小,底部和右侧被切断。

在此处输入图像描述 在此处输入图像描述

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

我意识到我已经在每边绘制了小 1 个像素的框,但差异远大于 2 个像素。

4

2 回答 2

6

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

查看这个问题这个问题以获得更详细的解释

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

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

于 2013-04-19T23:33:46.557 回答
1

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

于 2013-04-20T00:53:05.377 回答