Java-如何通过单击按钮添加更多文本字段?
我用Java创建了一个Java-如何通过单击按钮添加更多文本字段?,java,swing,jbutton,jtextfield,Java,Swing,Jbutton,Jtextfield,我用Java创建了一个框架,其中有一些文本字段和按钮。假设用户需要更多的文本字段(例如添加更多数据),我想放置一个按钮,当用户单击按钮时,就会出现一个新的文本字段。然后,用户可以通过单击应显示另一个textfield的按钮再次在其中填充数据。 我该怎么做?我需要为按钮编写什么代码,以便通过单击按钮显示越来越多的文本字段? 谢谢大家! 假设您有一个名为panel的主容器和一个按钮变量button,该变量已添加到panel,您可以执行以下操作: // handle the button action
框架
,其中有一些文本字段和按钮
。假设用户需要更多的文本字段(例如添加更多数据),我想放置一个按钮
,当用户单击按钮
时,就会出现一个新的文本字段
。然后,用户可以通过单击应显示另一个textfield
的按钮再次在其中填充数据。
我该怎么做?我需要为按钮编写什么代码,以便通过单击按钮显示越来越多的文本字段?
谢谢大家! 假设您有一个名为panel
的主容器和一个按钮变量button
,该变量已添加到panel
,您可以执行以下操作:
// 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
,则需要指定约束).假设您有一个名为panel
的主容器和一个按钮变量button
,该变量已添加到panel
,您可以执行以下操作:
// 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
,则需要指定约束)。明智的做法是,不要直接将组件添加到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();
}
});
}
}
明智的做法是,不要直接将组件添加到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();
}
});
}
}
请您提供更多关于您当前代码状态的信息好吗?因此,我们可以猜测新创建的JTextField
必须位于何处,才能使其在屏幕上看起来令人愉悦。请提供更多有关您是否正在使用AWT/Swing/JavaFX
的信息?这些输入可能会为您提供更好的洞察力:-)我正在使用Swing。问题是,我无法通过单击JbuttonMay来访问更多JTextFields。请提供与当前代码状态相关的更多信息?因此,我们可以猜测新创建的JTextField
必须位于何处,才能使其在屏幕上看起来令人愉悦。请提供更多有关您是否正在使用AWT/Swing/JavaFX
的信息?这些输入可能会为您提供更好的洞察力:-)我正在使用Swing。问题是我无法通过单击JButtonTank you访问更多的JTextFields。我有JFrame而不是panel。所以我替换了panel.add(newTextField);panel.validate();用“JFrame”。但它不起作用。我单击按钮,但没有文本框将添加到框架中。抱歉,我是java新手,这是我的第一个应用;)。感谢+1编写了这个精巧的代码段,尽管有时在将组件添加到已经可见的容器中时也需要repaint()
。这是我编写的一段代码,我希望通过单击按钮4,会出现一个新的文本字段!它不起作用!ohhh私有void jButton4ActionPerformed(java.awt.event.ActionEvent evt){jButton4.addActionListener(){public void actionPerformed(ActionEvent e){JTextField newTextField=new JTextField();NewJFrame a=new NewJFrame();a.add(newTextField);a.validate();a.repaint();}谢谢。我用JFrame而不是panel。所以我用“JFrame”替换了panel.add(newTextField);panel.validate();但它不起作用。我单击按钮但没有文本框将添加到框架中。很抱歉,我是java新手,这是我的第一个应用;)。感谢+1提供了这段精心编制的代码片段,尽管有时在向已可见的容器中添加组件时也需要使用repaint()
。这是我编写的一段代码,我希望通过单击按钮4,会出现一个新的文本字段!它不起作用!OHH private void jButton4ActionPerformed(java.awt.event.ActionEvent evt){jButton4.addActionListener(){public void actionPerformed(ActionEvent e){JTextField newTextField=new JTextField();NewJFrame a=new NewJFrame();a.add(newTextField);a.validate();a.repaint();}这是我写的一段代码,我希望通过单击按钮4,会出现一个新的文本字段!它不工作!ohhh private void jButton4ActionPerformed(java.awt.event.ActionEvent evt){jButton4.addActionListener(new ActionListener()){public void actionPerformed(ActionEvent e){JTextField newTextField=new JTextField();NewJFrame a=new NewJFrame();a.add(newTextField);a.validate();a.repaint();}不,不,你在actionPerformed()中做什么
方法是错误的。您所做的是-您正在创建一个新的JTextField,同时您也在创建一个新的JFrame,并且您将这个JTextField添加到这个新的JFrame中(您从未在任何地方通过编写.setVisible(true)向用户显示过这个JFrame),虽然您从未将此新JTextField添加到以前的JFrame中,但该JFrame是可见的,因此此新添加的内容在任何地方都不可见,因为添加此JTextField的JFrame也是新的,并且您从未将其设置为可见。此外,revalidate()/repaint()
不会在任何地方使用,而是在添加新组件方面发生变化时使用