【发布时间】:2017-05-30 10:48:27
【问题描述】:
我正在使用 Swing 制作俄罗斯方块,我想将游戏板放置在屏幕中间,尺寸固定,旁边有 1 或 2 个面板。 我想让俄罗斯方块游戏从 JFrame 中获得一些余量,并且如果可能的话,仍然从容器内的 0,0 位置开始。
目标:
我尝试将游戏添加到 JPanel 并使其居中,但游戏无法显示。
我的代码:
public class Window {
public Window(int width, int height, String title, Game game) {
JFrame frame = new JFrame(title);
frame.setPreferredSize(new Dimension(width, height));
frame.setMaximumSize(new Dimension(width, height));
frame.setMinimumSize(new Dimension(width, height));
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.add(game);
game.start();
}
}
我找到但不起作用的居中固定布局:
JFrame Frame = new JFrame("CenterFrame");
Frame.setLocation(0, 0);
Frame.setSize(new Dimension(400, 400));// dim
JPanel FixedPanel = new JPanel(new GridBagLayout());
FixedPanel.setPreferredSize(Frame.getSize());
JPanel myPanel = new JPanel();
myPanel.setPreferredSize(new Dimension(100, 100));
myPanel.setBackground(Color.BLACK);
FixedPanel.add(myPanel);
Frame.add(FixedPanel);
Frame.setVisible(true);
【问题讨论】:
-
1) 为了尽快获得更好的帮助,请发帖 minimal reproducible example 或 Short, Self Contained, Correct Example。 2) 请学习常见的 Java 命名法(命名约定 - 例如
EachWordUpperCaseClass、firstWordLowerCaseMethod()、firstWordLowerCaseAttribute,除非它是UPPER_CASE_CONSTANT)并始终如一地使用它。 3) “我找到的居中固定布局:” 这就是问题的解决方案吗?如果是这样,它不应该是问题的一部分,而是作为答案发布。 4) 我会为此使用两种方法之一 a) 将主 UI 放在GridBagLayout中,没有任何限制。 .. -
.. 它将居中。 b) 为主 UI 分配一个空边框,将其添加到框架中,将框架设置为不可调整大小,然后打包顶级容器(窗口或框架)。
-
“我找到的居中固定布局但不起作用:” 好的,这回答了第三点。它如何/为什么不起作用?
-
您介意举个例子吗? JPanel 的居中固定布局代码甚至没有显示游戏。我不知道为什么。
-
“你介意展示一个例子吗?” 看到 MCVE/SSCCE 并且你澄清了顶部是否级别窗口可调整大小。
标签: java swing layout jpanel layout-manager