Can';t在Java AWT中重新定位一个文本字段
我正在尝试使用JavaAWT制作一个登录表单。我成功了。但当我点击按钮时,除了“Pin”之外的所有文件都显示在正确的位置。“Pin”显示在与“Name”相同的尺寸中。我无法重新定位“Pin”文本字段。为什么? 代码如下:Can';t在Java AWT中重新定位一个文本字段,java,layout,button,frame,textfield,Java,Layout,Button,Frame,Textfield,我正在尝试使用JavaAWT制作一个登录表单。我成功了。但当我点击按钮时,除了“Pin”之外的所有文件都显示在正确的位置。“Pin”显示在与“Name”相同的尺寸中。我无法重新定位“Pin”文本字段。为什么? 代码如下: import java.awt.*; import java.awt.event.*; import java.applet.*; public class Loginform extends Frame implements ActionListener { L
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Loginform extends Frame implements ActionListener
{
Label l1=new Label("Name");
Label l2=new Label("Street");
Label l3=new Label("City");
Label l4=new Label("Pin");
Label l5=new Label(" ");
Label l6=new Label(" ");
Label l7=new Label(" ");
Label l8=new Label(" ");
TextField t1=new TextField();
TextField t2=new TextField();
TextField t3=new TextField();
TextField t4=new TextField();
Button b= new Button("Submit");
public Loginform()
{ add(l1);
add(t1);
add(l2);
add(t2);
add(l3);
add(t3);
add(l4);
add(t4);
add(b);
add(l5);
add(l6);
add(l7);
add(l8);
l1.setBounds(20,45,70,20);
t1.setBounds(180,45,200,20);
l2.setBounds(20,95,70,20);
t2.setBounds(180,95,200,20);
l3.setBounds(20,135,70,20);
t3.setBounds(180,135,200,20);
l4.setBounds(20,175,70,20);
t4.setBounds(180,175,200,20);
l5.setBounds(20,300,70,20);
l6.setBounds(20,320,70,20);
l7.setBounds(20,340,70,20);
l8.setBounds(20,360,70,20);
b.setBounds(410,245,70,20);
b.addActionListener(this);
addWindowListener(new mwa());
}
public void actionPerformed(ActionEvent e)
{
l5.setText("Name: "+t1.getText());
l6.setText("Street: "+t2.getText());
l7.setText("City: "+t3.getText());
l8.setText("Pin: "+t4.getText());
}
public static void main(String s[])
{
Loginform l=new Loginform();
l.setSize(new Dimension(600,600));
l.setTitle("REGISTRATION");
l.setVisible(true);
}
}
class mwa extends WindowAdapter
{ public mwa(){}
public void windowClosing(WindowEvent e)
{ System.exit(0);
}
}
大多数标签没有显示在GUI上,因为您不遵守保存它们的容器的默认布局管理器。由于将添加到默认情况下使用BorderLayout的容器(框架),因此将仅显示最后添加的标签。要表明这一点,请将您的actionPerformed更改为:
public void actionPerformed(ActionEvent e) {
l5.setText("Name: " + t1.getText());
l6.setText("Street: " + t2.getText());
l7.setText("City: " + t3.getText());
l8.setText("Pin: " + t4.getText());
System.out.println("l5: " + l5.getBounds());
System.out.println("l6: " + l6.getBounds());
System.out.println("l7: " + l7.getBounds());
System.out.println("l8: " + l8.getBounds());
}
你会看到:
l5: java.awt.Rectangle[x=0,y=0,width=0,height=0]
l6: java.awt.Rectangle[x=0,y=0,width=0,height=0]
l7: java.awt.Rectangle[x=0,y=0,width=0,height=0]
l8: java.awt.Rectangle[x=8,y=30,width=584,height=562]
要使此代码正常工作,必须显示标签。我建议:
- 避免设置任何组件的边界、位置或位置
- 阅读有关如何使用布局管理器的教程,并使用它们帮助您创建显示美观、方便、灵活且易于修改的GUI
- 避免使用AWT,转而使用Swing,因为它更强大
- 将变量名更改为描述其用途的名称,使代码具有自注释性