GridBag Layout Manager 的问题

i_doit 2004-01-05 03:26:51
GridBag Layout Manager 中GridBagConstraints类有两个属性:weightx 和weighty,
它的作用是:如果frame的大小改变时,frame中的控件可以自动添充空白的部分,
但是无论weightx和weighty设为1还是100,效果都是一样的,我看了一些介绍都说的不清不楚,
请高手帮我解释一下。
...全文
70 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lionqun 2004-01-05
  • 打赏
  • 举报
回复
weightx 和weighty这两个属性表示当Container的大小被改变时,
组件本身大小的收缩和扩张能力
比如你设置了一个JLabel的weightx 和weighty为0
那么,无论你如何放大主窗口,这个Jlabel始终不改变大小和他的相对位置(既没有空隙)
自己试一试吧!


import java.awt.*;
import javax.swing.*;

public class test13
{
public static void main(String[] args)
{
FontDialogFrame frame = new FontDialogFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}

class FontDialogFrame extends JFrame
{
public FontDialogFrame()
{
setTitle("FontDialog");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

Container contentPane = getContentPane();
GridBagLayout layout = new GridBagLayout();
contentPane.setLayout(layout);

// construct components

JLabel faceLabel = new JLabel("Face: ");

face = new JComboBox(new String[]
{
"Serif", "SansSerif", "Monospaced",
"Dialog", "DialogInput"
});


JLabel sizeLabel = new JLabel("Size: ");

size = new JComboBox(new String[]
{
"8", "10", "12", "15", "18", "24", "36", "48"
});


bold = new JCheckBox("Bold");

italic = new JCheckBox("Italic");

sample = new JTextArea();
sample.setText(
"The quick brown fox jumps over the lazy dog");
sample.setEditable(false);
sample.setLineWrap(true);
sample.setBorder(BorderFactory.createEtchedBorder());

// add components to grid

GridBagConstraints constraints = new GridBagConstraints();

constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.EAST;
constraints.weightx = 0;
constraints.weighty = 0;

add(faceLabel, constraints, 0, 0, 1, 1);
add(sizeLabel, constraints, 0, 1, 1, 1);

constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weightx = 100;

add(face, constraints, 1, 0, 1, 1);
add(size, constraints, 1, 1, 1, 1);

constraints.weighty = 100;
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.CENTER;

add(bold, constraints, 0, 2, 2, 1);
add(italic, constraints, 0, 3, 2, 1);

constraints.fill = GridBagConstraints.BOTH;
add(sample, constraints, 2, 0, 1, 4);
}

public void add(Component c, GridBagConstraints constraints,
int x, int y, int w, int h)
{
constraints.gridx = x;
constraints.gridy = y;
constraints.gridwidth = w;
constraints.gridheight = h;
getContentPane().add(c, constraints);
}

public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;

private JComboBox face;
private JComboBox size;
private JCheckBox bold;
private JCheckBox italic;
private JTextArea sample;
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧