Java 在JFrame层次结构中绘制可调整大小的方形棋盘

Java 在JFrame层次结构中绘制可调整大小的方形棋盘,java,swing,user-interface,Java,Swing,User Interface,我正在尝试用setColor(c)和fillRect(x,y,dx,dy)图形方法绘制棋盘。我希望它可以根据窗口的修改调整大小,但保持正方形的形状。另外,我希望它被放置在包围面板的中间。 正如下面可以看到的,最后一种情况并非如此。除此之外,一切都能很好地调整大小 JFrame使用GridBagLayout将其分成两个JPanel,保持比例为3:1。上面的单元格使用fill=GridBagConstraints。两者都使用。相应的上面板因此被拉伸,如红色边框所示 然后这个上面板包含另一个JPan

我正在尝试用
setColor(c)
fillRect(x,y,dx,dy)
图形方法绘制棋盘。我希望它可以根据窗口的修改调整大小,但保持正方形的形状。另外,我希望它被放置在包围面板的中间。 正如下面可以看到的,最后一种情况并非如此。除此之外,一切都能很好地调整大小

  • JFrame
    使用
    GridBagLayout
    将其分成两个JPanel,保持比例为3:1。上面的单元格使用
    fill=GridBagConstraints。两者都使用
    。相应的
    上面板
    因此被拉伸,如红色边框所示
  • 然后这个
    上面板
    包含另一个
    JPanel boardPanel
    仅用于棋盘本身。这部分肯定是错误的,但我不知道如何修复它 a<代码>上面板
    在其构造函数中定义以下布局:

    setLayout(new BorderLayout());
    setBorder(BorderFactory.createLineBorder(Color.RED));
    add(boardPanel, BorderLayout.CENTER);
    
    我想在网格单元中尽可能地拉伸框架

    b<代码>板面板
    具有这样的布局:

    setLayout(new BorderLayout());
    setBorder(BorderFactory.createLineBorder(Color.BLUE));
    
    坦率地说,没有别的办法。面板仅包含在
    paintComponent(图形g)
    中绘制的图形

  • setColor(c)
    fillRect(x,y,dx,dy)
    paintComponent(Graphics g)
    方法的
    boardPanel
    中循环完成,从
    x=0,y=0开始。棋盘单元格边的长度在每次调用此方法时通过计算
    upperPanel
    getWidth()
    getHeight()
    确定(因为
    boardPanel
    upperPanel
    中的嵌套类)

  • 有没有办法使
    板面板
    调整以适应其中绘制的内容?因此,
    boardPanel
    是电路板实际图像的大小。我猜
    上面板的布局会把它放在它的中心。

    你是说?为了更好的帮助,尽快发布一个SSCCE/MCVE,简短,可运行,可编译,因为attn screenshort谈论另一个issue@MadProgrammer然而,我想知道(1)是否可以更容易地实现(例如,没有自定义布局)(2)如果棋盘可以简单地绘制,而不是用按钮构建。你的解决方案非常出色,但我想知道这是唯一的解决方案,还是你刚刚准备了一个功能更强大的弹性棋盘。另请参见。@mKorbel你的意思是纯代码比描述更好?在我看来,这个问题相当抽象。