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

时间:2016-12-07 17:33:31

标签: 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);
}


}

- &gt;方法TFArray()不起作用。

1 个答案:

答案 0 :(得分:3)

您的代码中有很多错误:

  1. public void TFArray(JTextField[] temp):方法名称应以lowerCamelCase开头

  2. 您正在延伸JFrame,您不应该延长JFrame,因为当您延长它时,您的课程 {{1 }},JFrame是严格的,因此您无法将其置于其他任何内容中,相反,您可以考虑创建JFrame实例,如果您需要扩展JFrame,则可以{ {1}}。

  3. JComponent变量JPanel是构造函数中的局部变量,您的全局变量JButton bsmbt= new JButton("OK");不会在任何地方使用,如果您稍后尝试使用它,那么&#39 ;得到bsmbt,而不是将该行更改为:

    bsmbt
  4. 您正在使用NullPointerException的{​​{1}}布局,而是使用正确的Layout manager并阅读Null layout is evilWhy is it frowned upon to use a null layout in swing?。 Swing设计用于不同的PLAF,屏幕尺寸和分辨率,而像素完美的GUI(bsmbt= new JButton("OK"); )似乎是在Swing中创建复杂GUI的最佳和更快的方式,你制作的GUI越多,越多因此而导致的错误。

  5. 要解决您的问题,请致电revalidate()repaint()

      

    上面的代码创建了2个文本字段。但当我再次提出一些价值并提交时,它似乎并没有反映任何变化。

    这可能是因为您每次输入null方法时都会覆盖p2setBounds()xy个变量。但这是猜测,如果你想要一个真正的答案,请按照上面的建议发布一个正确有效的Minimal, Complete, and Verifiable example