窗口尺寸小于应有的尺寸

时间:2013-04-19 23:21:14

标签: java swing jframe

好吧所以我有这个带有屏幕的JFrame。我已将大小设置为800乘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);

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

enter image description here enter image description here

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

我意识到我已经在每侧绘制了1个像素的小盒子,但差异远远超过2个像素。

2 个答案:

答案 0 :(得分:5)

这是因为内容需要挤压到框架的大小减去它的边界。

结帐this questionthis question以获取更详细的说明

布局管理器还会覆盖您在Screen组件上设置的size属性。在任何一种情况下,您都应该覆盖getPreferredSize

Screen方法

此外,您不应该依赖关于组件实际大小的幻数或假设,而应该使用getWidthgetHeight代替(我知道,它只适用于示范目的)

答案 1 :(得分:1)

取代" screen.setSize(screenSize);" type" screen.setPreferredSize(screenSize);"然后输入" frame.setVisible(true);"输入" frame.pack()"。你也可以删除" frame.setSize(screenSize);"如果你愿意的话。