【问题标题】:Add Textfields on Jframe at Runtime在运行时在 Jframe 上添加文本字段
【发布时间】:2016-12-07 17:33:30
【问题描述】:

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

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() 不起作用。

【问题讨论】:

  • 哪一部分不工作?你得到什么结果?它与您想要的有什么不同?我们需要更多的知名度,朋友!
  • 这段代码只显示了一个带有一个按钮的文本字段,这是我在上面 GUIDesign() 方法的 panel1 中创建的。我想在输入时创建尽可能多的文本字段。但这段代码不起作用。
  • 1) public void TFArray 方法名应该是 lowerCamelCase,2) extends JFrame 不要扩展 JFrame 如果你需要扩展某些东西,从 JPanel 扩展并创建一个 @ 的实例987654330@。 3) JButton bsmbt= new JButton("OK"); 你知道你的全局变量JButton bsmbt; 因为那条线而没有被使用,对吧? 4) 究竟哪一部分不起作用?
  • 方法 TFArray() 不起作用。
  • 您需要致电revalidate()repaint()See this Q&A,但请使用Layout manager

标签: java swing jframe jtextfield


【解决方案1】:

您的代码中有很多错误:

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

  2. 你正在扩展JFrame,你不应该扩展JFrame,因为当你扩展它时,你的类是一个JFrameJFrame是刚性的,所以你不能将它放在其他任何东西中,相反,您可以考虑创建一个 JFrame 实例,如果您需要扩展 JComponent,请从 JPanel 扩展。

  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()

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多