gpt4 book ai didi

java - BorderLayout.CENTER 没有居中我的 JPanel

转载 作者:行者123 更新时间:2023-12-01 18:34:11 24 4
gpt4 key购买 nike

我有以下代码来创建我的 GUI。

private static void createGUI() {
JFrame frame = new JFrame ("Tiles Game");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

frame.setJMenuBar (new JMenuBar());
frame.setContentPane (MainPanel.getInstance());

frame.pack();
frame.setResizable (false);
frame.setLocationRelativeTo (null);
frame.setVisible (true);
}

这是 MainPanel(扩展 JPanel)构造函数:

private MainPanel() {
super (new BorderLayout());
setPreferredSize (new Dimension (IMG_SIZE + 10, IMG_SIZE + 10));
...
panel = new ImagePanel();
add (panel, BorderLayout.CENTER);
}

这是 ImagePanel(扩展 JPanel)构造函数:

private ImagePanel() {
super();
setPreferredSize (new Dimension (IMG_SIZE, IMG_SIZE));
...
}

然而,ImagePanel 与 MainPanel 的左上角对齐而不是居中,因此我在底部和右侧得到了一堆额外的填充,而在顶部和左侧则没有。如何将其放置在主面板的中心?

最佳答案

可能发生的情况是您从左上角的 (0, 0) 绘制图像。然后将首选尺寸设置为大 10 像素,这会使面板变大,但图像仍为 (0, 0)

而是使用相同的尺寸而不添加 10,并且只需为面板使用 EmptyBorder。另外建议,重写 getPreferredSize() 而不是使用 setPreferredSize()

public class ImagePanel extends JPanel {
public ImagePanel() {
setBorder(new EmptyBorder(10, 10, 10, 10));
}

@Override
public Dimension getPreferredSize() {
return new Dimension(IMG_SIZE, IMG_SIZE);
}
}

此外,如果容器比子面板大,您可能需要考虑为容器面板使用 GridBagLayout 以获得确定的中心。你能做的事情很少。甚至考虑使用 ImageIconJLabel 而不是绘画(如果图像不需要调整大小(如 Camickr(+1) 指出的那样))。只需设置标签的布局并将其设置为框架的内容 Pane ,即可轻松将 JLabel 设为背景。

ImageIcon icon = new ImageIcon(...)
JLabel frameBackground = new JLabel(icon);
frameBackground.setLayout(new BorderLayout());
frame.setContentPane(frameBackground);

关于java - BorderLayout.CENTER 没有居中我的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com