【问题标题】:Pack correctly arrays of elements on JFrame在 JFrame 上正确打包元素数组
【发布时间】:2016-02-19 12:56:07
【问题描述】:

我有简单的表格,还有两个数组,JLabels 和 JTextFeilds:

ArrayList<JLabel> jlabels = new ArrayList<JLabel>();
ArrayList<JTextField> textFields = new ArrayList<JTextField>();

我想将它添加到 Frame 并正确打包这些元素(请参见图片)

请看我的一段代码:

public class ProductForm extends JFrame {

private JPanel contentPane; 

public ProductForm() {

    initComponents();
    actions();      
}

public void actions() {
    setTitle("Product selection");

    setSize(600, 350);
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setVisible(true);
}

private void initComponents() {
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);

    ArrayList<JLabel> jlabels = new ArrayList<JLabel>();
    ArrayList<JTextField> textFields = new ArrayList<JTextField>();

    //for (int a = 0; a < product.list.size(); a++) {
    for (int a = 0; a < 7; a++) {  // let say 7 for example
    jlabels.add(new javax.swing.JLabel()); 
    textFields.add(new javax.swing.JTextField());       
        for (JLabel j:jlabels) {
            contentPane.add(j);
        }
        for (JTextField f:textFields) {
            contentPane.add(f);
        }
    }             

    pack();
}

因此,我有这样的内容:请看下图

请帮助我如何正确打包这些元素。 我应该以某种方式初始化它吗?

感谢您的帮助。

【问题讨论】:

  • 使用GridLayoutGridBagLayout 获取所需的格式。
  • @PragnaniKinnera,我不知道应该在哪里添加布局。我的意思是在代码的哪个位置?你能给我建议吗?请
  • 在你的构造函数中调用setLayout(new GridLayout(-))
  • 如果为文本字段提供了一些大小提示,原始代码会更好。所以textFields.add(new javax.swing.JTextField()); 最好是textFields.add(new javax.swing.JTextField(10)); //adjust col # to suit need
  • @EvgEvg 检查我的更新

标签: java swing jframe jtextfield form-layout


【解决方案1】:

您应该使用正确的布局。我建议使用GridLayout

在你的 initComponents() 方法中添加这一行:

contentPane.setLayout(new GridLayout(7,2)); // 7 rows, 2 columns

然后将循环更改为以下内容:

for (int a = 0; a < 7; a++) {
    jlabels.add(new javax.swing.JLabel()); 
    textFields.add(new javax.swing.JTextField());
}             

for (int i=0; i<7; i++) {
    contentPane.add(jlabels.get(i));
    contentPane.add(textFields.get(i));
}

【讨论】:

  • 非常感谢 Hackerdarshi
【解决方案2】:

试试这个

private void initComponents() {
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            contentPane.setLayout(new GridLayout(7, 2)); // 7 rows and 2 cols
            setContentPane(contentPane);

            ArrayList<JLabel> jlabels = new ArrayList<JLabel>();
            ArrayList<JTextField> textFields = new ArrayList<JTextField>();

            // for (int a = 0; a < product.list.size(); a++) {
            for (int a = 0; a < 7.; a++) { // let say 7 for example
                JLabel jLabel = new javax.swing.JLabel("New Label");
                jlabels.add(jLabel);
                JTextField jTextField = new javax.swing.JTextField();
                textFields.add(jTextField);
                contentPane.add(jLabel);
                contentPane.add(jTextField);
            }

            pack();
        }

更新

private void initComponents() {
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new GridBagLayout()); // 7 rows and 2 cols
        setContentPane(contentPane);

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.anchor=GridBagConstraints.NORTHWEST;
        constraints.weightx=0.5;
        constraints.weighty=0.5;


        ArrayList<JLabel> jlabels = new ArrayList<JLabel>();
        ArrayList<JTextField> textFields = new ArrayList<JTextField>();

        // for (int a = 0; a < product.list.size(); a++) {
        for (int a = 0; a < 7.; a++) { // let say 7 for example
            JLabel jLabel = new javax.swing.JLabel("New Label");
            constraints.gridx=0;
            constraints.gridy=a;
            jlabels.add(jLabel);
            JTextField jTextField = new javax.swing.JTextField(10);
            textFields.add(jTextField);
            contentPane.add(jLabel, constraints);
            constraints.gridx=1;
            contentPane.add(jTextField, constraints);
        }

        pack();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    相关资源
    最近更新 更多