Java GridBagLayout-不同的行大小
通常情况下,我对Swing和不同的布局没有那么差,但这一个真的让我烦透了 使用GridBagLayout的下图有什么问题?每一个粗矩形都是一个JPanel。 细线只是正确y值的辅助对象 提前谢谢Java GridBagLayout-不同的行大小,java,swing,gridbaglayout,Java,Swing,Gridbaglayout,通常情况下,我对Swing和不同的布局没有那么差,但这一个真的让我烦透了 使用GridBagLayout的下图有什么问题?每一个粗矩形都是一个JPanel。 细线只是正确y值的辅助对象 提前谢谢 package at; import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.BorderFactory; import javax.sw
package at;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GridMask extends JFrame {
JPanel jPanel1, jPanel2, jPanel3, jPanel4, jPanel5, jPanel6;
public GridMask() {
unimportantStuff();
GridBagLayout gbl = new GridBagLayout();
setLayout(gbl);
GridBagConstraints gbc;
gbc = getGbc(0, 0, 3, 1, 0.5);
gbl.setConstraints(jPanel1, gbc);
gbc = getGbc(1, 0, 4, 1, 0.75);
gbl.setConstraints(jPanel2, gbc);
gbc = getGbc(2, 0, 3, 1, 0.5);
gbl.setConstraints(jPanel3, gbc);
gbc = getGbc(0, 3, 3, 1, 0.5);
gbl.setConstraints(jPanel4, gbc);
gbc = getGbc(1, 4, 2, 1, 0.25);
gbl.setConstraints(jPanel5, gbc);
gbc = getGbc(2, 3, 3, 1, 0.5);
gbl.setConstraints(jPanel6, gbc);
add(jPanel1);
add(jPanel2);
add(jPanel3);
add(jPanel4);
add(jPanel5);
add(jPanel6);
setVisible(true);
}
private GridBagConstraints getGbc(int x, int y, int height, int width, double weightY) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.gridheight = height;
gbc.gridwidth = width;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1.0;
gbc.weighty = weightY;
return gbc;
}
private void unimportantStuff() {
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jPanel5 = new javax.swing.JPanel();
jPanel6 = new javax.swing.JPanel();
jPanel1.setBorder(BorderFactory.createLineBorder(Color.BLACK));
jPanel2.setBorder(BorderFactory.createLineBorder(Color.BLACK));
jPanel3.setBorder(BorderFactory.createLineBorder(Color.BLACK));
jPanel4.setBorder(BorderFactory.createLineBorder(Color.BLACK));
jPanel5.setBorder(BorderFactory.createLineBorder(Color.BLACK));
jPanel6.setBorder(BorderFactory.createLineBorder(Color.BLACK));
}
public static void main(String[] args) {
new GridMask();
}
}
结果是一个JFrame,其中两行具有不同的高度,但一行中的单元格具有相同的高度
但是一行中的单元格都具有相同的高度
您正在告诉布局调整所有组件的大小,以填充每个单元格中的可用空间。我不明白您的要求。我觉得这张图表不错。发布您的演示问题的日志。@camickr:Added;马克:对不起,只是一个打字错误。如果这个栏有两行,一行是面板大小的3/4,另一行是1/4,那么权重和填充是否应该告诉布局?是我错了还是填充应该只使用所有位置,vut仍然尊重重量?@NeedCoffee,“重量”约束用于指示调整大小行为时发生的情况。组件按其首选大小进行分配。然后,如果您有额外的40个像素要使用,则根据“权重”百分比分配空间。所以组件将得到.75、.25或.50。如果使用“填充”,则所有组件的大小将调整为最大空间。有关约束如何工作的更详细说明,请阅读上Swing教程的部分。
gbc.fill = GridBagConstraints.BOTH;