在运行时在 Jframe 上添加文本字段
Add Textfields on Jframe at Runtime
我正在尝试通过在 运行 时获取输入来在框架上创建文本字段。可能吗?或者我必须为此创建另一个框架。我试过这段代码,但它不起作用。请帮帮我,告诉我这段代码有什么问题。
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() 不工作。
您的代码中有很多错误:
public void TFArray(JTextField[] temp)
: 方法名称应以 lowerCamelCase
开头
您正在扩展 JFrame
,您不应该扩展 JFrame
,因为当您扩展它时,您的 class 是 JFrame
, JFrame
是刚性的,所以你不能把它放在其他任何东西里面,相反你可以考虑创建一个 JFrame
实例,如果你需要扩展 JComponent
从 JPanel
.
延伸
JButton bsmbt= new JButton("OK");
变量 bsmbt
是构造函数中的局部变量,您的全局变量 bsmbt
未在任何地方使用,如果您尝试使用它稍后你会得到一个 NullPointerException
,而不是将该行更改为:
bsmbt= new JButton("OK");
您正在为 p2
使用 null
布局,而不是使用适当的 Layout manager and read Null layout is evil and Why is it frowned upon to use a null layout in swing?。 Swing 旨在与不同的 PLAF、屏幕尺寸和分辨率一起工作,而像素完美的 GUI(具有 setBounds()
)可能看起来是在 Swing 中创建复杂 GUI 的最佳和更快的方式,您制作的 GUI 越多,越多你会因此而得到的错误。
解决您的问题请致电revalidate()
and 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.
这可能是因为您每次输入 TFArray
方法时都覆盖了 x
、y
、height
和 width
变量。但这是一个猜测,如果你想要一个真正的答案,请按照上面的建议和 post 正确有效的 Minimal, Complete, and Verifiable example
我正在尝试通过在 运行 时获取输入来在框架上创建文本字段。可能吗?或者我必须为此创建另一个框架。我试过这段代码,但它不起作用。请帮帮我,告诉我这段代码有什么问题。
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() 不工作。
您的代码中有很多错误:
public void TFArray(JTextField[] temp)
: 方法名称应以 lowerCamelCase 开头
您正在扩展
JFrame
,您不应该扩展JFrame
,因为当您扩展它时,您的 class 是JFrame
,JFrame
是刚性的,所以你不能把它放在其他任何东西里面,相反你可以考虑创建一个JFrame
实例,如果你需要扩展JComponent
从JPanel
. 延伸
JButton bsmbt= new JButton("OK");
变量bsmbt
是构造函数中的局部变量,您的全局变量bsmbt
未在任何地方使用,如果您尝试使用它稍后你会得到一个NullPointerException
,而不是将该行更改为:bsmbt= new JButton("OK");
您正在为
p2
使用null
布局,而不是使用适当的 Layout manager and read Null layout is evil and Why is it frowned upon to use a null layout in swing?。 Swing 旨在与不同的 PLAF、屏幕尺寸和分辨率一起工作,而像素完美的 GUI(具有setBounds()
)可能看起来是在 Swing 中创建复杂 GUI 的最佳和更快的方式,您制作的 GUI 越多,越多你会因此而得到的错误。
解决您的问题请致电revalidate()
and 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.
这可能是因为您每次输入 TFArray
方法时都覆盖了 x
、y
、height
和 width
变量。但这是一个猜测,如果你想要一个真正的答案,请按照上面的建议和 post 正确有效的 Minimal, Complete, and Verifiable example