2

这是一段由 netbeans Swing gui 设计器生成的代码。我正在尝试执行以下操作:jLabel1并且jLabel2将仅包含尺寸为 52x46 px 的图像图标,不包含文本,它们应固定在行的左侧和右侧,jTextField2预计将填补 jlabels 和 autoresize 之间的空白以全屏/视图宽度。

问题是,jTextField2无论窗口/视图的大小如何,它都保持相同的宽度......初始宽度取决于字段内硬编码文本的长度......

你有什么想法,如何做到这一点?

private void initComponents() {
    javax.swing.JLabel jLabel1;
    javax.swing.JLabel jLabel2;
    javax.swing.JTextField jTextField2;

    java.awt.GridBagConstraints gridBagConstraints;

    jLabel1 = new javax.swing.JLabel();
    jTextField2 = new javax.swing.JTextField();
    jLabel2 = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    getContentPane().setLayout(new java.awt.GridBagLayout());

    jLabel1.setText("ABC");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
    getContentPane().add(jLabel1, gridBagConstraints);

    jTextField2.setText("some text field content");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    getContentPane().add(jTextField2, gridBagConstraints);

    jLabel2.setText("ABC");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END;
    getContentPane().add(jLabel2, gridBagConstraints);

    pack();
}
4

1 回答 1

11

请参阅 GridBagLayout 的文档

GridBagConstraints.weightx , GridBagConstraints.weighty

用于确定如何分配空间,这对于指定调整大小行为很重要。除非您为行 (weightx) 和列 (weighty) 中的至少一个组件指定权重,否则所有组件都会在其容器的中心聚集在一起。这是因为当权重为零(默认值)时,GridBagLayout 对象会在其单元格网格和容器边缘之间放置任何额外的空间。

jTextField2.setText("some text field content");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.RELATIVE;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;

gridBagConstraints.weightx = 1.0; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

getContentPane().add(jTextField2, gridBagConstraints);
于 2013-02-11T19:23:07.287 回答