java:通过单击按钮动态生成文本框
我在单击“添加”按钮时添加了文本字段和标签。我已经给出了x和y坐标,但文本框的出现方式不正确。 如何纠正?以及如何增加文本框的宽度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.
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));
我尝试通过单击按钮动态生成文本框。宽度可以使用“设置大小”方法设置。我尝试通过单击按钮动态生成文本框。宽度可以使用“设置大小”方法设置。