1

frame在 Java 中创建了一个,其中有一些textfields and buttons。假设用户想要更多文本字段(例如添加更多数据),我想放一个button,当用户点击时,应该会出现the button一个新的。textfield然后用户可以通过单击应该出现的button另一个来填充数据。textfield我怎样才能做到这一点 ?我需要为按钮编写什么代码才能通过单击按钮显示越来越多的文本字段?谢谢 !

4

2 回答 2

3

明智的做法是,不要JFrame直接将组件添加到您的,而是将它们添加到JPanel. 虽然与你的问题有关,但看看这个小例子,希望能给你一些提示,否则问我什么是越界的。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JFrameExample
{   
    private JFrame frame;
    private JButton button;
    private JTextField tfield;
    private String nameTField;
    private int count;

    public JFrameExample()
    {
        nameTField = "tField";
        count = 0;
    }

    private void displayGUI()
    {
        frame = new JFrame("JFrame Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(0, 1, 2, 2));
        button = new JButton("Add JTextField");
        button.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                tfield = new JTextField();
                tfield.setName(nameTField + count);
                count++;
                frame.add(tfield);
                frame.revalidate();  // For JDK 1.7 or above.
                //frame.getContentPane().revalidate(); // For JDK 1.6 or below.
                frame.repaint();
            }
        });
        frame.add(button);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new JFrameExample().displayGUI();
            }
        });
    }
}
于 2012-09-04T01:26:35.497 回答
2

假设您有一个名为的主容器和一个已添加到panel的按钮变量,您可以执行以下操作:buttonpanel

// handle the button action event
button.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    // create the new text field
    JTextField newTextField = new JTextField();
    // add it to the container
    panel.add(newTextField);
    panel.validate();
    panel.repaint();
  }
});

添加新文本字段时,您可能需要提及一些与布局相关的特征,具体取决于您使用的布局管理器(例如,如果您使用GridBagLayout,则需要指定约束)。

于 2012-09-03T16:58:50.063 回答