【问题标题】:Can't reposition One textfiled in Java AWT无法在 Java AWT 中重新定位一个文本字段
【发布时间】:2013-03-03 06:29:46
【问题描述】:

我正在尝试使用 Java AWT 制作登录表单。我成功了。但是当我点击按钮时,除了“Pin”之外的所有文件都显示在正确的位置。 “Pin”显示在与“Name”相同的维度上。我无法重新定位“Pin”文本字段。为什么? 这是代码:

    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);
  }
}

【问题讨论】:

    标签: java layout button frame textfield


    【解决方案1】:

    您的大多数标签都没有显示在您的 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,因为它更加健壮和强大。
    • 将您的变量名称更改为描述其用途的名称,使您的代码具有自我注释功能。

    【讨论】:

    • @Arjun:也许是时候问一个新问题了。
    • 我编辑了这个问题。你能帮助我吗?我只是做了固定的。除了引脚,其他字段显示正常。请帮忙
    • @Arjun:我无法帮助你,因为你完全无视我的所有建议。解决方案是在任何东西上调用 setBounds,而是学习如何使用布局管理器。
    • 我不熟悉 awt。这就是为什么。那么如何在不固定的情况下正确定位它们。请告诉我。我会照你说的做。
    • @Arjun:你必须先学习一个库,然后才能使用它。同样,不要费心学习 AWT,而是学习 Swing,您可以 Google 搜索 Oracle Swing 教程,并阅读有关如何使用布局管理器和所有其他详细信息。
    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    相关资源
    最近更新 更多