如何在JFrame中居中对象

时间:2017-08-11 08:59:42

标签: java swing jframe

我不确定我应该如何集中注意力。我尝试使用locationRelativeTo null,但gameBoard停留在左上角。 但我需要把它放在中心位置。

 public static void main(String[] args) {
        JFrame game = new JFrame();
        game.setTitle("Game2048");
        game.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        game.setSize(420, 700);
        game.setResizable(false);
        game.add(new Game2048());
        // help here >>>>  game.setLocation();    
        game.setVisible(true);
    }

3 个答案:

答案 0 :(得分:1)

请参阅方法setLocationRelativeTo(Component)的javadoc:

  

如果组件为null,或与此组件关联的GraphicsConfigurationnull,则窗口将位于屏幕中央。可以使用GraphicsEnvironment.getCenterPoint方法获得中心点。

这意味着,你可以看到只需使用

game.setLocationRelativeTo(null);

,您的JFrame game将被放置在屏幕的中央。

答案 1 :(得分:1)

你可以在这里集中两件事。首先,您可以将整个程序窗口置于中心位置。这应该是

game.setLocationRelativeTo(null);

中心的第二件事是JFrame中的组件,在你的情况下是Game2048组件。因此,我可以推荐教程A Visual Guide to Layout Managers

在尺寸方面,要理解它们在Swing中的使用方式并不总是很简单。

我建议您在Game2048组件中设置尺寸,然后让JFrame应用尺寸。

如果您使用JPanel,您还可以使用setAlignment方法

panel.setAlignmentX(Component.CENTER_ALIGNMENT);
panel.setAlignmentY(Component.CENTER_ALIGNMENT);

答案 2 :(得分:1)

  

只有我添加的对象。

然后最简单的方法是使用GridBagLayout作为框架的内容窗格(而不是默认的BorderLayout)。

//game.add(new Game2048());
game.setLayout( new GridBagLayout() );
game.add(new Game2048, new GridBagConstraints());

使用默认约束将使组件在可用空间中居中。

阅读How to use GridBagLayout上Swing教程中的部分以获取更多信息,尤其是有关使用weightx / weighty约束以了解其工作原理的部分。