Cra*_*lus 16 java user-interface swing gridbaglayout
到目前为止,我设法尽可能避免使用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);
//
}
}
Run Code Online (Sandbox Code Playgroud)
我在框架的中心将标签和文本字段放在另一个旁边.
但是我期待它们会出现在左上角,因为gridx和gridy是标签的0.
即使我设置constraints.anchor = GridBagConstraints.FIRST_LINE_START;了相同的结果.
我错了吗?
来自SUN的帖子:
指定组件左上角的行和列.最左边的列的地址为gridx = 0,顶行的地址为gridy = 0.
Ben*_*ole 13
添加constraints.weighty = 1;到JLabel约束和constraints.anchor = GridBagConstraints.NORTHWEST;TextField约束.
编辑:
来自Oracle的GridBagLayout指南:
较大的数字表示组件的行或列应该获得更多空间.对于每列,权重与为该列中的组件指定的最高权重x相关,每个多列组件的权重在组件所在的列之间以某种方式分割.类似地,每行的权重与为a指定的最高权重相关.该行中的组件.额外的空间倾向于最右边的列和底行.
cam*_*ckr 13
您需要在Swing教程中进一步了解weightX/weightY它所声明的部分:
除非您为weightx或weighty指定至少一个非零值,否则所有组件在其容器的中心聚集在一起.
您指定了weightX但不是weightY.
编辑,这比我想象的要复杂得多.看来你还需要指定:
constraints.anchor = GridBagConstraints.FIRST_LINE_START;
Run Code Online (Sandbox Code Playgroud)
两个组件的重量相加.