【问题标题】:Swing GridBagLayout - auto-resize fieldsSwing GridBagLayout - 自动调整字段大小
【发布时间】:2014-07-16 19:59:41
【问题描述】:

这是一段由 netbeans Swing gui 设计器生成的代码。 我正在尝试执行以下操作:jLabel1jLabel2 将仅包含尺寸为 52x46 像素的图像图标,不包含文本,它们应固定在行的左侧和右侧,jTextField2 预计将填充jlabels 和自动调整到全屏/视图宽度之间的间隙。

问题是,无论窗口/视图大小如何,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();
}

【问题讨论】:

    标签: java swing


    【解决方案1】:

    See documentation of 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-17
      • 2020-09-13
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      相关资源
      最近更新 更多