java:通过单击按钮动态生成文本框

java:通过单击按钮动态生成文本框,java,swing,Java,Swing,我在单击“添加”按钮时添加了文本字段和标签。我已经给出了x和y坐标,但文本框的出现方式不正确。 如何纠正?以及如何增加文本框的宽度 import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.

我在单击“添加”按钮时添加了文本字段和标签。我已经给出了x和y坐标,但文本框的出现方式不正确。 如何纠正?以及如何增加文本框的宽度

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;

public class SS 
{
// Field members
 static JPanel panel = new JPanel();
static Integer indexer = 1;
static List<JLabel> listOfLabels = new ArrayList<JLabel>();
static List<JTextField> listOfTextFields = new ArrayList<JTextField>();

public static void main(String[] args)
{       
    // Construct frame
    JFrame frame = new JFrame();
    frame.setLayout(new GridBagLayout());
    frame.setPreferredSize(new Dimension(800, 800));
    frame.setTitle("My Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // Frame constraints
    GridBagConstraints frameConstraints = new GridBagConstraints();

    // Construct button
    JButton addButton = new JButton("Add");
    addButton.addActionListener(new ButtonListener());

    // Add button to frame
    frameConstraints.gridx = 0;
    frameConstraints.gridy = 0;
    frame.add(addButton, frameConstraints);

    // Construct panel
    panel.setPreferredSize(new Dimension(400, 400));
    panel.setLayout(new GridBagLayout());
    panel.setBorder(LineBorder.createBlackLineBorder());

    // Add panel to frame
    frameConstraints.gridx = 0;
    frameConstraints.gridy = 1;
    frameConstraints.weighty = 20;
    frame.add(panel, frameConstraints);

    // Pack frame
    frame.pack();

    // Make frame visible
    frame.setVisible(true);
}

static class ButtonListener implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent arg0) 
    {       
        // Clear panel
        panel.removeAll();

        // Create label and text field
        listOfTextFields.add(new JTextField());
        listOfLabels.add(new JLabel("Name " + indexer));

        // Create constraints
        GridBagConstraints textFieldConstraints = new GridBagConstraints();
        GridBagConstraints labelConstraints = new GridBagConstraints();

        // Add labels and text fields
        for(int i = 0; i < indexer; i++)
        {
            // Text field constraints
            textFieldConstraints.gridx = 20;
            textFieldConstraints.gridy = i;

            // Label constraints
            labelConstraints.gridx = 1;
            labelConstraints.gridy = i;

            // Add them to panel
            panel.add(listOfTextFields.get(i), textFieldConstraints);
            panel.add(listOfLabels.get(i), labelConstraints);
        }

        // Align components top-to-bottom
        GridBagConstraints c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = indexer;
        c.weighty =  1;
        panel.add(new JLabel(), c);

        // Increment indexer
        indexer++;
    }
}
导入java.awt.Dimension;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.border.LineBorder;
公营党卫军
{
//现场成员
静态JPanel面板=新JPanel();
静态整数索引器=1;
静态列表listOfLabels=newArrayList();
静态列表listOfTextFields=new ArrayList();
公共静态void main(字符串[]args)
{       
//构造框架
JFrame=新JFrame();
frame.setLayout(新的GridBagLayout());
frame.setPreferredSize(新尺寸(800800));
frame.setTitle(“我的示例”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//框架约束
GridBagConstraints frameConstraints=新的GridBagConstraints();
//构造按钮
JButton addButton=新JButton(“添加”);
addButton.addActionListener(newButtonListener());
//将按钮添加到框架
frameConstraints.gridx=0;
frameConstraints.gridy=0;
添加(addButton,frameConstraints);
//构造面板
面板。设置首选尺寸(新尺寸(400400));
panel.setLayout(新的GridBagLayout());
panel.setOrder(LineBorder.createBlackLineBorder());
//将面板添加到框架
frameConstraints.gridx=0;
frameConstraints.gridy=1;
frameConstraints.weighty=20;
添加(面板、框架约束);
//包装架
frame.pack();
//使框架可见
frame.setVisible(true);
}
静态类ButtonListener实现ActionListener
{
@凌驾
已执行的公共无效操作(操作事件arg0)
{       
//透明面板
panel.removeAll();
//创建标签和文本字段
添加(新的JTextField());
添加(新的JLabel(“Name”+索引器));
//创建约束
GridBagConstraints textFieldConstraints=新的GridBagConstraints();
GridBagConstraints labelConstraints=新的GridBagConstraints();
//添加标签和文本字段
for(int i=0;i

}

要使用文本框刷新框架,需要调用actionPerformed方法底部的pack

frame.pack();
为此,需要将frame作为类变量

static JFrame frame;
对于尺寸,网格袋布局将覆盖您的设置尺寸,因此您可以给它一个重量并使其拉伸以填充空间。这可以在您的其他textfieldcontaints调用之后进行

textFieldConstraints.weightx = 1;
textFieldConstraints.fill = GridBagConstraints.HORIZONTAL;

这将使文本框在您点击按钮并拿起该框时出现。

要使用文本框刷新框架,您需要调用actionPerformed方法底部的pack

frame.pack();
为此,需要将frame作为类变量

static JFrame frame;
对于尺寸,网格袋布局将覆盖您的设置尺寸,因此您可以给它一个重量并使其拉伸以填充空间。这可以在您的其他textfieldcontaints调用之后进行

textFieldConstraints.weightx = 1;
textFieldConstraints.fill = GridBagConstraints.HORIZONTAL;

这将使文本框在您按下按钮并拿起文本框时出现。

增加文本字段的宽度

listOfTextFields.add(new JTextField(null,10));

增加文本字段的宽度

listOfTextFields.add(new JTextField(null,10));

我尝试通过单击按钮动态生成文本框。宽度可以使用“设置大小”方法设置。我尝试通过单击按钮动态生成文本框。宽度可以使用“设置大小”方法设置。