我正在尝试使用以下面板布局创建UI:
但是,当我使用图像(在JLabel上)填充白色面板时,会发生以下情况:
问题是图像本身不会调整大小以使面板“适合”吗?如果是这样,是否有一个很容易调整它们的大小,或者我将不得不找到GridBag分配给它的大小然后根据它来缩放每个图像?
编辑:我在这里要做的是在实际添加图像时保持面板1(白色)与第一张图片中的尺寸相同。 我不希望面板调整大小并接管其他一些面板。
GridBagLayout gb = new GridBagLayout();
gb.columnWeights = new double[] {0.25,0.25,0.25,0.25};
gb.rowWeights = new double[] {0.5,0.5};
setLayout(gb);
GridBagConstraints gc = new GridBagConstraints();
gc.fill = GridBagConstraints.BOTH;
gc.gridx = 0;
gc.gridy = 0;
gc.gridwidth = 3;
add(new WhitePanel(), gc);
gc.gridx = 3;
gc.gridy = 0;
gc.gridwidth = 1;
add(new RedPanel(), gc);
gc.gridx = 0;
gc.gridy = 1;
gc.gridwidth = 1;
add(new GreenPanel(), gc);
gc.gridx = 1;
gc.gridy = 1;
gc.gridwidth = 2;
add(new BluePanel(), gc);
gc.gridx = 3;
gc.gridy = 1;
gc.gridwidth = 1;
add(new YellowPanel(), gc);
以下是我的WhitePanel构造函数:
public WhitePanel()
{
setBackground(new Color(1f,1f,1f,1f));
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 0;
gc.weightx = 1;
gc.weighty = 1;
gc.anchor = GridBagConstraints.CENTER;
for (int type = 0; type < 4; type++)
{
for (int tier = 0; tier < 7; tier++)
{
gems[type][tier] = new D3Gem(type, tier, 0);
add(new JLabel(new ImageIcon(gems[type][tier].getImage())),gc);
gc.gridx++;
}
gc.gridx = 0;
gc.gridy++;
}
}
编辑编辑:我希望白色面板保持相同的大小,并且JLabels自己调整大小(即标签之间的空白区域缩小)以适合该面板。
注意:如果我没有行gc.fill = GridBagConstraints.BOTH;
,那么白色面板上的图像只会占据白色面板的一小部分(刚好足以使它们不重叠)。因此,我认为gc.fill = GridBagConstraints.BOTH;
将完美地填充白色面板。
“解决方案”编辑:好吧,我似乎有一个解决方案,虽然不稳定。我只是将setPreferredSize(new Dimension(1,1));
附加到白色面板的构造函数中,因此它保持了我想要的大小。如果有人愿意详细说明发生了什么,我会很感激:)
答案 0 :(得分:2)
您可以为红色(或黄色)面板的ipadx
GridBagConstraint
来自javadoc
/**
* This field specifies the internal padding of the component, how much
* space to add to the minimum width of the component. The width of
* the component is at least its minimum width plus
* <code>ipadx</code> pixels.
* <p>
* The default value is <code>0</code>.
* @serial
* @see #clone()
* @see java.awt.GridBagConstraints#ipady
*/
public int ipadx;