java - 在运行时在 Jframe 上添加文本字段

标签 java swing jframe jtextfield

我试图通过在运行时获取输入来在框架上创建文本字段。是否可以?或者我必须为此创建另一个框架。我尝试了这段代码,但它不起作用。请帮助我,并告诉我这段代码有什么问题。

import java.awt.BorderLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Check extends JFrame implements ActionListener
{
JTextField txtqty;
JTextField[] tfArr;
JPanel p1,p2;
JButton bsmbt;

public Check()
{
    GUIDesign();
}

public void GUIDesign()
{
    p1 = new JPanel();
    txtqty = new JTextField(10);
    JButton bsmbt= new JButton("OK");
    p1.add(txtqty);
    p1.add(bsmbt);

    p2=new JPanel();
    p2.setLayout(null);
    add(p1,BorderLayout.NORTH);
    setSize(500, 500);
    setVisible(true);
    setLocation(100, 100);

    bsmbt.addActionListener(this);




}

public static void main(String[] args)
{
    new Check();
}

public void TFArray(JTextField[] temp)
{
    int x,y,width,height;
    x=10;y=30;width=50;height=20;
    int no_of_textboxes = Integer.parseInt(txtqty.getText());
    temp=new JTextField[no_of_textboxes];

    for(int i=0;i<no_of_textboxes;i++)
    {
        temp[i]= new JTextField(10);
        temp[i].setBounds(x, y, width, height);
        x+=(width+10);
        p2.add(temp[i]);

    }
    add(p2);

}

@Override
public void actionPerformed(ActionEvent ae) {

        JOptionPane.showMessageDialog(this, txtqty.getText());
        TFArray(tfArr);
}


}

->方法 TFArray() 不起作用。

最佳答案

您的代码中有很多错误:

  1. public void TFArray(JTextField[] temp):方法名称应以小驼峰命名

  2. 您正在扩展 JFrame,但您不应该扩展 JFrame,因为当您扩展它时,您的类 JFrameJFrame 是刚性的,因此您不能将其放置在其他任何内容中,相反,您可以考虑创建一个 JFrame 实例,如果您需要的话扩展 JComponentJPanel 扩展。

  3. JButton bsmbt= new JButton("OK"); 变量 bsmbt 是构造函数内的局部变量,是全局变量 bsmbt 没有在任何地方使用,如果您稍后尝试使用它,您将得到一个 NullPointerException,而是将该行更改为:

    bsmbt= new JButton("OK");
    
  4. 您正在为 p2 使用 null 布局,而应使用正确的 Layout manager并阅读Null layout is evilWhy is it frowned upon to use a null layout in swing? 。 Swing 被设计为可与不同的 PLAF、屏幕尺寸和分辨率配合使用,而像素完美的 GUI(使用 setBounds())似乎是在 Swing 中创建复杂 GUI 的最佳且更快的方法,GUI 越多您犯的错误就越多。

要解决您的问题,请调用 revalidate()repaint()

The above code creates 2 textfields. but when I again put some value and submit it, it doesn't seem to reflect any changes.

这可能是因为您每次都覆盖 xyheightwidth 变量输入TFArray方法。但这只是猜测,如果您想要真正的答案,请按照上面的建议并发布正确且有效的 Minimal, Complete, and Verifiable example

关于java - 在运行时在 Jframe 上添加文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41023818/

相关文章:

java - 从 Jdialog 传递到 Jframe

java - 单击按钮时,我的 Jframe 不会保持打开状态

java - 为什么mysql表中的所有记录都被删除了?

java - 如何在 Java 中向 JFrame 添加文本

Java8 流奇怪的行为

java - 装饰模式设计

java - 如何使android日期选择器不允许选择过去的日期

java - 如何从cookie中获取 session ID?

java - 如何根据单元格中输入的文本内容增加jtable中行的高度

Java - JTextField - 当用户按下 "space bar"时调用函数