GridBagLayout 使用每个JComponent的PreferredSize这个property来设定每个控件的Size。
虽然你在DrawChessBoard的“构造”里使用setSize()这个方法来设置了DrawChessBoard的Size。但是当GridBagLayout为每个空间分配空间的时候,首先读取每个控件的getPreferredSize(),来确定每个gridbag的大小。在确定好大小后在使用setSize()来改变控件的size。
而JPanel中当PreferredSize这个property没有被用户赋值的话,默认会使用MinimumSize的值.而MinimumSize默认是(0,0)。
这样DrawChessBoard就会被GridBagLayout设置为(0.0).
你在DrawChessBoard的“构造”里, 把setSize(500,500)改为setPreferredSize(500,500)就能搞定!