【发布时间】:2022-01-22 02:36:45
【问题描述】:
我创建了一个带有 BorderLayout 的 JFrame,东边有一个面板(蓝色),中间有一个面板(绿色。中心面板包含一个橙色面板,它始终保持正方形。
我只是无法弄清楚为什么有机面板总是在顶部有一个间隙(在调整大小之后也是如此),因为我根本没有设置任何间隙。 This is how it looks 这就是我尝试过的:
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setMinimumSize(new Dimension(600+200, 600));
frame.setLocationByPlatform(true);
BorderLayout borderLayout = new BorderLayout();
frame.setLayout(borderLayout);
JPanel rightPanel = new JPanel();
rightPanel.setBackground(Color.BLUE);
rightPanel.setPreferredSize(new Dimension(200, 600));
frame.add(rightPanel, BorderLayout.EAST);
JPanel centerPanel = new JPanel();
centerPanel.setBackground(Color.GREEN);
SquarePanel squarePanel = new SquarePanel();
squarePanel.setBackground(Color.ORANGE);
centerPanel.add(squarePanel);
frame.add(centerPanel, BorderLayout.CENTER);
frame.setVisible(true);
}
}
public class SquarePanel extends JPanel {
@Override
public Dimension getPreferredSize() {
Dimension d;
Container c = getParent();
if (c != null) {
d = c.getSize();
} else {
return new Dimension(10, 10);
}
int w = (int) d.getWidth();
int h = (int) d.getHeight();
int s = (w < h ? w : h);
if(s%8 != 0){ // make Dimensions stay multiples of 8
s = s - s%8;
}
return new Dimension(s, s);
}
}
很遗憾,boarderLayout.setVGap(0) 不起作用。
【问题讨论】:
-
您应该在添加组件之后和设置可见之前在 JFrame 上调用
pack()。而且您不应该为框架设置尺寸或任何尺寸提示。让 JFrame 自己调整大小。 -
但是橙色面板的大小必须是 8 的倍数,因为它实际上是一个棋盘,或者你的意思是别的什么
-
这与设置 JFrame 的大小或大小提示有什么关系?同样,让 JFrame 自行调整大小。布局管理器和组件会告诉它如何正确调整大小。
-
你说的我试过了,但是差距还在
-
“棋盘” 对于“无间隙”(除非用作空白)棋盘,请参阅this example。