应用程序自动添加10个像素的宽度和高度

时间:2013-07-06 21:48:07

标签: java swing jframe jpanel

我的问题非常奇怪,在搜索和阅读代码40次后,我无法解释为什么jpanel和jframe的宽度和高度都会增加10个像素。

代码是:

public class Game extends JPanel implements Runnable {

        public static final String NAME = "ALPHA !";

        public static final int WIDTH = 600, HEIGHT = 400;

        public static void main(String[] args) {
            Game game = new Game();
            game.setMinimumSize(new Dimension(WIDTH, HEIGHT));
            game.setMaximumSize(new Dimension(WIDTH, HEIGHT));
            game.setPreferredSize(new Dimension(WIDTH, HEIGHT));
            game.setFocusable(true);
            game.requestFocusInWindow();

            JFrame frame = new JFrame(NAME);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            frame.setLayout(new BorderLayout());
            frame.add(game, BorderLayout.CENTER);
            frame.pack();

            frame.setResizable(false);
            frame.setAlwaysOnTop(true);
            frame.setLocationRelativeTo(null);

            frame.setVisible(true);
            game.startGame();
        }

        public void startGame() {
            System.out.println("w " + getWidth() + ", h " + getHeight());
            new Thread(this).start();
        }
}

startGame方法中的println打印:

w 610, h 410

提前致谢。

2 个答案:

答案 0 :(得分:0)

使用frame.setUndecorated(true)然后您将了解为什么高度和宽度增加了10pxls。

答案 1 :(得分:0)

当我尝试将单个自定义JPanel添加到充当画布的JFrame时,我刚遇到此问题。我正在使用Java 8(更新231),但这仍然是一个问题。

我不知道为什么会这样。最后,可以通过在JFrame上的frame.setResizable(false)之后调用frame.setVisible(true)来解决此问题。

由于我在这里参加聚会很晚,我希望这也会对与此相关的人有所帮助。

祝你愉快

编辑:通过将frame.setResizable(false)移到frame.pack()之前,可以看到答案下方的注释暗示了相同的含义,效果也不错。很抱歉再次提出这个问题..:)