到目前为止,我尽量避免手动编写代码使用GridBagLayout
,但这次我无法避免,并且正在阅读SUN的教程GridBagLayout。
然而,目前进展并不顺利。我认为我有所误解。
例如,我尝试以下代码(与 SUN 文章中的代码类似):
public class MainFrame extends JFrame {
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainFrame frame = new MainFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame
*/
public MainFrame() {
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container mainContainer = getContentPane();
mainContainer.setLayout(new GridBagLayout());
//add label
JLabel someLabel = new JLabel("Label 1:");
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
//constraints.anchor = GridBagConstraints.FIRST_LINE_START;
//constraints.weightx = 0.5;
mainContainer.add(someLabel, constraints);
JTextField someText = new JTextField(30);
constraints = new GridBagConstraints();
constraints.gridx = 1;
constraints.gridy = 0;
constraints.weightx = 0.5;
mainContainer.add(someText, constraints);
//
}
}
我在框架的中心将标签(label)和文本框(textfield)并排显示。
但是我希望它们出现在左上角,因为标签的gridx和gridy都是0。
即使我设置constraints.anchor = GridBagConstraints.FIRST_LINE_START;
也没有改变结果。
我错了吗?
根据SUN的文章:
指定组件左上角的行和列。最左侧的列地址为gridx=0,顶部行地址为gridy=0。
constraints.weighty=1
设置为标签,并将锚定点设置为标签的FIRST_LINE_START
,它就能正常工作。但是,weighty中的值1实际上代表什么意思呢? - Cratylusc.weighty = 1.0; //请求任何额外的垂直空间
。 - BenColeweightx
和weighty
的实际数值只与彼此相关。 - Ti Strga