gpt4 book ai didi

java - 将布局 GridLayout 的 JPanel 置于另一个 JPanel 中

转载 作者:行者123 更新时间:2023-12-01 19:31:51 24 4
gpt4 key购买 nike

我正在尝试制作一个国际象棋游戏,在尝试使用 GUI 时,我遇到了这个问题:我似乎无法将棋盘在 JFrame 上垂直居中。 JPanel 水平居中,但垂直方向偏离中心,粘在顶部。

将使用 GridLayout 的面板添加到其容器并初始化框架的代码:

public class ChessGUI extends JFrame 
{
private static final long serialVersionUID = 1L;

private static Dimension appDimention = new Dimension(1000, 600);

public static JFrame frame = new JFrame("Chess");
public static JPanel background = new JPanel();
public static BoardGUI board = new BoardGUI();

public static int width;
public static int height;

public static void createFrame()
{
JFrame.setDefaultLookAndFeelDecorated(true);

//Set stuff that JFrame needs
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);

//Set stuff that JPanel needs
background.setPreferredSize(appDimention);

frame.getContentPane().add(background);
frame.pack();

//This 'board' is my Chess Board JPanel which I can't seem to centre
//'background' is a JPanel which is, as the name suggests, the background
background.add(board);

//Set the location of the JFrame and set it visible
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

BoardGUI

@SuppressWarnings("serial")
public class BoardGUI extends JPanel
{
GridLayout chessBoard = new GridLayout(8, 8);
Dimension boardDims = new Dimension(500, 500);

public BoardGUI()
{
this.setLayout(chessBoard);
this.setBackground(Color.BLACK);
this.setPreferredSize(boardDims);
}
}

在上面的代码中,我并没有真正做任何事情来使 BoardGUI 对象居中,但我确实尝试了以下两种方法,但得到了负面结果:

background.add(board, JPanel.CENTER_ALLIGNMENT)
background.add(board, BorderLayout.CENTER)

我现在得到的结果:

enter image description here

正如您所看到的,它不是垂直居中的,我期望的行为是它在框架上水平和垂直居中。

非常欢迎对我可能犯的任何错误提供任何帮助或见解!谢谢!

最佳答案

background 是一个 JPanel,它的默认布局为 FlowLayout,这就是您的问题所在。

我会改变

public static JPanel background = new JPanel();

public static JPanel background = new JPanel(new GridBagLayout());

建议...

好的,所以建议。

  • 避免静态,尤其是如果您只想从另一个类中的一个类访问信息时 - 有更好的方法可以实现这一点,而不会紧密耦合您的代码
  • 避免 setPreferredSize - 这不是定义自定义尺寸提示的推荐方法,而是覆盖 getPreferredSize,这会阻止其他人更改它。
  • 我不会设置 background 面板的 preferredSize,而是简单地使用 EmptyBorder 或 margins/inserts 支持GridBagLayout

关于java - 将布局 GridLayout 的 JPanel 置于另一个 JPanel 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59508399/

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