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你的意思是纯代码比描述更好?在我看来,这个问题相当抽象。